web-dev-qa-db-ja.com

名前に基づいてファイルをフォルダに移動するにはどうすればよいですか?

特定のフォルダ「ABC」にいくつかの.pdfファイルと.texファイルがあります。

それらはすべてスキームによって名前が付けられています

C01S02_Word.pdf
C03S02SS01_Description_random_words.pdf
C04S01SS02_More_words.pdf
and so forth

[〜#〜] c [〜#〜]このスキームでは、章を表します[〜#〜]セクションの場合はs [〜#〜]、サブセクションの場合は[〜#〜] ss [〜#〜]。したがって、フォルダABCには、各章のフォルダもあり、単にC01C02など。各チャプターフォルダーには、Picturesという名前のフォルダーが1つあります。

誰かがバッチスクリプトを書いて、すべての.texファイルと.pdfファイルをそれぞれのPictures-フォルダーに移動できるようにしてください。C04S01SS02_More_words.pdfは次のようになります。 C04/Picturesに移動し、C01S02_Word.pdfC01/Picturesに移動しましたか?

注: もちろん私はすでにこれをグーグルで検索しました しかし、これまでのところ、多くのビットすべてを機能するスクリプトに変換することはできませんでした。 T&Eランはもうやりたくない。 :/

2
henry

このバッチファイルを作成します。

_@echo off
for %%F in (*.pdf *.tex) do call :subr "%%F"
exit /b

:subr
set filename=%1
move %1 %filename:~1,3%\Pictures
exit /b
_

ノート:

  • for %%F in (*.pdf *.tex) do …は、_*.pdf_または_*.tex_に一致するファイル名ごとに、_%%F_をファイル名に設定して、次のステートメントを1回実行します。
  • _call :subr "%%F"_は、スクリプトの下3行を呼び出し、最初の引数(_%1_)を_"%%F"_(ファイル名、引用符で囲まれた)に設定します。
  • _exit /b_は、コマンドプロンプトウィンドウを吹き飛ばさずにスクリプトを終了します。
  • _set filename=%1_は、ファイル名引数をfilename変数にコピーします。
  • moveはファイルを移動します。
  • _%variable:~start,len%_は、指定された_%variable%_の部分文字列(最初の文字は#0)を取るため、_%filename:~1,3%_は_%filename%_の最初の3文字です。 (カウントは0から始まります。1を使用して_"_をスキップします。)
  • _exit /b_はサブルーチンから戻ります。