2011-01-31 2 views
3

도스 배치 파일루틴에 백분율 (%)을 전달하는 방법이 있습니까?

입력 파일은 세 개의 레코드가 있습니다

HOW NOW BROWN COW 

JACK AND JILL 

100% JUST YOU & ME 

스크립트는 다음과 같다 :

@echo off 

set infile=e:\file.txt 
set outfile=e:\outfile.txt 

for /F "tokens=*" %%H in (%infile%) do (
    call :Loop "%%H" 
) 

exit /b 0 

:Loop 
    for %%a in (%*) do echo %%~a >> %outfile% 
exit /b 0 

출력 :

E:\>foo2 

E:\>type outfile.txt 
HOW NOW BROWN COW 

JACK AND JILL 

100 JUST YOU & ME 

문자 %가 사라입니다 ! 이유가 궁금하십니까?

답변

2

특수 문자이므로 100 %%로 설정하면 올바르게 출력됩니다. 나는 그것을 우아하게 다루는 방법이 있다고 생각 하겠지만, 당신은 그 주위를 놀아야 만 할 것입니다.

편집 :는 뒷조사를하고 http://www.dostips.com/DtCodeBatchFiles.php

이에 적응하고 내가 당신을 위해 일한다고 생각에 BatchSubstitute.bat 통해 온 - 사람이 완전히 무슨 일이 일어나고 있는지 이해하고 있다면, 나는 그것을 듣고 하다며 싶습니다 그것은 여기 %가 제거되고, 내용을 변경할 수 있습니다 당신은 값으로 콘텐츠를 전송하는 call를 사용할 수 없습니다, 귀하의 경우에는

@echo off 
SETLOCAL ENABLEEXTENSIONS 
SETLOCAL DISABLEDELAYEDEXPANSION 


set infile=e:\file.txt 
set outfile=e:\outfile.txt 

for /f "tokens=1,* delims=]" %%A in ('"type %infile%|find /n /v """') do (
    set "line=%%B" 
    if defined line (
     call set "line=echo.%%line%%" 
     for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> %outfile% 
    ) ELSE echo. >> %outfile% 
) 
0

문제가 call :loop "%%H"입니다 : - 나는 단지 vauge 개념을 가지고있다.

다른 방법은 참조로 변수 call :func myVar을 호출하는 것입니다.
그러나 call이 실제로 느린 경우 가장 좋은 방법은 루프에서 바로 처리하는 것입니다.

for 루프의 또 다른 문제점은 느낌표 !과 캐럿 ^입니다.
일반적으로 파손됩니다 만 지연 토글 기술로 피할 수 있습니다.

set infile=e:\file.txt 
set outfile=e:\outfile.txt 
setlocal DisableDelayedExpansion 
for /f "delims=" %%A in ('"findstr /n ^^ %infile%"') do (
    set "line=%%A" 
    setlocal EnableDelayedExpansion 

    set "line=!line:*:=!" 
    (echo(!line!)>>%outfile% 

    rem CALL :func line 
    endlocal 
) 
관련 문제