我正试图通过我的音乐目录递归并将名为folder.jpg的每个文件复制到名为cover.jpg的同一目录中的文件中。
我在this question中尝试了各种建议,例如:
for /r %i in (folder.jpg) do copy %i cover.jpg
导致“系统无法找到指定的文件。”
我该如何解决这个问题?
修改
这就是我最终的目标:
for /r %i in (folder.jpg) do copy "%i" "%~picover.jpg"
答案 0 :(得分:5)
试试这个:
for /f "usebackq delims==" %I in (`dir /b /s ^| findstr folder.jpg`) do copy "%I" "%~pIcover.jpg"
解码器响铃:
usebackq :: run the command in the backquotes and use the output as the input for the loop delims== :: use the equal sign as a delimeter. Really you could use any character that isn't valid in a file name dir /b /s :: do a recursive directory listing only outputting the bare file names ^| :: ^ escapes the pipe character, the pipe - well pipes the output from the first command to the second findstr :: searches the input for matching lines, and only outputs them %~pI :: the tilde p instructs the variable expansion to only output the path rather than full file name + path. Note, this includes a trailing \
我希望这有帮助!
答案 1 :(得分:1)
你的音乐文件夹中可能没有任何名为folder.jpg的文件,所以它失败了吗?
我在mymusic文件夹中尝试了一个名为folder.jpg的虚拟文件并正常复制它。 ;)
编辑:
Kishi是对的,你错过了第二个%i上的双引号
答案 2 :(得分:1)
您在复制命令中缺少双引号。
%i变量将保存文件的完整路径 - 可能包含空格。 尝试使用:
for /r %i in (folder.jpg) do copy "%i" cover.jpg
答案 3 :(得分:1)
PowerShell必须替换CMD。这是不可避免的,也是正义的。我的工作是帮助它......
gci -r . folder.jpg | % { copy $_.FullName ([IO.Path]::Combine( $_.Directory.FullName, "cover.jpg" )) }
答案 4 :(得分:0)
您可以将xcopy与/ s标志一起使用...
编辑: 我的坏 - 没有正确地阅读这个问题。只需将文件复制到固定目的地时,带/ s的Xcopy将有所帮助。