批处理截取字符串这行命令我做错了什么?
本帖最后由 Cairl 于 2021-11-25 12:37 编辑这是代码
@echo off
for /f "skip=3 tokens=3" %%a in ('dir /a /-c %1') do ( set size1=%%a )
echo %size1%
pause
是一个拖入文件就能获取文件大小的批处理
我想用for截取dir命令下的这一行
可是这行代码实际运行起来,获得的却是下面一行
请问各位我这是哪里错了? 对FOR /F的理解不够透彻。你的这条FOR命令是跳过DIR命令返回值的前3行,从第4行开始处理。%%a的输出结果共有3个,依次是7851583、7851583、252812505088。SET命令等于是执行了3次,最后一次赋给size1的值是252812505088。你最终得到的值当然就是这个咯。要精确定位就要对DIR命令的返回结果作筛选。如果仅仅只是要达到你说的这个效果,其实一个ECHO命令就够了,不用那么复杂。
@echo off
echo %~z1
pause zljiscx 发表于 2021-11-24 06:51
对FOR /F的理解不够透彻。你的这条FOR命令是跳过DIR命令返回值的前3行,从第4行开始处理。%%a的输出结果共 ...
可是单独一行 echo %~z1 不能把文件夹拖进去,拖进去会现实4096不知道为什么 zljiscx 发表于 2021-11-24 06:51
对FOR /F的理解不够透彻。你的这条FOR命令是跳过DIR命令返回值的前3行,从第4行开始处理。%%a的输出结果共 ...
而且我把skip这个参数去掉,得到的结果还是不会变,这令我很苦恼啊.. cubature 发表于 2021-11-24 13:24
for /f命令貌似只能跳过前面的行,不能跳过后面的行。所以最后一行是一定会被执行处理的
试试往in后的命 ...
这个不太明白,不知道可以麻烦写出来吗? Cairl 发表于 2021-11-24 12:28
可是单独一行 echo %~z1 不能把文件夹拖进去,拖进去会现实4096不知道为什么
还有文件夹啊?还以为只有文件呢。那么拖入文件夹你想得到的是什么呢?文件夹里所有文件的总大小吗? Cairl 发表于 2021-11-24 12:30
而且我把skip这个参数去掉,得到的结果还是不会变,这令我很苦恼啊..
这不是单单去掉skip参数就能解决的,看来你并没有理解我说的,还是好好解读一下FOR /?吧。
@echo off
for /f "tokens=3" %%a in ('dir/a /-c %1^|find "文件"') do set size1=%%a
echo %size1%
pause
看看这样是你想要的吗?如果拖入目录的子目录下的所有文件都要统计的话,dir命令就加个/s参数。 zljiscx 发表于 2021-11-25 02:19
这不是单单去掉skip参数就能解决的,看来你并没有理解我说的,还是好好解读一下FOR /?吧。
感谢!解决了燃眉之急 cubature 发表于 2021-11-24 22:04
in ('dir /a /-c %1')改成in ('dir /a /-c %1 | find "个文件"'),然后把skip参数去掉。
思路就是只找 ...
感谢!解决了燃眉之急
页:
[1]