0

これがこれらの質問をする場所でもない場合は、私を許してください。私はバッチとスクリプトに不慣れであり、これらの種類の投稿には少し新しいです...

ファイルとフォルダーを受け取るフォルダーがあります。ディレクトリを調べて、各サブフォルダー内のすべてのファイルの名前を数値で変更し、可能であればそれらを移動するスクリプトを実行したいと思います。

たとえば、私は次のようなものを持っています

Recieved_File_Folder
     |_folder1
     | |_file1.txt
     | |_file2.bmp
     |_folder2
     | |_file4.exe
     | |_file5.bmp
     |__file9.txt
     |__file10.jpg

すべてのディレクトリを調べて、このような場所に移動できるようにしたいのですが、ファイルの名前はランダムであり、拡張子もそのままにしておきたいと思います。

Renamed_Folder
    |_folder1
    | |_1.txt
    | |_2.bmp
    |_folder2
    | |_1.exe
    | |_2.bmp
    |__1.txt
    |__2.jpg

私はこれに多くの時間を費やしました、そしてそれであまりうまくいっていません、どんな助けでも非常に大いに感謝されるでしょう!! 前もって感謝します!

4

1 に答える 1

1

この小さなスクリプトでうまくいくはずです。

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "tokens=1 delims=" %%A IN ('DIR /B /S /A:D') DO (

   SET /A FILE_COUNTER=1

   FOR /F "tokens=1 delims=" %%B IN ('DIR /B /A:-D "%%A"') DO (
      CALL :RENAME "%%A%%B" !FILE_COUNTER!
      SET /A FILE_COUNTER=FILE_COUNTER+1
   )   
)   

ENDLOCAL    
GOTO :EOF    

:RENAME

SET OLD_PATH="%~f1"
SET NEW_FILE_NAME="%2%~x1"
REN %OLD_NAME% %NEW_NAME%    
GOTO :EOF

スクリプトは確認を求めないので注意して使用してください。どこから開始するか注意してください。

どのように機能しますか:

  • 最初のFOR-loopは、現在のディレクトリ(を使用DIR /B /S /A:D)から始めて、すべてのサブディレクトリを再帰的にリストし、変数を介してループ本体にフルパスを渡します。%%A
  • 最初のループ本体では、変数FILE_COUNTERは次の値に設定されます。1
  • 2番目の(内側の)FOR-loopは、(を使用してDIR /B /A:-D "%%A")外側のループによって渡されたディレクトリ内のすべてのファイルを一覧表示し、変数を介してファイルのフルパスを本体に渡します。%%B
  • 内側のループ本体では、サブルーチン:RENAMEが呼び出され、完全なファイル名が現在のFILE_COUNTER値をパラメーターとして使用します。
  • :RENAMEサブルーチンはそのパラメーターを使用して新しいファイル名を形成し、名前変更コマンドを発行しますREN
  • サブルーチンが戻った後、現在のFILE_COUNTER値は1つ増加します(SET /A FILE_COUNTER=FILE_COUNTER+1
于 2010-05-31T11:40:08.023 に答える