使用 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