2014-01-25 173 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,你還需要一個exit /bgoto :eof:myConverter標籤之前。

但你的腳本似乎過於複雜,設置變量似乎並沒有什麼目的,節省您的當前位置在一個變量,而不是使用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是空的,所以它會試圖執行

(for %%f in() do (
+0

謝謝你的時間Stephan。也投了這個。你有一個出口/ B點。 – MightyMouse

相關問題