0

私の写真コレクションでは、フォルダー内のすべての写真を日付ごとにフォルダーに自動的に分類したいと考えています。幸いなことに、ファイルにはタイムスタンプに基づいて名前が付けられています。

  • 2012-07-15 12.21.06.jpg
  • 2012-07-15 12.21.26.jpg
  • 2012-07-16 17.12.50.jpg

この例では、最初の 2 つのファイルは 2012-07-15 のフォルダーに配置され、3 番目のファイルは 2012-07-16 のフォルダーに配置されます。私は試してみましたが、私が見つけることができるのはこれだけです:

for %%a in (*.jpg) do (
    md "%%~na" 2>nul
    move "%%a" "%%~na"
)

しかし、それはすべてのファイル名のフォルダーを作成します。最初の 10 文字の変数を持つことを考えましたが、変数の宣言と dos での使用に完全に混乱し、イライラします。誰でも助けることができますか?

4

2 に答える 2

4

遅延展開と部分文字列を使用してこれを行う別の可能性を次に示します。

SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.jpg) do (
    set f=%%a
    set g=!f:~0,10!
    md "!g!" 2>nul
    move "%%a" "!g!"
)

!最初の行は、代わりに使用する構文を有効%にし、ブロックの最初の行が実行されるとき (標準のバッチ動作) ではなく、行自体が実行されるときにのみ、変数の値を解釈する効果があります。

!f:~0,10!部分文字列を取得するための構文です。後の日付は常に 10 文字です。

于 2012-07-25T19:02:33.820 に答える
1

コマンドからの出力を使用してdir、スペースでファイル名を分割できるようにします

for /f "tokens=1* delims= " %%a in ('dir /b *.jpg') do (
    md %%a 2>nul
    move "%%a %%b" %%a
)   

for ステートメントを明確にするため
/f、 for を使用すると、コマンドの出力を処理できますdir
は、スペースの前の最初の部分を%%aに配置し、ファイル名の残りの部分を%%btokens=1*に配置することを dos に指示します (トークンに他のオプションを使用すると、その部分が後続の文字に配置されます。最大 26 パーツまで)パーツ間 の区切り文字としてスペースが必要な状態。
delims=

したがって、最初のリストでは2012-07-15 12.21.06.jpg、部分に分割されたときにスペースが取り除かれたため、スペースを元に戻す必要が ある場合は%% a%%bに配置2012-07-15されるため、代わりに使用する必要がありますの12.21.06.jpgmove%%a %%b%%a%%b

于 2012-07-25T18:30:30.773 に答える