问题:
想比较2个目录的文件数量,文件名等
解决办法
- 先用dir显示目录
- 得想办法把dir的结果存下来,存在文件或变量中(这个是baidu)
- 比较2个目录的dir结果
代码
- dir查询的结果,打括号也是无法被直接引用的
- 必须先把dir的结果存下来
- 记住set = 语法
- 记住 % 变量名 %
- 记住> < 两种重定向
- 记住>>补充 而>覆盖
- 方法:重定向方法,具体是 命令(生成的结果)> 存储位置 比如 dir xxx > yy.txt
@echo off
set filepath1=C:\Users\pc\Desktop\1.xls
dir C:\Users\pc\Desktop\excel>%filepath1%
echo done
set filepath2=C:\Users\pc\Desktop\2.xls
dir E:\GIT_WOW_EXCEL\Tools\nodejs_tools\client\xlsx>%filepath2%
echo done
pause
实际上,需要的是吧dir的结果变量化/文件化,把文件路径变量化木有意义。。。
但是犯了硬编码的问题
@echo off
dir C:\Users\pc\Desktop\excel>C:\Users\pc\Desktop\1.xls
echo done
dir E:\GIT_WOW_EXCEL\Tools\nodejs_tools\client\xlsx>C:\Users\pc\Desktop\2.xls
echo done
pause
引用网上查的硬编码问题
在计算机程序或文本编辑中,硬编码是指将可变变量用一个固定值来代替的方法。用这种方法编译后,如果以后需要更改此变量就非常困难了。大部分程序语言里,可以将一个固定数值定义为一个标记,然后用这个特殊标记来取代变量名称。当标记名称改变时,变量名不变,这样,当重新编译整个程序时,所有变量都不再是固定值,这样就更容易的实现了改变变量的目的。尽管通过编辑器的查找替换功能也能实现整个变量名称的替换,但也很有可能出现多换或者少换的情况,而在计算机程序中,任何小错误的出现都是不可饶恕的。最好的方法是单独为变量名划分空间,来实现这种变化,就如同前面说的那样,将需要改变的变量名暂时用一个定义好的标记名称来代替就是一种很好的方法。
硬编码就是一种不够灵活的代码方案,比如说,一个服务器端的程序,在执行是需要创建服务器进行监听,你可以简单的讲监听的端口号放到代码中,也可以通过程序参数传入,也可以通过配置文件放置。其中把端口号放到代码中就属于硬编码。
通常情况下,都应该避免使用硬编码方法。
@echo off
dir C:\Users\pc\Desktop\excel>C:\Users\pc\Desktop\1.xls
echo done
dir E:\GIT_WOW_EXCEL\Tools\nodejs_tools\client\xlsx>C:\Users\pc\Desktop\2.xls
echo done
pause
遗留问题
- 怎么把文件存入xls不报错?实际可以打开,存xlsx也不行
- 怎么存为xls的2个sheet,而不是2个xls
- 事实上试过了,存为xls和txt都可以,没有的话,会自己创建
- 如何把dir的查询结果,存到一个变量里??没懂
- 如果把dir的查询结果,分别存到不同的变量里?
- 百度了一堆,很多看不懂。。。。
@echo off 问题
echo off就是下面所有的语句的输出都不显示到屏幕。
另外,@也有类似的作用,只不过@只作用于和它同在一行的语句上。
https://zhidao.baidu.com/question/21121153.html?fr=qrl3
就是说关闭回显
@echo off并不是DOS程序中的,
而是DOS批处理中的。
当年的DOS,所有操作都用键盘命令来完成,
当你每次都要输入相同的命令时,
可以把这么多命令存为一个批处理,
从此以后,只要运行这个批处理,
就相当于打了几行、几十行命令。
DOS在运行批处理时,
会依次执行批处理中的每条命令,
并且会在显示器上显示,
如果你不想让它们显示,
可以加一个“echo off”
当然,“echo off”也是命令,
它本身也会显示,
如果连这条也不显示,
就在前面加个“@”。
说了这么多,
我觉得非常详细了,
可能你还是不懂。
没有经过DOS时代的人,
想法跟我们是有区别的。