列出具有特定字符的文件,并输出文件名和其他字符

时间:2013-01-24 00:14:12

标签: batch-file dos

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

a.cls
b.cls

我想获得像这样的xml文件

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

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

findstr / s / i / m“@isTest”* .cls&gt;&gt; file.xml

非常感谢任何帮助

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

set noext=%file:~0,-4%
echo %noext% >> output.xml