2013-03-11 49 views
0

问题:FOR命令的输出将%〜dpI展开为一个具有额外\的结尾的路径,该路径不适合作为REPLACE命令的目标路径。FOR命令将%〜dpI扩展为带有额外“”的路径,不适合替换命令的目标路径

问题:如何摆脱额外的\?

我想做什么:如果文件较新,则将文件1.txt复制到C:\ aaa下的每个子目录。

目录结构:

c:\aaa 
c:\aaa\1 
c:\aaa\2 
... 

使用:

FOR /R C:\aaa %I IN (1.txt) DO REPLACE c:\aaa\1.txt %~dpI /U /R 

样本输出:

c:\aaa>REPLACE c:\aaa\1.txt c:\aaa\1\ /U /R 
Path not found - C:\aaa\1\ 
no files replaced 

c:\aaa>REPLACE c:\aaa\1.txt c:\aaa\2\ /U /R 
Path not found - C:\aaa\2\ 
no files replaced 

回答

2
REPLACE c:\aaa\1.txt c:\aaa /U /R /S 

为什么用FOR/R烦恼呢?

+0

非常感谢,我在想什么:) – user2155235 2013-03-11 15:28:49

1

选项1

使用%~dpI..\%~nI

这将扩展为:

c:\aaa\1\..\1 

选项2

环境变量设置为路径,然后抓住所有,但最后一个字符:

SET targetpath=C:\aaa\1\ 
ECHO %targetpath:~,-1% 

输出:

C:\aaa\1 
0

这不是很好,但DOS批次永远不会。您可以用/F开关在那里抛出另一个FOR来处理名称。这是我跑的:

FOR /R . %I IN (foo) DO @FOR /F "delims=" %N IN ("%~dpI.") DO @echo %~fN 

从当前目录输出每个目录名称。 "delims="将包含空格作为有效字符。该%~dpI.是一个kludge使用该目录作为完整路径,然后%~fN给出了完整的目录名称。

您可以使用DIR命令获得类似的结果。尝试:

DIR /AD /S /B 

所以实际上:

FOR /F "delims=" %I IN ('dir /AD /S /B') do @echo %~fI 

例外的是,上述不包括的基本目录。

+0

你很努力,但看起来不必要的长。 – 2013-03-11 05:31:54

1

只添加一个指向您的命令:

FOR /R C:\aaa %I IN (1.txt) DO REPLACE c:\aaa\1.txt %~dpI. /U /R