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 :: ベア ファイル名のみを出力する再帰的なディレクトリ リストを実行します。
^| :: ^ はパイプ文字、パイプをエスケープします - 最初のコマンドからの出力を 2 番目のコマンドにうまくパイプします
findstr :: 一致する行の入力を検索し、それらのみを出力します
%~pI :: チルダ p は、完全なファイル名 + パスではなく、パスのみを出力するように変数展開に指示します。これには末尾の \ が含まれることに注意してください

これが役立つことを願っています!

于 2009-05-23T02:32:03.980 に答える
1

folder.jpg という名前の音楽フォルダーにファイルがない可能性があるため、失敗しますか?

これをmymusicフォルダーでfolder.jpgというダミーファイルで試したところ、正常にコピーされました。;)

編集:

岸さんの言うとおりです。2 番目の %i の二重引用符がありません

于 2009-05-23T01:02:43.910 に答える
1

copy コマンドに二重引用符がありません。

%i 変数はファイルへのフルパスを保持します -- これにはスペースが含まれる場合があります。使用してみてください:

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

PowerShell must replace CMD. It is inevitable and righteous. And it's my job to help it along...

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

/s フラグを指定して xcopy を使用できます...

編集:私の悪い - 質問を正しく読んでいませんでした。/s を指定した Xcopy は、ファイルを固定の宛先にコピーするだけの場合に役立ちます。

于 2009-05-23T02:01:35.350 に答える