1

ファイル名に基づいて、単一のフォルダーから複数のフォルダーにファイルをコピーするには、バッチ ファイルが必要です。ファイルの形式は aBBcccccc.txt で、a と ccccc は関係ありませんが、BB は 2 文字のコードです。たとえば、ファイル aQWertyu.txt aWErtyui.txt をそれぞれ QW および WE フォルダーにコピーする必要があり、これらのフォルダーはスクリプトによって作成されます。

FOR /f を使用したサンプル スクリプトを見たことがありますが、ファイルを解析し、文字 2 と 3 を調べ、フォルダーを作成し、ファイルをコピーする方法がわかりません。

ありがとう。

4

1 に答える 1

5

これには複数の部分が必要です。

  1. 拡張の遅延。これは、以下のループ内からサブストリングを取得するために必要です。

    setlocal enableextensions enabledelayedexpansion
    
  2. forファイルを反復処理するためのループ

    for %%x in (*.txt) do (
    
  3. 関連する部分文字列を見つけます。

        set "filename=%%x"
        set "folder=!filename:~1,2!"
    

    ここの使用に注意して!filename!ください。これは遅延拡張を使用しています。通常、環境変数はで参照されますが、完全なループを解析%filename%するときにそれらは拡張され、その後何も減少しません。遅延拡張、を使用してこれを解決します。%filename%!

  4. フォルダを作成します。

        if not exist !folder! mkdir !folder!
    

    これは、フォルダがまだ存在しない場合にのみ作成されます。

  5. ファイルをコピーします。

        copy "%%x" !folder!
    )
    

すべてを一緒に入れて:

@echo off
setlocal enableextensions enabledelayedexpansion
for %%x in (*.txt) do (
  set "filename=%%x"
  set "folder=!filename:~1,2!"
  if not exist !folder! mkdir !folder!
  copy "%%x" !folder!
)
于 2012-07-16T08:09:23.000 に答える