2012-01-16 2 views
2

이 배치 파일을 사용하여 일부 * .txt 파일을 압축 싶습니다. 자체 zip 파일의 각 * .txt 파일 불행히도 그것은 작동하지 않고 나는 출력으로 얻는다.하위 문자열이 작동하지 않는 이유는 무엇입니까?

ECHO is disabled (OFF). 

여러 번. 다음은 소스 코드입니다.

@echo off 
setlocal EnableDelayedExpansion 

for %%i in (*.txt) do (
    set filename = %%i 
    set filenametrunc = %filename:~0,10% 

    7z a -tzip -mx0 %zipname% 
    echo %filename% zipped. 
) 

나는 EnableDelayedExpansion에 대해 읽은 후이를 활성화했습니다. 그래도 작동하지 않습니다.

도움을 주시면 감사하겠습니다.

+0

잘못된 당신의 자신의 메시지를 추가 할 경우 올바른 "A는 = %% i가 설정" "설정 = %% i가"(주변에 공백이 없어야합니다 =) – aeroson

답변

6

SetLocal EnableDelayedExpansion을 사용하고 랩 변수는 !입니다. 또한 변수 이름, equals 및 값 사이에 공백을 넣지 마십시오.

set filename = ...

가 값  ...
set filename=.....으로 %filename %라는 변수를 만드는 것은 전에 이다 % 내부 괄호 .....

@echo off 
setlocal EnableDelayedExpansion 

for %%i in (*.txt) do (
    set filename=%%i 
    set filenametrunc=!filename:~0,10! 

    7z a -tzip -mx0 !zipname! 
    echo !filename! zipped. 
) 

변수들이 모두 동시에 평가 값과 %filename%라는 변수를 만든다 전체 루프는 실행을 시작합니다. 이전 코드는 set 문이 실행되기 전에 모든 변수를 확장합니다.

4

변수 zipname을 초기화하고 % 문자 대신 ! 문자를 사용하여 var을 확장해야합니다. 읽기 HELP SET

은, 특히

지연된 환경 변수 확장은 실행시 환경 변수를 확장하기 위해 다른 문자 (느낌표)를 사용할 수 있습니다.

당신은 당신이 루프 내에서 지정 변수에 액세스해야하는 경우에만 루프 내에서 필요

@echo off 
setlocal EnableDelayedExpansion 
for %%i in (*.txt) do (
    set zipname=%%i 
    7z a -tzip -mx0 !zipname! 
    echo !zipname! zipped. 
) 
3

지연 확장에 코드를 변경합니다. 그러나 귀하의 경우에는 필요가 없습니다.

올바른 7z 구문을 먼저 얻어야합니다. 원래 코드는 파일 이름을 지정하지 않았기 때문에 현재 디렉토리에있는 모든 파일을 단일 zip 파일에 넣으려고했습니다. 또한 ZIPNAME이 (가) 초기화되지 않았습니다. 당신은 다음과 같은 것을 원한다.

7z a -tzip zipname filename 

난 당신이 우편의 이름이 .zip 접두사 대신이 .txt를 제외하고, 원래의 파일 이름과 동일 할 추정. 그리고 접두어없이 기본 이름을 제공하는 ~ n 한정자 만 있으면됩니다. 7-Zip은 자동으로 .zip 확장자를 추가합니다.

for %%i in (*.txt) do 7z a -tzip %%~ni %%i 

원하는 경우 압축하지 않는 -mx0 옵션을 추가 할 수 있습니다. 나는 왜 당신이 텍스트 파일을 위해 그것을 할 것인지 상상할 수 없다.

for %%i in (*.txt) do 7z a -mx0 -tzip %%~ni %%i 

당신이

for %%i in (*.txt) do (
    7z a -mx0 -tzip %%~ni %%i 
    echo %%i zipped into %%~ni.zip 
) 
+0

특별히 7z 구문을 수정하면 +1됩니다. –

관련 문제