我一直在试图找到一种使用xslt在目录中批量转换文件的方法。我尝试了xml扳手和其他一些软件,但我需要将所有这些放在一个脚本或批处理中,以便根据需要运行。
我已经开始使用raptorxml命令行的批处理文件,如下所示:

C:\Program Files (x86)\Altova\RaptorXMLServer2013\bin>RaptorXML.exe xslt --input=c:\data\test1.xml --output=c:\data\output1.xml c:\data\test.xsl

file:///c:/data/test1.xml: result="OK" xslt-output-files="file:///c:/data/output1.xml"

当我试着把这个放在一个批处理文件中,如下所示,我一点也不明白发生了什么-不知道脚本是否运行或有任何错误。试着把回声放在中间,但也没用。我试图使用>log.log将输出重定向到一个日志,但这只会得到文件中每一行的回音。我看不到外观中变量的值,也看不到对raptorxml的调用是如何形成的。任何提示或指针都会有帮助-谢谢。
这是我的批处理文件:我将其运行为batchxform.bat C:\data\ip
cls
call :treeProcess
goto :eof

:treeProcess
cd %1
for %%f in (*.xml) do (
RaptorXML.exe xslt --input=%%f --output=c:\data\op\%%~nf.xml c:\data\test.xsl
)

for /D %%d in (%1) do (
   cd %%d
   call :treeProcess
   cd ..
)

exit /b

在最初的应答/post之后,我添加了更多的逻辑来调用另一个脚本来处理来自输入目录的所有子目录的文件。想在这里分享剧本:
ECHO OFF
set _xform=C:\Users\gkalra\Documents\work\Annotation\code\batchxform.cmd
rem call _xform %1
FOR /R %1 %%G in (.) DO (
 Pushd %%G
 Echo now in %%G
 rem dir /b "%%G/*.xml"
 call "%_xform%" %%G
 Popd
)
Echo "back home"

最佳答案

另存为batchxform.cmd
asume inputdir\ip作为文件源,inputdir\op作为输出目录,inputdir\test.xls作为xls
调用为batchxform.cmd c:\数据

@echo off
    setlocal enableextensions

    cls

    if "%~1"=="" goto endProcess

    set _inputDir=%~1\ip
    set _outputDir=%~1\op
    set _xsl=%~1\test.xsl
    set _raptor=C:\Program Files (x86)\Altova\RaptorXMLServer2013\bin\RaptorXML.exe

    for %%f in ("%_inputDir%\*.xml") do (
        "%_raptor%" xslt --input="%%f" --output="%_outputDir%\%%~nxf"  "%_xsl%"
    )

:endProcess
    endlocal

07-27 15:33