我正在尝试创建一个批处理脚本来生成一个xml文件。我正在努力的部分是在包含文本“@isTest”的目录中列出文件的名称(没有扩展名),并在名称前添加某些字符。例如,在包含文件的目录中
a.cls
b.cls
我想获得像这样的xml文件
<runTest>a</runTest>
<runTest>b</runTest>
我已设法列出文件,但我不知道如何取名,删除扩展名并添加额外的字符。
findstr / s / i / m“@isTest”* .cls&gt;&gt; file.xml
非常感谢任何帮助
答案 0 :(得分:1)
使用FOR / F迭代任何命令的结果 - 每次迭代一行。从命令提示符处键入HELP FOR
或FOR /?
以获取更多信息。
您正在使用递归FINDSTR /S
选项,因此您的输出也可能包含路径信息。
如果您真的只想要名称,没有路径或扩展名,那么以下内容将起作用:
for /f "eol=: delims=" %%F in (
'findstr /s /i /m "@isTest" *.cls'
) do (echo ^<runTest^>%%~nF^</runTest^>) >>output.xml
~n
修饰符仅保留值的名称,丢弃路径和扩展名信息。请注意我是如何转义特殊字符<
和>
的,因此不会将它们视为重定向运算符。
如果您想保留路径和名称,并且只删除扩展名,那么只需使用~dpn
:
for /f "eol=: delims=" %%F in (
'findstr /s /i /m "@isTest" *.cls'
) do (echo ^<runTest^>%%~dpnF^</runTest^>) >>output.xml
以上将把FINDSTR提供的相对路径扩展到完整路径。
如果只想保留相对路径,则需要执行子字符串操作,而不是使用FOR变量修饰符。我在循环内打开和关闭延迟扩展,以保留可能出现在文件名中的任何!
。
for /f "eol=: delims=" %%F in (
'findstr /s /i /m "@isTest" *.cls'
) do (
set "file=%%F"
setlocal enableDelayedExpansion
(echo ^<runTest^>!file:~0,-4!^</runTest^>)
endlocal
) >>output.xml
答案 1 :(得分:0)
set noext=%file:~0,-4%
echo %noext% >> output.xml