2014-12-11 2 views
3

간단한 배치에서 파일을 삭제할 수 없습니다 : 내가 명령 줄에서 일괄 처리를 실행하면는이 코드를 포함하는 배치 파일을

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

어떤 라인에서 오류가 발생합니까? 배치 파일의 이름은 무엇입니까? – Laf

+0

파일 이름은 test_1b.bat이며 오류는 파일의 첫 번째 행에서 발생합니다. 첫 번째 줄 (REM)을 주석으로 처리 할 때 "R이 내부 또는 외부 명령으로 인식되지 않습니다 ..."라는 메시지가 나타납니다. – user2135970

+2

재미있는 행동입니다. [Question] (http://stackoverflow.com/questions)/22159534 /), 문제 해결에 도움이 되나요? – Laf

답변

1

일괄 파일은 분명히 little-endian 인코딩 파일로 저장되며 byte order mark (BOM)이 아닙니다.

텍스트 편집기는 대개 파일의 인코딩을 어딘가에 나타냅니다. 예를 들어 텍스트 편집기 UltraEdit은 상태 표시 줄의 하단에있는 활성 파일의 인코딩을 나타냅니다.

는 UTF-16 BOM없이 인코딩이 배치 파일, 실행하는 명령은 인 바이트 NULL 바이트가 cmd.exe를에 의해 문자열의 끝으로 해석되기 때문에

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.".... 

이진에서 시작 d 알 수없는 명령입니다.

는 텍스트 편집기 (다른 이름으로 저장에 대한 옵션) 또는 Ryan Bemrose 제안 및 배치 파일 작업을 시작으로

type test_1b.bat > test_1b_ascii.bat 

와 ASCII로 UTF-16에서 파일을 변환합니다. 인코딩 된 단일 바이트를 위해 일반적으로 사용되는

배치 파일은 북미와 서구 code page 850 (OEM 다국어 라틴어 I) 또는 code page 437 (OEM 미국)와 같은 OEM 코드 페이지를 사용하는 유럽 국가 "ASCII"파일이 아닌 코드 페이지 Windows-1252에 보통 텍스트 파일. 배치 파일에 사용할 코드 페이지는 콘솔의 유니 코드가 아닌 파일에 대한 로컬 설정에 따라 다릅니다. 코드 값이 128보다 작은 문자 만 배치 파일에 사용되는 경우, 즉 배치 파일이 실제 ASCII 파일 인 경우 코드 페이지가 중요하지 않습니다.