1

我正在尝试创建一个批处理脚本来生成一个 xml 文件。我正在努力的部分是列出目录中包含文本“@isTest”的文件(不带扩展名)的名称,并在名称前添加某些字符。因此,例如在带有文件的目录中

a.cls
b.cls

我想获得这样的xml文件

<runTest>a</runTest>
<runTest>b</runTest>

我已经设法列出了文件,但我不知道如何取名称、删除扩展名并添加额外的字符。

findstr /s /i /m "@isTest" *.cls >> file.xml

任何帮助将不胜感激

4

2 回答 2

1

使用 FOR /F 迭代任何命令的结果 - 每次迭代一行。键入HELP FORFOR /?从命令提示符获取更多信息。

您正在使用递归 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
于 2013-01-24T01:30:53.697 回答
0
set noext=%file:~0,-4%
echo %noext% >> output.xml
于 2013-01-24T00:29:12.087 回答