2015-10-27 42 views
0

我必須編寫批處理腳本。該腳本讀取輸入文件的行,併爲每行執行sqlcmd。 但是,當我執行我的劇本是不是那樣,我想,其實這是不使工作...讀取文件的每一行 - 批處理腳本

我的批處理腳本:

@echo off 

SETLOCAL EnableDelayedExpansion 

set Chemin=C:\users\documents\Communication\Test\MSG_IN 

set NomFichierU=UHMSO_1 
set user=admin 
set pwd=admin 
set db=DTBASE_001 

cd /d %Chemin% 
set nomfic=%NomFichierU% 
set HHMMSS=A 
set HHMMSS=%LTIME:~0,2%%LTIME:~3,2%%LTIME:~6,2% 
for %%f IN (%NomFichierU%*.txt) DO (
    for /f tokens^=*^ delims^=^ eol^= %%l IN (%%f) DO (
     echo test 
     REM echo %%l 
     ECHO %%G 
     set nomficr=%%a 
     set nomfic=!nomficr:~0,-1!.tmp 
     REN %%a !nomfic! 
     rem executer sript MHUHMS.sql avec sqlplus 
     sqlcmd -S MILCS02 -U %user% -P %pwd% -d %db% -i c:\users\documents\SQL\MHUHMS.sql 
     move !nomfic! SLD_SLDHI\SAVE 
    ) 
) 

而且MHUHMS.SQL只是讓在數據庫中更新。 我的問題是當我執行批處理腳本,它只是把我放入文件夾'Chemin',但我想它讀取像UHMSO_1_XXXXX.txt文件。之後,對於我的每一行文件,它都會運行我的sql腳本。

我的錯誤在這一刻: 系統找不到文件UHMSO_1 * .txt。

而我的文件夾中的地點理想...

如果有人有什麼想法,因爲我不是在批處理腳本真的很好......我不知道太多,如果我的SQLCMD是正確的或不...

感謝您的幫助!

編輯:經過wOxxOm & MichaelS的幫助。

回答

1

好了,在聊天討論故障排除之後,讓我們總結一下問題:

  • for /f不能使用通配符使用。枚舉文件中的附加外for環和在for /f
  • 文本文件使用循環變量是在UTF-16編碼,使用for ... ('type "filename"') ...
  • sqlcmd只能看到正常批次變量,而不是循環變量像%%l所以pass it with -v
  • 所有nomfic%%a%%G線不需要
  • 使用cd /d c:\some\path真正改變工作驅動器和路徑。
    甚至更​​好pushd c:\some\path + popd保存並恢復以前的工作文件夾。
  • move文件只具有處理的所有其線條
  • SETLOCAL EnableDelayedExpansion不需要用於張貼的代碼片段

set Chemin=C:\users\documents\Communication\Test\MSG_IN 
set NomFichierU=UHMSO_1 
set HHMMSS=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% 

pushd %Chemin% 
for /f "delims=" %%f IN ('dir /b "%NomFichierU%*.txt"') DO (
    for /f tokens^=*^ delims^=^ eol^= %%l IN ('type "%%f"') DO (
     sqlcmd -S MILCS02 -U %user% -P %pwd% -d %db%^
       -i c:\users\documents\SQL\MHUHMS.sql -v l ="%%l" 
    ) 
    move "%%f" "SLD_SLDHI\SAVE\%%f.%HHMMSS%" 
) 
popd 
pause 

P.S.後如果文件名稱可以包含空格使用usebackq和引用變量:

for /f usebackq^ tokens^=*^ delims^=^ eol^= %%l IN ("%%f") DO (
+0

讓我們[在聊天中繼續討論](http://chat.stackoverflow。COM /間/ 93506 /討論-間woxxom和-S-紀堯姆)。 – wOxxOm

2

我不知道是否有更多的錯誤代碼中的一個,但絕對是您缺少SETLOCAL EnableDelayedExpansion。您正在使用延遲擴展(例如!nomfic!),但!...!在腳本開始時沒有SETLOCAL EnableDelayedExpansion而沒有用處。

+0

感謝您的貢獻,我補充一點! –

+0

你還可以在這個問題中更新你的代碼嗎?我猜代碼仍然不起作用? – MichaelS

+0

是的......它不工作......但現在它不同於以前。在我被放置在目錄'Chemin'之前。現在我在開始的目錄中執行我的.bat。所以我這是一件好事......我正在更新我的代碼 –