2017-05-24 7 views
0

これまでにバッチスクリプトを作成したことはありませんでしたが、学習プロセスに入りましたが...バッチが存在する場合は常にfalseを返します

ネットワークドライブを自動的にマップするスクリプトを作成しようとしています。フォルダが存在するかどうかを判断するためにif existステートメントを含めました。しかし、たとえそれがあってもフォルダが存在しないかのように、if statementをそのまま終了します。コマンドを個別に実行すると、そのコマンドは機能します(たとえば、if exist \\domain\folder\desired_folder (echo true) else (echo false)は真となります)。それはif statementsを通過させ、else statement

ここで私は、それが最初if statementに入ると、ドライブをマッピングする必要があるとの問題を抱えている私のコードがあるにまっすぐに行くように思える...任意の助けいただければ幸いです。

REM define %A and %B 
SET totalname="net user %USERNAME% /domain | FIND /i "Full Name"" 

FOR /f "tokens=3-4 delims=, " %%A IN ('%totalname%') DO SET drivename=%%A_%%B 


REM check if I drive folder exists 
if exist "\\domain\folder\%%A_%%B" (
REM delete current I drive 
REM map I drive 
net use i: /delete 
net use i: \\domain\folder\%drivename% /P:YES 
) else if exist \\domain\folder\%USERNAME% (
    net use i: /delete 
    net use i: \\domain\folder\%USERNAME% /P:YES 
) else (
    echo ERROR: File Not Found 
    echo ERROR: Unable to map I drive 

    REM for debugging purposes: %username% & %drivename% echo the desired result 
    echo username %USERNAME% 
    echo a_b %drivename% 
    pause 
    exit 
) 
+1

あなたのコードが不完全である '%% A'と' %% B'はどこから来た、あなたは表示されません。 [mcve]を提供してください!恐らく、問題は[遅延拡張](http://ss64.com/nt/delayedexpansion.html)の不足に関連しています。また、空白やその他の特殊文字を含む場合には、 '' "の間にパスを入れてください。 – aschipfl

+0

'%A'と '%B'を定義するのに次のコマンドを使用しています ' (%totalname%)DO SET drivename =%TO name = "%totalNAME%" DOユーザー名%/ドメイン| FIND/i "フルネーム" " と トークン= 3-4 delims = %A _ %% B' – cprmze

+0

@aschipflありがとう、私は '%A'と'%B'をどこに追加しましたか?そして、私が得ようとしているパスにスペースや特殊文字はありませんが、違いがあるかどうかを確認する – cprmze

答えて

1

%%A%%Bのみfor /Fループのコンテキストで存在する、ループのよう%%A%%B外側は文字通り%A%Bに拡張しようとしています。あなたは、変数drivenameにループ内%%A_%%Bを割り当てるので、後からではなく%%A_%%B%drivename%を使用しています

また、私が引用されset構文をお勧めします、そして、すべてのパスの前後に引用符を配置します。

ので:

for /F "tokens=3-4 delims=, " %%A in (' 
    net user %USERNAME% /domain ^| find /I "Full Name" 
') do set "drivename=%%A_%%B" 
rem // more code... 
if exist "\\domain\folder\%drivename%" (
    rem // more code... 
) else if exist "\\domain\folder\%USERNAME%" (
    rem // more code... 
) else (
    rem // more code... 
) 
関連する問題