Batch file 批处理文件以解析XML文件并将文件复制到其他文件夹
我正在编写一个批处理文件(test.bat),当前看起来如下:Batch file 批处理文件以解析XML文件并将文件复制到其他文件夹,batch-file,cmd,Batch File,Cmd,我正在编写一个批处理文件(test.bat),当前看起来如下: SET DIR_WORKING=%cd% SET DIR_RELEASE=%DIR_WORKING%\Release for /F "tokens=1,* delims=]" %%p in ('c:\WINDOWS\System32\find.exe "?define TRIALFILE" %DIR_WORKING%\Include.wxi') do ( set PFILE=%%p
SET DIR_WORKING=%cd%
SET DIR_RELEASE=%DIR_WORKING%\Release
for /F "tokens=1,* delims=]" %%p in ('c:\WINDOWS\System32\find.exe "?define TRIALFILE" %DIR_WORKING%\Include.wxi') do (
set PFILE=%%p
for /F "tokens=*" %%s in ("%PFILE%") do set PFILE=%%s
set PFILE="%PFILE:~23,250%"
set PATCHFILE="%PFILE:~0,-3%"]
COPY "%PATCHFILE" %DIR_RELEASE%
)
我一直试图完成的是解析一个名为Include.wxi的XML文件,获取一些.txt文件路径,然后将这些.txt文件复制到Release文件夹
这就是Include.wxi的外观:
<?xml version="1.0" encoding="utf-8"?>
<Include>
<?define TRIALFILE001="%DIR_WORKING%\Users\K\Documents\Test\v1.txt"?>
<?define TRIALFILE002="%DIR_WORKING%\Users\K\Documents\Test\v2.txt"?>
</Include>
这就是我的文件结构的外观:
<?xml version="1.0" encoding="utf-8"?>
<Include>
<?define TRIALFILE001="%DIR_WORKING%\Users\K\Documents\Test\v1.txt"?>
<?define TRIALFILE002="%DIR_WORKING%\Users\K\Documents\Test\v2.txt"?>
</Include>
我尽量简化这个问题。我已经尝试了所有方法来解决这个问题,但是CMD总是给我最模糊的错误。。我似乎不知道如何让嵌套for循环工作。请帮助@echo打开
@echo on
setlocal
SET "DIR_WORKING=%cd%"
SET "DIR_RELEASE=%DIR_WORKING%\Release"
if not exist "%DIR_RELEASE%" md "%DIR_RELEASE%"
for /F "tokens=1-2 delims=<?>" %%p in ('
""%systemroot%\system32\find.exe" "?define TRIALFILE" "%DIR_WORKING%\Include.wxi""
') do call :copyfrom %%p %%q
exit /b
:copyfrom
if not "%~1" == "define" exit /b 1
copy /y "%~3" "%DIR_RELEASE%"
exit /b 0
setlocal
设置“DIR\u WORKING=%cd%”
设置“DIR\u RELEASE=%DIR\u WORKING%\RELEASE”
如果不存在“%DIR\u RELEASE%”md“%DIR\u RELEASE%”
对于/F“tokens=1-2 delims=“%%p in('
“%systemroot%\system32\find.exe”?定义TRIALFILE”“%DIR\u WORKING%\Include.wxi”
“)do call:copyfrom%%p%%q
退出/b
:copyfrom
如果不是“%~1”==“定义”退出/b 1
复制/y“%~3”“%DIR\u RELEASE%”
退出/b0
由特殊的xml标记字符分隔,这些字符不是
在文件路径中有效。标记1-2
将获得缩进
如果没有,则使用define…=…
或仅使用define…=…
发现凹痕
使用令牌调用标签:copyfrom
,将处理
使用cmdline规则的参数。标记中的缩进将
作为空间被忽略<代码>定义应作为参数1
并在标签上测试以验证。之前的xml标记名
=
字符将是参数2。复制的路径将被删除
位于参数3的=
字符之后
for
循环中的命令有两个以上的双引号
两端都有双引号,因此cmd
将去掉外层
双引号,因此我在外部添加了额外的双引号,
所以他们被剥光了衣服。@echo on
setlocal
设置“DIR\u WORKING=%cd%”
设置“DIR\u RELEASE=%DIR\u WORKING%\RELEASE”
如果不存在“%DIR\u RELEASE%”md“%DIR\u RELEASE%”
对于/F“tokens=1-2 delims=“%%p in('
“%systemroot%\system32\find.exe”?定义TRIALFILE”“%DIR\u WORKING%\Include.wxi”
“)do call:copyfrom%%p%%q
退出/b
:copyfrom
如果不是“%~1”==“定义”退出/b 1
复制/y“%~3”“%DIR\u RELEASE%”
退出/b0
由特殊的xml标记字符分隔,这些字符不是
在文件路径中有效。标记1-2
将获得缩进
如果没有,则使用define…=…
或仅使用define…=…
发现凹痕
使用令牌调用标签:copyfrom
,将处理
使用cmdline规则的参数。标记中的缩进将
作为空间被忽略<代码>定义应作为参数1
并在标签上测试以验证。之前的xml标记名
=
字符将是参数2。复制的路径将被删除
位于参数3的=
字符之后
for
循环中的命令有两个以上的双引号
两端都有双引号,因此cmd
将去掉外层
双引号,因此我在外部添加了额外的双引号,
所以他们被剥光了衣服。@ECHO OFF
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“filename1=%sourcedir%\q50264822.txt”
设置“DIR\u WORKING=u:\destdir”
设置“DIR\u RELEASE=%DIR\u WORKING%\RELEASE”
MD“%dir\u release%”2>nul
对于/f“tokens=3delims=@ECHO OFF
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“filename1=%sourcedir%\q50264822.txt”
设置“DIR\u WORKING=u:\destdir”
设置“DIR\u RELEASE=%DIR\u WORKING%\RELEASE”
MD“%dir\u release%”2>nul
对于/f“tokens=3delims=,这可能就足够了:
@For/F令牌^=2Delims^=^“%%A In('Find”“?define TRIALFILE“include.wxi”)Do@Copy“%%A”Release 2>Nul
也许这就足够了:
@For/F令牌^=2Delims^=^“%%A In('Find”“?define TRIALFILE“include.wxi”)Do@Copy“%%A”Release 2>Nul
谢谢,这正是我需要的。很好的解释!谢谢,这正是我需要的。很好的解释!