web-dev-qa-db-ja.com

ファイル名の最初のWordに基づいてファイルをサブフォルダーに移動するWindowsバッチファイル?

私は少しバッチファイルの初心者なので、あなたの助けに本当に感謝します。 1つのディレクトリに大量のファイルが保存されており、ファイル名の最初の単語に基づいてサブフォルダに分類したいと考えています。だから、私はこれらのようなファイルを持っています:

C:\Folder\Wedding2018 img20929.jpg 
C:\Folder\Wedding2018 entrance.mov
C:\Folder\Wedding2018 registry of guests.pdf

C:\Folder\HorseRiding2017 spirit1.jpg
C:\Folder\HorseRiding2017 guests.txt 
C:\Folder\HorseRiding2017 certificate.pdf
C:\Folder\HorseRiding2017 jumping.mov

そして、すべてのファイルを最初のWordに基づいてサブフォルダーに移動し、次のようにします。

C:\Folder\Wedding2018\img20929.jpg
C:\Folder\Wedding2018\entrance.mov
C:\Folder\Wedding2018\registry of guests.pdf

C:\Folder\HorseRiding2017\spirit1.jpg
C:\Folder\HorseRiding2017\guests.txt
C:\Folder\HorseRiding2017\certificate.pdf
C:\Folder\HorseRiding2017\jumping.mov

ほぼ必要なことを実行するスクリプトをいくつか見つけましたが、それを家に持ち帰るためのチョップがありません。

"ファイル名に基づいてフォルダを作成し、ファイルを自動移動するためのスクリプトが必要です"

"Windowsバッチを介して文字列の2番目の単語を抽出する方法"

スクリプトを統合して最初のWordを取得し、ファイルの移動先のディレクトリを作成する方法がわかりません。

これを一線を越えて理解するのを手伝ってくれませんか?

2
juzzle
  • Forを使用して、少なくとも1つのスペースを含むパターンでフォルダーコンテンツ%%Aを反復します。
  • 名前for /fを2つの部分に分割するには別の%%Aが必要です。1つは最初のスペースtokens=1 = %%Bの前で、残りはtokens * = %%Cです。 。
  • %%Bという名前のフォルダが存在しない場合は作成してください
  • 元のファイル%%A%%Bという名前のサブフォルダー%%Cに移動します

:: Q:\2018\06\11\SU_1330475.cmd
@Echo off
PushD C:\folder
for %%A in ("* *.*") do for /f "tokens=1*" %%B in ("%%A") do (
     If not exist "%%B" MD "%%B"
     Move "%%A" "%%B\%%C"
)
PopD

> tree /f
C:.
│   SU_1330475.cmd
│
└───folder
    ├───HorseRiding2017
    │       certificate.pdf
    │       guests.txt
    │       jumping.mov
    │       spirit1.jpg
    │
    └───Wedding2018
            entrance.mov
            img20929.jpg
            registry of guests.pdf
3
LotPings