2017-08-08 212 views
0

我需要將以下Unix腳本轉換爲在Windows上運行。我假設cd命令將更改爲撥打direcho命令更改爲撥打print如何將Unix shell腳本修改爲Windows批處理文件?

腳本檢查給定文件的目錄,如果該文件不存在,則腳本循環/休眠,然後再次檢查。

我主要是努力如何最好地轉換變量和循環命令,任何提示/提示將不勝感激?

cd $DIRECTORY_NAME 

echo "You are currently in $(pwd) directory" 

numfiles=0 

while [ $numfiles -lt "1" ] 

do 

    export filename=`ls SWIX_BAU_success` 
    export numfiles=$(echo $filename | wc -w) 
    echo "$numfiles file found" 

if [ $numfiles -ge "1" ] 

then 

    echo "$filename file found" 
    exit 0 

else 

    echo "Incorrect number of files found, 1 file expected" 
    numfiles=0 
    sleep 300 

fi 

done 
+1

SS64有兩個像樣的參考文獻[Windows批處理('cmd')(https://ss64.com/nt)和['bash'(https://ss64.com/bash/) 。在進行轉換之前,您可能需要檢查它們;您可能還想考慮使用PowerShell而不是Windows批處理。 –

+0

請閱讀[爲什麼「有人可以幫我嗎?」不是一個真正的問題?](https://meta.stackoverflow.com/q/284236/354577) – Chris

回答

0

我只是在撤銷這個問題時發佈這個答案。
假設SWIX_BAU_success是隻有一個文件的(子)目錄。

@Echo off 

cd /D "%DIRECTORY_NAME%" 
echo You are currently in directory: %CD% 
Set numfiles=0 

For /f "tokens=1,* delims=:" %%A in (
    'Dir /B "SWIX_BAU_success" ^| findstr /n^' 
) DO Set numfiles=%%a&Set filename=%%B 

If %numfiles% equ 1 (
    echo %filename% found 
    exit /B 0 
) else (
    echo "Incorrect number of files found, 1 file expected" 
    set numfiles=0 
    Timeout /T 300 
) 
+0

感謝您的答覆,這看起來不錯,我會很快測試它。關於你的假設,'SWIX_BAU_success'是文件名而不是目錄,是的,只有一個文件。 包含該文件的目錄是您擁有'cd/D「的目錄%DIRECTORY_NAME%」' – Harp

+0

如果它是一個不同的文件名,只能存在一次,這會簡化爲「if exists」SWIX_BAU_success「(..)Else (...)' – LotPings