2017-10-18 38 views
2

我已經不工作這個小腳本:贏批次 - 如果文件名的搜索中存在%DATE% - 不工作

set actdate=%date:~6,4%%date:~3,2%%date:~0,2% 
set source="\\somewhere\APPL\Logs" 
set target="C:\TEMP\nebu_%actdate%.log" 
echo %actdate% 
if exist "%source%\*%actdate%*.txt" (
    echo vorhanden 
    echo %source%\*%actdate%*.txt 
) else (
    echo Nicht vorhanden 
) 

當我跑了劇本我獲得以下的輸出:

20171018 
vorhanden 
"\\somewhere\APPL\Logs"\*20171018*.txt 
Nicht vorhanden 

現在的事情是,事實上在源與*20171018*.txt沒有文件:

NeBuExport.20171017.102600.txt 
NeBuExport.20171016.080552.txt 
NeBuExport.20171013.093638.txt 

什麼問題,他回覆?

+4

好吧,根據你的輸出結果,'if exists'和AND'else'代碼都會被執行。這是不可能的,你顯示的代碼。重新檢查你的代碼。 – Stephan

+0

您的代碼按我的預期運行,並按照我的預期生成結果 - 與您的報告截然不同。我對你的陳述很感興趣:「沒有*20171018Ü* .txt的文件來源:」 - 'Ü'讓我懷疑你沒有將這批保存爲ANSI編碼,而是保存爲unicode。將它保存爲ANSI並查看是否修復它。 – Magoo

+0

忽略「Ü」,這是一個錯字,抱歉。 –

回答

2

Squashman用他的評論擊中頭部 - 你的意外行爲是你的任務中引號的結果,加上你的源代碼路徑中的空間。其實,如果你的路徑包含任何標記分隔符像=,;,或<space>

假設你的源分配是set source="\\some path\APPL\Logs"可能出現的問題。來源的價值是"\\some path\APPL\Logs",包括報價。

那麼你的IF語句擴展爲:

if exist ""\\some path\APPL\Logs"\*20171018*.txt" (

因爲翻番行情的,空間是沒有報價,有什麼打算在單個令牌被視爲兩個標記。

IF測試如果""\\some存在,如果是,那麼它會嘗試執行以下僞命令:

path\APPL\Logs"\*20171018*.txt" 

(被視爲一個參數傳遞給假命令,而不是作爲一個開始代碼塊。

當然""\\some不存在,所以僞命令不會執行,並且您不會收到任何錯誤消息。

現在應該明白爲什麼所有三個ECHO語句都會執行。

最後一個「神祕」是爲什麼) else ()語句不會產生任何錯誤。這是)有效地作爲REM的事實的結果,如果沒有任何有效的括號碼塊關閉。 )之後的所有文字都被忽略,就像一句話。

如預期,如果你微妙地改變你的源的定義Squashman建議您的代碼應工作:

set "source=\\some path\APPL\Logs" 

現在你的價值變得\\some path\APPL\Logs,不帶引號,和一切正常:-)

0

它終於摸索:

set "actdate=%date:~6,4%%date:~3,2%%date:~0,2%" 
set "source=\\somewhere\APPL\Nebu Agent\Logs" 
set "target=C:\TEMP\nebu_%actdate%.log" 

if exist "%source%\*%actdate%*.txt" (
    echo "vorhanden" 
) else (
    echo "Nicht vorhanden" 
) 

它需要在if語句以及 感謝所有報價: )

相關問題