无法从简单批次中删除文件

时间:2014-12-11 15:55:14

标签: windows batch-file

我有一个包含以下代码的批处理文件:

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语句时,它工作正常。

有什么想法在这里发生了什么?

1 个答案:

答案 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文件。