Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
For loop 浏览子目录并复制文件(如果存在)_For Loop_Command_Dos - Fatal编程技术网

For loop 浏览子目录并复制文件(如果存在)

For loop 浏览子目录并复制文件(如果存在),for-loop,command,dos,For Loop,Command,Dos,我很确定FOR命令会处理这个问题,因为我似乎没有正确的语法(编程总是很糟糕) 我想遍历特定父目录下的所有子目录,如果dog.txt文件存在于该子目录中,则制作一个名为cat.txt的副本 这是我得到的最接近的,但它将cat.txt放在父目录中: for /r %f in (dog.txt) do copy %f cat.txt 非常接近,只需使用找到的文件中的路径即可。还应防止路径/文件中有空格。如果文件名中没有通配符,您可能会发现for循环将尝试在每个目录中进行复制,无论是否存在文件,为了避

我很确定FOR命令会处理这个问题,因为我似乎没有正确的语法(编程总是很糟糕)

我想遍历特定父目录下的所有子目录,如果dog.txt文件存在于该子目录中,则制作一个名为cat.txt的副本

这是我得到的最接近的,但它将cat.txt放在父目录中:

for /r %f in (dog.txt) do copy %f cat.txt

非常接近,只需使用找到的文件中的路径即可。还应防止路径/文件中有空格。如果文件名中没有通配符,您可能会发现for循环将尝试在每个目录中进行复制,无论是否存在文件,为了避免这种情况,请添加通配符或使用(如果存在)

for /r %f in (dog.txt) do if exist "%f" copy "%f" "%~dpfcat.txt" /y
还有一个警告,如果你把它放在bat文件中,你需要避开%符号

for /r %%f in (dog.txt) do if exist "%%f" copy "%%f" "%%~dpfcat.txt" /y

你真的在运行DOS而不是Windows吗?您是80年代的时间旅行者吗?@Barmar automation是面向未来的,而不是过去的。除非搜索词中包含某种通配符,否则将无法正常工作-这是
for
命令这种形式的限制。@foxidrive,我已经对通配符发表了评论。但是,如果需要特定的文件名,则通配符将不起作用(可能会拾取额外的文件),使用
if exist
检查每个目录中的文件是更好的解决方案。是的,
if exist
将过滤正确的文件。我的错误。