0

20132706日付 Ex 、、、、20132306という名前20132205のフォルダーがたくさんあります20133004

これらのフォルダーを対応するフォルダーに移動したいのですが、これを 1000 行書くこともできますが、ワイルドカードを追加したいと考えています。

これは私が現在行っていることです:

Move \\folder1\20132706  \\folder1\june2013
Move \\folder1\20132306  \\folder1\june2013
Move \\folder1\20132205  \\folder1\May2013
Move \\folder1\20133004  \\folder1\April2013

これは私がやりたいことです:

Move \\folder1\??????06 \\folder1\june2013
Move \\folder1\??????05 \\folder1\may2013
Move \\folder1\??????04 \\folder1\april2013

ただし、ワイルドカードの使用に成功していません。

私は何を間違っていますか?

4

1 に答える 1

1
@ECHO OFF
SETLOCAL
SET localroot=u:\folder
FOR /f %%i IN (
  'dir /ad /b "%localroot%" ^|findstr /r "^[0-9]*$"'
 ) DO CALL :movedir %%i

GOTO :EOF

:movedir
:: ensure destination is exactly 8 chars long
SET "dest=%1"
SET dest=%dest:~7%
IF NOT DEFINED dest GOTO :EOF 
SET dest=%dest:~1%
IF DEFINED dest GOTO :EOF

SET "dest=%1"
:: convert month to text
SET "month="
SET "dest="&FOR %%i IN (01 january 02 february 03 march etc etc 12 december) DO IF NOT DEFINED dest (
 IF DEFINED month SET dest=%%i%dest:~0,4%
 IF %dest:~-2%==%%i SET month=Y
)

ECHO MOVE %localroot%\%1 %localroot%\%dest%

GOTO :eof

これで必要な作業が行われます。必要なのは、localroot定義を変更し、指定された形式で月のリストを入力し、チェックを付けた後、 を削除してECHOを有効にすることだけMOVEです。

ディレクトリをループし、純粋な数値 (開始と終了の間の任意の数の数値) のみを除外します。

名前が正確に 8 文字の長さであることを確認し、変換先の名前を変換して再フォーマットすれば完了です。

于 2013-06-27T02:32:08.597 に答える