2017-05-12 25 views
0

私はあるレベルの親だけを使って再帰的にファイルの名前を変更しようとしています。/Rのように名前を変更し、より高いレベルのフォルダを取得するには明確な解決策を持っていないために再帰的に探る親ディレクトリに基づいてファイルの名前を変更する

\test\d1\d2\d3\d1.png 
\test\d4\d5\d6\d4.png 
\test\d7\d8\d9\d7.png 

:に変換する必要があります

\test\d1\d2\d3\000.png 
\test\d4\d5\d6\000.png 
\test\d7\d8\d9\000.png 

:私は、内のファイルを持っています。

000.pngは唯一のファイルであり、中間のディレクトリには存在しません。

私が使用しようとしてきた:別のスレッドから

@echo off 
pushd "C:\Users\test" 
for /d %%P in (*) do for /f "delims=" %%F in ('dir /b /s /a-d "%%P"') do rename "%%F" "%%P_%%~nxF" 
popd 

が、トラブルスクリプトが何をするのか理解を持っています。スタックと変化に

+0

トップまたはファイルから数えて、一定のレベルを指定しますか? '000.png'ファイルのみ?これらのファイルは中間フォルダにも存在しますか?これまでのあなたのコードは何ですか? [SO]はスクリプト作成サービスではありません。 – LotPings

+0

000.pngは唯一のファイルで、中間ディレクトリには存在しません。 – Joesh

+1

コメントにコードを入れないで、質問を編集してください。 – LotPings

答えて

0
@echo off 
pushd "C:\Users\test" 
for /d %%P in (*) do for /f "delims=" %%F in ('dir /b /s /a-d "%%P\000.png" 2^>NUL' 
) do echo rename "%%~fF" "%%~nP%%~xF" 
popd 
  • のpushd店現在のフォルダ指定したフォルダへ
  • POPDは、古いフォルダを復元します。
  • for /dは、選択した名前の%%Pを使用して、 "C:\ Users \ test"からすべてのサブフォルダを繰り返します。
  • for/fは、そのフォルダからすべての000.pngファイルを取得した出力を解析します。
  • %%~nP~n修飾子を使用して、フォルダの名前のみを(D1/D4/D7)を取得します(for /?を参照)
関連する問題