我想创建一个批处理文件,循环遍历包含 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
的,并标记文字引号。