我有一个包含以下代码的批处理文件:
del /F /S /Q /A "debug.properties"
del /F /S /Q /A "context/security/preauth/projectid-source/header/projectid-source.xml"
del /F /S /Q /A "context/compatibility/readme.txt"
del /F /S /Q /A "archived_logs"
del /F /S /Q /A "ai-license-add-in-IrsProjectManagement.bin"
del /F /S /Q /A "context/security/preauth/projectid-source/header/projectid-source.properties"
del /F /S /Q /A "debug.properties.DSPROD"
del /F /S /Q /A "context/security/preauth/projectid-source/header"
当我从命令行执行批处理时,我收到错误: “'d'不被识别为内部或外部命令,可操作程序或批处理文件”
直接从命令行执行del语句时,它工作正常。
有什么想法在这里发生了什么?
答案 0 :(得分:1)
批处理文件显然保存为UTF-16 little-endian编码文件而没有byte order mark(BOM)。
文本编辑器通常指示某处文件的编码。例如,文本编辑器UltraEdit指示状态栏底部的活动文件的编码。
这个没有BOM的UTF-16编码批处理文件以字节
的二进制开头00000000h: 64 00 65 00 6C 00 20 00 2F 00 46 00 20 00 2F 00 ; d.e.l. ./.F. ./.
00000010h: 53 00 20 00 2F 00 51 00 20 00 2F 00 41 00 20 00 ; S. ./.Q. ./.A. .
00000020h: 22 00 64 00 65 00 62 00 75 00 67 00 2E 00 70 00 ; ".d.e.b.u.g...p.
00000030h: 72 00 6F 00 70 00 65 00 72 00 74 00 69 00 65 00 ; r.o.p.e.r.t.i.e.
00000040h: 73 00 22 00 0D 00 0A ; s."....
由于 cmd.exe 将NULL字节解释为字符串的结尾,因此要运行的命令只是 d ,这是一个未知命令。
将文件从UTF-16转换为文本编辑器中的ASCII(另存为选项)或
type test_1b.bat > test_1b_ascii.bat
根据Ryan Bemrose的建议,批处理文件将开始工作。
批处理文件通常位于北美和西欧国家的“ASCII”文件中,使用的是OEM代码页,如code page 850(OEM多语言拉丁语I)或code page 437(OEM US),而不是代码页{ {3}}通常用于单字节编码的文本文件。用于批处理文件的代码页取决于控制台中非Unicode文件的本地设置。如果批处理文件中只使用代码值小于128的字符,则代码页无关紧要,即批处理文件是真实的Windows-1252文件。