我正在使用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>
这可能吗?
答案 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 /?
以获取帮助和选项。