3

我试图通过我的音乐目录递归并将每个名为folder.jpg的文件复制到同一目录中名为cover.jpg的文件中。

我在这个问题中尝试了各种不同的建议,例如:

for /r %i in (folder.jpg) do copy %i cover.jpg

导致“系统找不到指定的文件”。

我怎么解决这个问题?

编辑

这是我最终的结果:

for /r %i in (folder.jpg) do copy "%i" "%~picover.jpg"
4

5 回答 5

5

试试这个:

for /f "usebackq delims==" %I in (`dir /b /s ^| findstr folder.jpg`) do copy "%I" "%~pIcover.jpg"

解码环:

usebackq :: 运行反引号中的命令并将输出用作循环的输入
delims== :: 使用等号作为分隔符。真的,您可以使用文件名中无效的任何字符
dir /b /s :: 做一个递归目录列表只输出裸文件名
^| :: ^ 转义管道字符,管道 - 将第一个命令的输出通过管道传输到第二个
findstr :: 在输入中搜索匹配的行,并且只输出它们
%~pI :: 波浪号 p 指示变量扩展仅输出路径而不是完整的文件名 + 路径。请注意,这包括尾随 \

我希望这有帮助!

于 2009-05-23T02:32:03.980 回答
1

您的音乐文件夹中可能没有任何名为 folder.jpg 的文件,所以它失败了,对吧?

我在 mymusic 文件夹中使用名为 folder.jpg 的虚拟文件进行了尝试,它正常复制了它。;)

编辑:

Kishi 是对的,您在第二个 %i 上缺少双引号

于 2009-05-23T01:02:43.910 回答
1

您在复制命令中缺少双引号。

%i 变量将保存文件的完整路径——其中可能包含空格。尝试使用:

for /r %i in (folder.jpg) do copy "%i" cover.jpg
于 2009-05-23T01:07:51.653 回答
1

PowerShell 必须替换 CMD。这是不可避免的,也是正义的。我的工作就是帮助它……

gci -r . folder.jpg | % { copy $_.FullName ([IO.Path]::Combine( $_.Directory.FullName, "cover.jpg" )) }
于 2009-05-23T03:35:34.633 回答
0

您可以将 xcopy 与 /s 标志一起使用...

编辑:我的错 - 没有正确阅读问题。仅将文件复制到固定目标时,带有 /s 的 Xcopy 将有所帮助。

于 2009-05-23T02:01:35.350 回答