可以使用批处理文件来读取一行,然后只使用该行的子字符串来执行命令吗?

时间:2013-01-28 14:03:00

标签: batch-file substring xcopy

我正在使用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只会删除驱动器号,而不会从@@开始删除该行的剩余部分。< / p>

这可能吗?

1 个答案:

答案 0 :(得分: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 /?以获取帮助和选项。