从批处理文件调用 MSXSL



我想创建一个批处理文件,循环遍历包含 xml 文件的文件夹,然后调用 msxsl 对其进行修改,并在修改 xml 文件后,复制到另一个具有原始文件名的文件夹。

我试过这个:

forfiles /p C:UsersmaeDocumentsTestingMSXSLIn /m *.xml /c "cmd /c C:UsersmaeDocumentsTestingMSXSLmsxsl.exe @file pre-process_add_filename.xsl -o C:UsersmaeDocumentsTestingMSXSLOut@file"

但这给了我这个错误:

Error occurred while creating file 'C:UsersmaeDocumentsTestingMSXSLOut"bk_OIOUBLInvoice_TEST.xml"'.

Code:   0x8007007b
The filename, directory name, or volume label syntax is incorrect.

这是因为输出 filname 两边有双引号。我该如何解决这个问题?

正如其他人在评论中已经建议的那样,您应该为您的任务使用标准的for循环,而不是forfiles

for %%I in ("%UserProfile%DocumentsTestingMSXSLIn*.xml") do (
"%UserProfile%DocumentsTestingMSXSLmsxsl.exe" "%%I" "pre-process_add_filename.xsl" -o "%UserProfile%DocumentsTestingMSXSLOut%%~nxI"
)

但是,如果您坚持forfiles则可以使用以下代码:

forfiles /P "%UserProfile%DocumentsTestingMSXSLIn" /M "*.xml" /C "cmd /C for %%I in (@file) do 0x22%UserProfile%DocumentsTestingMSXSLmsxsl.exe0x22 @file 0x22pre-process_add_filename.xsl0x22 -o 0x22%UserProfile%DocumentsTestingMSXSLOut%%~I0x22"

内部for循环与~修饰符一起用于删除@file返回的文件名周围的附加引号。术语0x22是特定于forfiles的,并标记文字引号。

相关内容

  • 没有找到相关文章

最新更新