Windows批处理文件:用于循环通过DIR命令获得的每个文件

时间:2018-07-05 11:22:19

标签: batch-file

我有以下蝙蝠文件:

@ECHO OFF
SET @logPath=C:\Users\rialves\Documents\Teste\
SET @date=2015-04-07
@ECHO ON
FOR /f %%f IN ('DIR /s /b %@logPath% ^| findstr %@date% ^| findstr .zip') DO ECHO %%f
PAUSE

如果我运行命令DIR /s /b %@logPath% | findstr %@date% | findstr .zip
我得到以下输出:

C:\Users\rialves\Documents\Teste\REST.API\rest api 1\2015-04-07.zip
C:\Users\rialves\Documents\Teste\REST.API\rest api 1\teste 2015-04-07 - Copy.zip
C:\Users\rialves\Documents\Teste\REST.API\rest api 1 - Copy\2015-04-07.zip
C:\Users\rialves\Documents\Teste\REST.API\rest api 1 - Copy (2)\2015-04-07.zip
C:\Users\rialves\Documents\Teste\REST.API\rest api 1 - Copy (3)\2015-04-07.zip
C:\Users\rialves\Documents\Teste\REST.API\rest api 1 - Copy (4)\2015-04-07.zip
C:\Users\rialves\Documents\Teste\REST.API\rest api 1 - Copy (5)\2015-04-07.zip

但是,当通过FOR循环回显时,我得到:

C:\Users\rialves\Documents\Teste>ECHO C:\Users\rialves\Documents\Teste\REST.API\rest
C:\Users\rialves\Documents\Teste\REST.API\rest

C:\Users\rialves\Documents\Teste>ECHO C:\Users\rialves\Documents\Teste\REST.API\rest
C:\Users\rialves\Documents\Teste\REST.API\rest

C:\Users\rialves\Documents\Teste>ECHO C:\Users\rialves\Documents\Teste\REST.API\rest
C:\Users\rialves\Documents\Teste\REST.API\rest

C:\Users\rialves\Documents\Teste>ECHO C:\Users\rialves\Documents\Teste\REST.API\rest
C:\Users\rialves\Documents\Teste\REST.API\rest

C:\Users\rialves\Documents\Teste>ECHO C:\Users\rialves\Documents\Teste\REST.API\rest
C:\Users\rialves\Documents\Teste\REST.API\rest

C:\Users\rialves\Documents\Teste>ECHO C:\Users\rialves\Documents\Teste\REST.API\rest
C:\Users\rialves\Documents\Teste\REST.API\rest

C:\Users\rialves\Documents\Teste>ECHO C:\Users\rialves\Documents\Teste\REST.API\rest
C:\Users\rialves\Documents\Teste\REST.API\rest

那是为什么,我该如何解决?

1 个答案:

答案 0 :(得分:2)

您的输出字符串在路径中的第一个空格处被截断,因为FOR / F默认会解析由空格和/或制表符分隔的标记。

解决方案很简单-在FOR / F中禁用DELIMS选项,以便将整个路径视为单个令牌。

FOR /f "delims=" %%f IN ...