将正在读取的当前文件的名称设置为变量

Setting name of current file being read as variable

在批处理文件中使用 for 循环,从充满 xml 文件的文件夹中,我试图解析 xml 标记以及正在读取的当前文件的文件名。

我搜索了一下,这个问题好像和我的一样,但是linux。我正在使用 windows

根据论坛上的其他答案,我整理了这个,但没有成功。

for %%a in (*.xml) do (
for /f "delims=<> tokens=3" %%b in ('findstr /i /c:"<description>" *.xml') do (
echo %%~na^|%%b>>output.txt
)
)

是否可以获取 xml 标签并回显读取该标签的文件的文件名? 有点像:

for /f "delims=<> tokens=3" %%b in ('findstr /i /c:"<description>" *.xml') do (
echo %~n0^|%%b>>output.txt
)

除了会回显 bat 文件名,而不是 xml 名称。

所需的最终输出示例(xml 名称|xml 标签)

Atari 2600|Air Raid
Atari 2600|Airlock
Atari 2600|Alien
Nintendo Game Boy|Addams Family
Nintendo Game Boy|Adventure Island
Sega 32X|Blackthorne
Sega 32X|Mortal Kombat II

感谢任何建议,因为我只是在这里自学,我也不介意被引导到正确的方向。

for /f "delims=<> tokens=3" %%b in ('findstr /i /c:"<description>" "%%a"') do (

应该适合你。当前文件名在 %%a 中。您的代码将尝试在所有 .xml 文件中查找字符串。

也许 findstr /m /i /c:<description>" *.xml 可以为您提供一个可行的基础(作为命令 - 而不是作为批处理的替代 findstr 命令)。


评论后补充

SET "varlist=applicationpath missing notes junk"

FOR %%a IN (%filename1%) DO (
FOR %%w IN (%varlist%) DO SET "%%w="&for /f "delims=<> tokens=3" %%b in ('findstr /i /c:"<%%w>" "%%a"') do SET "%%w=%%b"
)
:: Show resulting values from file
FOR %%w IN (%varlist%) DO SET %%w

我假设您正在使用 %%a 来设置 .xml 文件名 - 我只是使用一个固定的文本文件作为测试源。

只需建立一个您希望提取的变量列表,并更改 findstr 在文件中找到的字符串。将变量名设置为定位行中的值。如果找不到,请将设置保留为 nothing(可以使用 if defined variablename 命令轻松测试)