Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理for循环:为什么只处理最后一个文件?_Batch File_For Loop_Delete File - Fatal编程技术网

Batch file 批处理for循环:为什么只处理最后一个文件?

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文件夹中存在的所有文件,然后删除其余文件,然后取消隐藏所有文件。 但是这个块无法工作

资料来源: 文件1 文件2

目的地: 文件3

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

我怎样才能解决这个问题呢?

您可以得到您键入的内容:-)
只需删除
@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