Windows batch/cmd 文件以提取网络驱动器(分隔符之间的字符串)?

Windows batch/cmd file to extract network drives (strings between delimiters)?

我已将网络驱动器备份到以下格式的 xml 文件。

<drive>
    <drive letter>X</drive letter>
    <drive path>\DANIEL-HP\Users\Public\Documents\Downloaded Data Sheets</drive path>
</drive>

<drive>
    <drive letter>Y</drive letter>
    <drive path>\DANIEL-HP\Users\Public</drive path>
</drive>

我想 运行 一个批处理或 cmd 文件从分隔符之间提取驱动器号和路径,然后映射它们。

为了简单起见,让我们忽略是否映射了其他驱动器。

盘符的分隔符是 <drive letter></drive letter> 。 驱动器路径的分隔符是 <drive path></drive path>

我不确定如何解析 / <> 符号。

一个简单的 for 循环就很简单了:

for /f "tokens=3 delims=<>" %%a in ('find "<drive letter>" test.xml') do echo %%a

无需转义 ><,因为它们在引号内是安全的。

编辑
为字母和路径建立两个 "arrays" (1),然后加入它们以获得所需的结果:

@ECHO off
setlocal enabledelayedexpansion
REM get drives:
set c=0
for /f "tokens=3 delims=<>" %%a in ('find "<drive letter>" t.xml') do (
  set /a c+=1
  set drv-!c!=%%a
)
REM set paths:
set c=0
for /f "tokens=3 delims=<>" %%a in ('find "<drive path>" t.xml') do (
  set /a c+=1
  set pth-!c!=%%a
)

for /l %%x in (1,1,%c%) do echo !drv-%%x! !pth-%%x!

(1) 引用是因为

上的评论

简单使用 JREPL.BAT - a regular expression find/replace utility。它是纯脚本(混合 batch/JScript),可以在任何 Windows XP 以后的机器上本地运行,不需要任何第 3 方 exe 文件。

免责声明 - 理想情况下,您应该使用 xml 解析器来读取文件。但是假设文件始终具有您显示的 xml 布局,那么以下内容应该可以从命令行运行。

jrepl "<(drive letter)>(.*?)</>\s*<(drive path)>(.*?)</>" "+': = '+" /m /jmatch /f test.xml

如果我把你的样本 xml 放在 "test.xml"

中,这是输出
X: = \DANIEL-HP\Users\Public\Documents\Downloaded Data Sheets
Y: = \DANIEL-HP\Users\Public

我假设您希望这些值作为批处理脚本中的变量。您可以使用 FOR /F 循环来处理配对值:

@echo off
for /f "delims=| tokens=1*" %%A in (
  'jrepl "<(drive letter)>(.*?)</>\s*<(drive path)>(.*?)</>" "+'|'+" /m /jmatch /f test.xml'
) do (
  echo Drive letter = %%A
  echo Drive path = %%B
  echo(
)

输出:

Drive letter = X
Drive path = \DANIEL-HP\Users\Public\Documents\Downloaded Data Sheets

Drive letter = Y
Drive path = \DANIEL-HP\Users\Public