Batch file 批处理for循环:为什么只处理最后一个文件?
资料来源: 文件1 文件2 目的地: 文件3 我唯一的问题是,我不知道为什么在for循环中只读取file2,该循环将属性h添加到文件中。我希望源文件夹下的所有文件都添加到指定的属性中 我怎样才能解决这个问题呢?您可以得到您键入的内容:-)Batch file 批处理for循环:为什么只处理最后一个文件?,batch-file,for-loop,delete-file,Batch File,For Loop,Delete File,资料来源: 文件1 文件2 目的地: 文件3 我唯一的问题是,我不知道为什么在for循环中只读取file2,该循环将属性h添加到文件中。我希望源文件夹下的所有文件都添加到指定的属性中 我怎样才能解决这个问题呢?您可以得到您键入的内容:-) 只需删除@echo off,即可调试批处理文件 您的循环处理所有文件,并设置new变量,但attrib+h和其余的在循环之后执行,而不是在循环内部执行 我假设您首先要隐藏src文件夹中存在的所有文件,然后删除其余文件,然后取消隐藏所有文件。 但是这个块无法工作
只需删除
@echo off
,即可调试批处理文件
您的循环处理所有文件,并设置new
变量,但attrib+h
和其余的在循环之后执行,而不是在循环内部执行
我假设您首先要隐藏src文件夹中存在的所有文件,然后删除其余文件,然后取消隐藏所有文件。但是这个块无法工作,因为它隐藏一个文件,删除所有其他文件,然后再次取消隐藏该文件
@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
您可以尝试这样做,它会隐藏所有必要的文件,然后删除其他文件,并取消隐藏所有文件
attrib +h "%dst%\%new%"
del "%dst%"
attrib -h "%dst%\%new%"
没有
%
字符不能使用此^
必须使用%
如果要输出字符%
您必须以
%%
>的形式编写。您得到的是您键入的内容«很好–在大多数情况下,当人们忙于编程时也是如此:-)仍然存在一些错误:在FOR
循环中设置变量new
时,必须删除引号,并且需要延迟扩展。添加SETLOCAL enabledelayedexpansion
;然后将循环中的指令更改为SET NEW=%%G
和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