0

问题: FOR 命令的输出将 %~dpI 扩展为末尾带有额外 \ 的路径,该路径不适合作为 REPLACE 命令的目标路径。

问题:如何摆脱多余的\?

我想要做什么:如果文件较新,则将文件 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
4

4 回答 4

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

为什么要打扰 FOR/R?

于 2013-03-11T08:27:53.260 回答
1

选项1

使用%~dpI..\%~nI

这将扩展为:

c:\aaa\1\..\1

选项 2

将环境变量设置为路径,然后抓取除最后一个字符之外的所有字符:

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

输出:

C:\aaa\1
于 2013-03-11T03:21:12.833 回答
1

只在您的命令中添加一点:

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

于 2013-03-11T07:49:43.757 回答
0

它不漂亮,但 DOS 批处理从来都不是。您可以使用开关将另一个FOR放入其中/F以处理名称。这是我跑的:

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

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

DIR您可以使用该命令实现类似的目的。尝试:

DIR /AD /S /B

所以事实上:

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

例外是上面不包括基本目录。

于 2013-03-11T03:39:43.057 回答