Cairl 发表于 2021-11-24 01:58

批处理截取字符串这行命令我做错了什么?

本帖最后由 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命令下的这一行


可是这行代码实际运行起来,获得的却是下面一行



请问各位我这是哪里错了?

zljiscx 发表于 2021-11-24 06:51

对FOR /F的理解不够透彻。你的这条FOR命令是跳过DIR命令返回值的前3行,从第4行开始处理。%%a的输出结果共有3个,依次是7851583、7851583、252812505088。SET命令等于是执行了3次,最后一次赋给size1的值是252812505088。你最终得到的值当然就是这个咯。要精确定位就要对DIR命令的返回结果作筛选。如果仅仅只是要达到你说的这个效果,其实一个ECHO命令就够了,不用那么复杂。
@echo off
echo %~z1
pause

Cairl 发表于 2021-11-24 12:28

zljiscx 发表于 2021-11-24 06:51
对FOR /F的理解不够透彻。你的这条FOR命令是跳过DIR命令返回值的前3行,从第4行开始处理。%%a的输出结果共 ...

可是单独一行 echo %~z1 不能把文件夹拖进去,拖进去会现实4096不知道为什么

Cairl 发表于 2021-11-24 12:30

zljiscx 发表于 2021-11-24 06:51
对FOR /F的理解不够透彻。你的这条FOR命令是跳过DIR命令返回值的前3行,从第4行开始处理。%%a的输出结果共 ...

而且我把skip这个参数去掉,得到的结果还是不会变,这令我很苦恼啊..

Cairl 发表于 2021-11-24 17:14

cubature 发表于 2021-11-24 13:24
for /f命令貌似只能跳过前面的行,不能跳过后面的行。所以最后一行是一定会被执行处理的

试试往in后的命 ...

这个不太明白,不知道可以麻烦写出来吗?

zljiscx 发表于 2021-11-25 00:32

Cairl 发表于 2021-11-24 12:28
可是单独一行 echo %~z1 不能把文件夹拖进去,拖进去会现实4096不知道为什么

还有文件夹啊?还以为只有文件呢。那么拖入文件夹你想得到的是什么呢?文件夹里所有文件的总大小吗?

zljiscx 发表于 2021-11-25 02:19

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参数。

Cairl 发表于 2021-11-25 12:36

zljiscx 发表于 2021-11-25 02:19
这不是单单去掉skip参数就能解决的,看来你并没有理解我说的,还是好好解读一下FOR /?吧。


感谢!解决了燃眉之急

Cairl 发表于 2021-11-25 12:37

cubature 发表于 2021-11-24 22:04
in ('dir /a /-c %1')改成in ('dir /a /-c %1 | find "个文件"'),然后把skip参数去掉。

思路就是只找 ...

感谢!解决了燃眉之急
页: [1]
查看完整版本: 批处理截取字符串这行命令我做错了什么?