2012-06-18 87 views
0

我想下面的UNIX shell腳本轉換爲Windows:轉換Unix到Windows shell腳本

for strWorkerDirectory in $BASEDIR/worker01/applogs $BASEDIR/worker01/filtered $BASEDIR/worker01/filtered/error-logs $BASEDIR/worker01/filtered/logs $BASEDIR/worker01/filtered/session-logs 
do 
    if [ ! -d $strWorkerDirectory ]; then 
    mkdir -p $strWorkerDirectory 
    fi 
done 

到目前爲止,我想出了這個:

FOR %%strWorkerDirectory IN (%BASEDIR%worker01\applogs %BASEDIR%worker01\filtered %BASEDIR%worker01\filtered\error-logs %BASEDIR%worker01\filtered\logs %BASEDIR%worker01\filtered\session-logs) DO 
( 
IF exist %%strWorkerDirectory (echo %%strWorkerDirectory exists) ELSE (mkdir %%strWorkerDirectory && echo %%strWorkerDirectory created) 
) 

,但我收到錯誤消息剛剛說了什麼是錯在這裏

"%strWorkerDirectory" kann syntaktisch an dieser Stelle nicht verarbeitet werden. 

什麼是正確的轉換嗎?

回答

3

兩個問題:

  1. 的 「循環變量」 只能有一個字符。例如,嘗試僅使用%%s。 請注意,根據FOR循環的類型,名稱具有含義(有關更多信息,請參閱FOR /?);例如,當與`FOR/F「標記= ...」``一起使用時。在你的情況下,它應該沒有關係。
  2. 開口支架必須在同一行DO

完整示例:

FOR %%s IN (%BASEDIR%worker01\applogs %BASEDIR%worker01\filtered %BASEDIR%worker01\filtered\error-logs %BASEDIR%worker01\filtered\logs %BASEDIR%worker01\filtered\session-logs) DO (
IF exist %%s (echo %%s exists) ELSE (echo mkdir %%s && echo %%s created) 
) 

提示:你可以使用一個脫字符號(^)作爲續行字符,以避免過分長的行。只要確定插入符號後確實沒有其他字符(甚至沒有空格)。

FOR %%s IN (%BASEDIR%worker01\applogs^
    %BASEDIR%worker01\filtered^
    %BASEDIR%worker01\filtered\error-logs^
    %BASEDIR%worker01\filtered\logs^
    %BASEDIR%worker01\filtered\session-logs) DO (
    IF exist %%s (echo %%s exists) ELSE (echo mkdir %%s && echo %%s created) 
) 

EDIT作爲評議@dbenham所指出的,上述內部行接續實際上並不是neccessary。

+3

插入符號(續行)在IN子句中不需要。 IN子句的圓括號允許換行。 – dbenham

+0

@dbenham恩,謝謝。我非常熱衷於說明我錯過了那一條(通常未被充分利用)的延續線。 ;-) –