我试图通过我的音乐目录递归并将每个名为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"
我试图通过我的音乐目录递归并将每个名为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"
试试这个:
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 指示变量扩展仅输出路径而不是完整的文件名 + 路径。请注意,这包括尾随 \
我希望这有帮助!
您的音乐文件夹中可能没有任何名为 folder.jpg 的文件,所以它失败了,对吧?
我在 mymusic 文件夹中使用名为 folder.jpg 的虚拟文件进行了尝试,它正常复制了它。;)
编辑:
Kishi 是对的,您在第二个 %i 上缺少双引号
您在复制命令中缺少双引号。
%i 变量将保存文件的完整路径——其中可能包含空格。尝试使用:
for /r %i in (folder.jpg) do copy "%i" cover.jpg
PowerShell 必须替换 CMD。这是不可避免的,也是正义的。我的工作就是帮助它……
gci -r . folder.jpg | % { copy $_.FullName ([IO.Path]::Combine( $_.Directory.FullName, "cover.jpg" )) }
您可以将 xcopy 与 /s 标志一起使用...
编辑:我的错 - 没有正确阅读问题。仅将文件复制到固定目标时,带有 /s 的 Xcopy 将有所帮助。