0

我已将网络驱动器备份到以下格式的 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>

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

4

2 回答 2

2

这很简单,只需一个简单的for循环:

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

无需逃避>and <,因为它们在引号内是安全的。

编辑
为字母和路径 建立两个“数组” (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)由于对此答案的评论而被引用

于 2016-07-30T06:03:04.517 回答
1

使用JREPL.BAT 很简单 - 一个正则表达式查找/替换实用程序。它是纯脚本(混合批处理/JScript),可以在从 XP 开始的任何 Windows 机器上本地运行,无需任何 3rd 方 exe 文件。

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

jrepl "<(drive letter)>(.*?)</\1>\s*<(drive path)>(.*?)</\3>" "$2+': = '+$4" /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)>(.*?)</\1>\s*<(drive path)>(.*?)</\3>" "$2+'|'+$4" /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
于 2016-07-30T13:33:04.740 回答