2015-08-28 176 views
0

我正在使用此代碼從文本文件運行帶有參數的批處理文件。但它只取自輸入文件的最後一個值。循環從文本輸入的批處理文件

@echo off 

cd /d C:\Users\infodba\Desktop\Export 


for /f "eol=; tokens=1,2 delims=," %%a in (Input.txt) do 
( 
    set ITEMID=%%a 
    set REV=%%b 
    call :write %%a %%b 
) 

:write 
echo ITEMID=%ITEMID%, REV=%REV% 

cd /d C:\Program Files\Siemens\NX 8.5\UGMANAGER 
ug_export -part=%ITEMID% -rev=%REV% -u=arvind [email protected] -role=dba -export_dir=C:\Users\infodba\Desktop\Export 

exit /B 0 

回答

1

您需要關閉)後添加一個exit /B命令不會陷入:write子程序主程序(for循環)結束後無意的。
for正文的開頭(需要與do關鍵字位於同一行。

當您將%%a%%b傳遞給子程序時,不需要設置ITEMIDREV
:write使用%1訪問第一個參數,%2使用第二個參數。

這應該工作:

@echo off 

pushd "C:\Program Files\Siemens\NX 8.5\UGMANAGER" 
for /f "usebackq eol=; tokens=1,2 delims=," %%a in (
    "C:\Users\infodba\Desktop\Export\Input.txt" 
) do (
    call :write "%%~a" "%%~b" 
) 
popd 
exit /B 

:write 
echo ITEMID="%~1", REV="%~2" 

ug_export -part="%~1" -rev="%~2" -u=arvind [email protected] -role=dba -export_dir=C:\Users\infodba\Desktop\Export 

exit /B 0 

如果ug_export不支持-part-rev參數的工具被引用,寫ug_export -part=%~1 -rev=%~2 ...代替。

我避免通過在主部一次改變到它改變到目錄路徑爲ug_export:write每個執行(使用pushdpopd)。

提示:對於調試是非常有用暫時刪除@echo off ...

+0

我得到這個錯誤,調用批處理文件不執行......「系統找不到指定的批次標籤 - 寫上「 –

+0

你能否提供一個'Input.txt'的內容樣本?我只是解決了關於參數'%% a'和'%% b'的問題,因爲它們包含空格... – aschipfl

+0

輸入如下:000112998,A –