【发布时间】:2015-04-16 07:11:55
【问题描述】:
我在一个简单的批处理命令中遇到了问题,我不明白为什么“令牌”选项不能正常工作。我要做的是在批处理文件中使用 dir 命令列出文件夹的内容,并过滤输出以仅显示文件的大小和名称。另外一个我会将输出重定向到一个文件。
例如,在包含 3 个 PDF 文件的文件夹中执行的默认 dir 输出如下:
Volume in drive C is Windows
Volume Serial Number is 8E72-826A
Directory of C:\Test
16.04.2015 08:36 <DIR> .
16.04.2015 08:36 <DIR> ..
02.07.2014 14:35 428.974 Metrou (2).pdf
02.07.2014 14:35 428.974 Metrou (3).pdf
02.07.2014 14:35 428.974 Metrou.pdf
3 File(s) 1.286.922 bytes
2 Dir(s) 123.298.713.600 bytes free
我想要得到的是以下结果:
428.974 Metrou (2).pdf
428.974 Metrou (3).pdf
428.974 Metrou.pdf
为了实现这一点,我正在尝试以下代码:
FOR /f "tokens=3,*" %%G IN ('dir C:\Test\*.* ^| find "pdf"') DO echo %%G >> abo.txt
结果只是大小,确实是标记 3,但它应该继续使用我指示的剩余标记: ,* 在 3 之后
428.974
428.974
428.974
我也尝试了另一个选项“tokens=3*”,但结果相同。如果我将令牌更改为其他数字,例如 2,它会在我们的案例中正确显示小时:
14:35
14:35
14:35
所以它似乎在读取我的令牌选项,但只有 = 之后的第一个数字。我没有使用 delim,因为输出只有空间,默认情况下被读取为 delim,而且我也可能有文件名中带有空格的文件,如上面的示例所示。 此外,代码将保存在 .bat 文件中。
知道为什么它会忽略标记中的 ,* 或 * 吗?
感谢和问候,
尤利安
【问题讨论】:
-
find "pdf" will findpdf, but notPDF. You should use the/iparameter. Anyway: why do you usefind "pdf"` 而不仅仅是dir *.pdf? -
这确实是一个更短的方法,谢谢斯蒂芬!
-
Stephan,实际上 dir *.pdf 将传递给输出,该输出将被重定向到 a 文件,即我不需要的行。示例:驱动器 C 是 Windows 编号是 8E72-826A C:\Users\%userprofile%\Desktop 和底部的磁盘空间信息:879.104 字节 123.234.299.904 字节空闲
-
是的,这是一个很好的理由。
标签: batch-file token