2014-10-04 53 views
0

我很确定FOR命令将处理这个放置我似乎无法得到正确的语法(总是吸入编程)。通过子目录,并创建一个文件的副本,如果它存在

我想通过所有的子目录指定的父目录下,如果dog.txt文件在该子目录存在,使得它的一个副本叫cat.txt

这是我得到的最接近,但它的父目录把cat.txt:

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

你真的在运行DOS而不是Windows?你是八十年代的时间旅行者吗? – Barmar 2014-10-04 00:51:08

+0

@Barmar自动化是未来的事情不是从过去 – 2014-10-04 01:06:11

+0

我很乐于接受创意! – MikeDC 2014-10-04 01:48:07

回答

1

你很近,你只需要使用路径从找到的文件也。还应该防止路径/文件中有空格。在文件名中没有通配符的情况下,您可能会发现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 
+0

除非搜索条件包含某种通配符,否则这将无法正常工作 - 这是“for”命令的这种形式的限制。 – foxidrive 2014-10-07 10:12:38

+0

@foxidrive,我已经评论过通配符。但是,如果需要的是特定的文件名,那么通配符将不起作用(可能会选择额外的文件),并且检查每个目录中具有“if exists”的文件是更好的解决方案。 – 2014-10-07 13:07:07

+0

是的,'if exists'会过滤正确的文件。我的错。 – foxidrive 2014-10-07 21:25:46

相关问题