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"

where<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)执行循环命令的文件。
  • 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 回答