0

バッチファイルを作成しようとしています。

ソースフォルダーと宛先フォルダーを指定できるようにする必要があります。ソース フォルダーが解析され、ファイル名の一部に応じて、ファイルが宛先フォルダーに移動されます。解析対象のソース フォルダーには複数のファイルがあります。

file-1-tmp.txt, file-2-tmp.txt, file-3-tmp.txt etc. ファイルは、トークンと delims を使用して FOR /F コマンドを使用して見たようなものになります - - しかし、フォルダー内のすべてのファイルに頼ることはできません

ファイルに -1- がある場合、ファイルに -2- がある場合、別の宛先に移動されます。

ps: 髪の毛が抜ける前に助けてください

4

2 に答える 2

2

ファイルの種類ごとに 1 つずつ、複数のコマンドを実行できますか?:

for %%i in (*-1-*.*) do move "%%i" dir1\.
for %%i in (*-2-*.*) do move "%%i" dir2\.
for %%i in (*-3-*.*) do move "%%i" dir3\.
...etc...

アップデート

@Andriy M の提案に基づいて、より簡単なアプローチは次のようになります。

for %%n in (1 2 3 <...etc...>) do move *-%%n-*.* dir%%n\.
于 2013-01-16T00:06:36.497 に答える
1

この問題にはさまざまなアプローチが考えられます。

たとえば、@Loadmaster の answer のように、同じ宛先に移動する必要があるファイルのセットごとに個別のコマンドを使用できます。

かなり異なるアプローチは、すべてのファイルを繰り返し処理し、それぞれの宛先を決定することです。このアプローチの実装は次のようになります。

@ECHO OFF
FOR %%I IN ("D:\path\to\source\file-*-tmp.txt") DO (
  FOR /F "tokens=2 delims=-" %%C IN ("%%C") DO (
    IF %%C == 1 (
      MOVE %%I D:\path\to\destination\1
    ) ELSE IF %%C == 2 (
      MOVE %%I D:\path\to\destination\2
    ) ELSE IF ...
    ...
  )
)

つまり、単純なFORループを使用して、特定のフォルダーに格納され、特定のマスクに一致するファイルを反復処理します。ループ本体では、もうFOR /F1 つのループを使用して名前を分割し、宛先を決定する部分に到達します。その部分を取得したら、一連のネストされたIFコマンドを使用して、可能なすべての値と個別に比較し、一致するたびに、MOVEそれに応じてファイルを配置するコマンドを指定します。

上記のスクリプトを変更して、宛先パスをより便利に指定できるようにすることもできます。特に、スクリプトの開始時に、すべての可能な宛先パスを含む一連の変数を準備できます。内側のループの本体では、複数IFの の代わりに、抽出された部分に対応する「宛先変数」が存在するかどうかを判断する 1 つだけを使用します。その場合は、その変数に格納されているパスを使用してファイルを移動します。このバリエーションを実装する方法は次のとおりです。

@ECHO OFF
SETLOCAL
SET "dest1=D:\path\to\destination\1"
SET "dest2=D:\path\to\destination\2"
...
FOR %%I IN ("D:\path\to\source\file-*-tmp.txt") DO (
  FOR /F "tokens=2 delims=-" %%C IN ("%%C") DO (
    SETLOCAL EnableDelayedExpansion
    IF DEFINED dest%%C MOVE %%I !dest%%C!
    ENDLOCAL
  )
)
于 2013-01-18T16:01:16.173 に答える