BATCH - for循环:为什么只处理最后一个文件?

时间:2011-10-31 09:53:39

标签: batch-file for-loop delete-file

@echo on

set src=c:\test
set dst=d:\test

xcopy %src% %dst%

for /F "TOKENS=*" %%G in ('dir/b ^%src%\*.*^') DO set new=%%G

attrib +h "%dst%\%new%"

del "%dst%"
attrib -h "%dst%\%new%"

pause

来源: 文件1 file2的

目的地: file3的

我遇到的唯一问题是我不知道为什么只在for循环中读取file2,这会将属性h添加到文件中。我希望Source文件夹下的所有文件都添加了指定的属性。

我该如何解决?

2 个答案:

答案 0 :(得分:2)

你得到你输入的内容:-)
您只需删除@echo off即可调试批处理文件。

你的循环处理所有文件,并设置new变量,但attrib +h和其余部分在循环后执行,而不是在内部。

我假设您要先隐藏src文件夹中存在的所有文件,然后删除其余文件,然后取消隐藏所有文件。
但是这个块无法工作,因为它隐藏了一个文件删除了所有其他文件,然后再次取消隐藏文件。

attrib +h "%dst%\%new%"
del "%dst%"
attrib -h "%dst%\%new%"

你可以试试这个,它会隐藏所有必要的文件,然后删除其他文件,并取消隐藏所有文件。

@echo on

set src=c:\test
set dst=d:\test

xcopy %src% %dst%
setlocal EnableDelayedExpansion
for /F "TOKENS=*" %%G in ('dir/b ^%src%\*.*^') DO (
  set "new=%%G"

  attrib +h "%dst%\!new!"
)
del "%dst%"
attrib -h "%dst%\*.*"

pause

答案 1 :(得分:0)

没有

%字符无法使用此^必须使用%

如果要输出字符%

您必须写为%%