2013-10-14 92 views
4

我一直在想方设法使用xslt批量转换目录中的文件。我尝试了xml扳手和其他一些软件,但是我需要将所有这些放在脚本或批处理中,以便我可以根据需要运行。批量转换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" 

当我尝试下面把这个批处理文件,我不明白这是怎么回事的事情 - 不能确定脚本是否运行或出现任何错误。试图将ECHO置于中间,但也没有帮助。我尝试使用> 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 

初始答案/文章后,我加入了更多的逻辑从另一个调用脚本从输入迪尔斯的所有子目录处理文件。想到这里共享该脚本:

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" 
+1

对于一个你应该使用'pushd'和'popd',而不是'cd' – Monacraft

+0

是的的确是一..意识到迟到。 –

回答

4

另存为batchxform.cmd

Asumes 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 
+0

非常感谢MC ND ..如果你不介意,你能帮助理解你的解决方案是什么工作,以及我做错了什么?是否涉及路径名..我会尽量找出答案。 –

+1

你的批处理文件并不是真的错,我的文件更简单,并且(在需要的地方使用引号)为文件/目录名称中的空格做好准备。您的代码尝试缓存初始目录,处理每个子目录,可能尝试处理它不应该处理的内容。 –

+0

谢谢MC ND,但我必须缓解。将现在的工作.. –