0

ClearCase を使用しています。バッチ スクリプトを使用して、cleartool コマンドで生成されたテキスト ファイルを実行し、行で指定されたファイルをコピーしますが、指定された文字セットまで部分文字列のみを抽出して名前変更を実行したいと考えています。 .

テキスト ファイルの例は次のとおりです。

"M:\LEVEL1\PROJECT\src\ROOT\file 2.txt@@\main\LEVEL1\5"
"M:\LEVEL1\PROJECT\src\ROOT\file 1.txt@@\main\LEVEL1\3"
"M:\LEVEL1\PROJECT\src\ROOT\folder 1\file 5.txt@@\main\LEVEL1\2"
"M:\LEVEL1\PROJECT\src\ROOT\file 4.txt@@\main\LEVEL1\3"
"M:\LEVEL1\PROJECT\src\ROOT\file 7.txt@@\main\LEVEL1\2"

私がやりたいことは、次のようなコマンドを作成することです (最初の行を使用):

xcopy "M:\LEVEL1\PROJECT\src\ROOT\file 2.txt@@\main\LEVEL1\5" "<output folder>\LEVEL1\PROJECT\src\ROOT\file 2.txt"

ここ<output folder>で、スクリプトの実行時にパラメーターとして指定されるフォルダーです。したがって、基本的に私が求めているのは、コピーコマンドで使用できるように、読み取り時に各行の間M:および@@各行にあるもののみを抽出することです。

私はすでにxcopy "%%~fA" "%OUTPUTDIR:"=%\%%~pnxA"行を出力ディレクトリにコピーしていますが%%~pnxA、ドライブ文字のみを削除し、それ@@以降の行の残りの部分は削除しません。

これは可能ですか?

4

1 に答える 1

2

JJRythmsの回答を説明に分割するだけです。

for /F "tokens=1,2,3 delims=:@" %%A in (in.txt) do xcopy %%A:%%B@@%%C DIR:%%B

このステートメントの目的は、in.txtファイル内の行を解析し、必要な部分を使用することです。

  • for- ループ コマンド。
  • /F- ファイル解析ループ タイプ オプション。
  • tokens=1,2,3- 文字列区切り文字に基づいて取得するサブ文字列。
  • delims=:@- トークンを区切る区切り文字。(デフォルトはスペース)
  • %%A- 開始ループ変数。(トークン 1 = %%A、トークン 2 = %%B、トークン 3 = %%C)
  • in (in.txt)loop コマンドを実行するファイル。
  • do- ファイルの各行に対して実行するコマンド。

例 最初の行を使用します。

"M:\LEVEL1\PROJECT\src\ROOT\file 2.txt@@\main\LEVEL1\5"

次のように解析されます。

%%A = "M
%%B = \LEVEL1\PROJECT\src\ROOT\file 2.txt
%%C = \main\LEVEL1\5"

区切り文字は消費されるため、結果の変数から削除されます。

@ファイル名の他の場所に記号がある場合、この解決策は機能しないことに注意してください。

ヘルプfor /?とオプションについては、コマンド ラインに入力します。

于 2013-01-28T17:38:34.430 に答える