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

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

特定のフォルダ「ABC」に、複数の .pdf ファイルと .tex ファイルがあります。

これらはすべてスキームによって命名されている

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

このスキームでは章を表します。セクションとSSサブセクション用です。フォルダABCには、各章用のフォルダも作成します。C01C02などなど。各章のフォルダには、ピクチャー

誰か、.texと.pdfファイルをそれぞれ別の場所に移動できるバッチスクリプトを書いていただけませんか?ピクチャー-フォルダーは、およびなどC04S01SS02_More_words.pdfに移動されますか?C04/PicturesC01S02_Word.pdfC01/Pictures

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

答え1

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

@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% は の指定された部分文字列(最初の文字は #0)を取ります。したがって の最初の 3 文字も になります。(カウントは 0 から始まります。 をスキップするために 1 を使用しています。)%variable%%filename:~1,3%%filename%"
  • exit /bサブルーチンから戻ります。

関連情報