2014-01-25 2 views
1

Windows를 마지막으로 사용한 이후로 여러 해가되었습니다. 따라서 생성하려는 간단한 스크립트에 대한 도움이 필요합니다. 요컨대, 파일 목록을 기반으로 일부 파일을 만드는 스크립트를 생성하려고합니다. 나를 괴롭히는 것은 for 루프를 실행하는 동안 두 번째 요소가 처리 된 후 코드가 실제로 실행되기 전에 루프 자체의 코드를 출력하기 시작합니다. 또한 디렉토리를 변경하는 마지막 명령은 실행되지 않으며 그 이유는 내가 가지고있는 goto : eof 문이라고 생각합니다. 누군가가 내가 스크립트를 적절하게 편집하도록 도울 수 있습니까? 여기 Windows 배치 파일의 for 루프에 인쇄하지 마십시오.

스크립트입니다 :

@echo off 
set "myroot=%cd%" 
set "scriptsroot=%myroot%\public\javascripts" 
set "cdstr=Changing directory" 
echo.%cdstr% 
cd %scriptsroot% 
set "mainmsg=Generating bundles" 
echo.%mainmsg% 
set "corefiles="definitions resources representation something"" 
call:myConverter %corefiles% 
set "cdstr=Changing directory" 
echo.%cdstr% 
cd %myroot% 

:myConverter 
set list=%~1 
(for %%f in (%list%) do (
    echo.- Bundle for %%f 
    browserify %%f.js -o %%fBundle.js 
)) 
goto:eof 

답변

2

가장 일반적인 원인은 browserify이 다른 배치 스크립트입니다. 스크립트를 호출하지 않기 때문에 배치 컨텍스트는 완료되는 즉시 끝나고 ECHO 상태는 기본 스크립트가 실행되기 전의 상태로 재개됩니다. 배치 컨텍스트가 끝났음에도 FOR 루프가 계속 실행되어 ECHO 상태가 ON으로 유지됩니다. 배치 컨텍스트가 끝났기 때문에 나머지 루프는 FOR 루프가 완료된 후에 실행되지 않습니다.

당신은 call browserify를 사용해야합니다, 당신은 또한 당신의 :myConverter 라벨 전에 exit /b 또는 goto :eof이 필요합니다.

그러나 스크립트는 너무 복잡하여 PUSHD/POPD를 사용하는 대신 변수에 현재 위치를 저장하고 불필요한 서브 루틴을 저장하는 등의 목적이없는 변수를 설정합니다. 다음과 같이

나는 당신의 스크립트를 코딩 할 것 :

@echo off 
echo Changing directory 
pushd public\javascripts 
echo Generating bundles 
for %%F in (definitions resources representation something) do (
    echo - Bundle for %%F 
    call browserify %%F.js -o %%FBundle.js 
) 
echo Returning to original directory 
popd 

당신이 다음 잘, 더 큰 스크립트에서 여러 위치에서 변환을 만들고 서브 루틴을 사용하려는 경우. 그러나 list 변수를 만들 필요가 없습니다. FOR 루프에서 %~1을 직접 사용하기 만하면됩니다.

:myConverter 
for %%F in (%~1) do (
    echo - Bundle for %%F 
    call browserify %%F.js -o %%FBundle.js 
) 
exit /b 
+0

자세한 게시물을 보내 주셔서 감사합니다. :) – MightyMouse

1

이 문제가 해결되지 않습니다,하지만 난 스크립트의 논리적 오류를 발견 :

레이블 전에 exit /b을 넣어 :myConverter

을 당신의 스크립트가 "마지막"줄인 cd %myroot%으로 끝났다고 생각하면 실제로 "서브 루틴"과 함께 진행하지만 %~1은 이제 비어있어

0을 실행하려고 시도합니다.
(for %%f in() do (
+0

스테판 감사합니다. 이것도 투표했습니다. 출구가있는 지점이 있습니다/b. – MightyMouse