2016-11-14 6 views
-4

私はWindowsバッチスクリプトの作成に忙しく、議論にいくつか問題があります。スペースを使って引数を渡すWindowsバッチ

私のバッチスクリプトは、次の

@echo off 

setlocal EnableDelayedExpansion 

:: RETRIEVE ARGS WITH SPACES 

set VAR01=%~1 
set VAR02=%~2 
set VAR03=%~3 

:: CONFIRM IT WORKED 

echo %VAR01% 
echo %VAR02% 
echo %VAR03% 

endlocal 

exit /b 

であり、私はそれをスペースを含む引数を渡すしようとしています。

run_batch.bat "arg var 01" "arg var 02" "arg var 03" 

しかし、それが実行されるときに、私は、出力

arg var 01 
ECHO is off 
ECHO is off 

は、なぜそれが最初の引数だけのために正常に動作している取得していますし、それがどのように固定することができますか?コードに何か問題があっなかった

NOTE

、それが問題を引き起こして目に見えない特殊文字があったようです。テキストエディタやその行に沿ったものでなければなりません。この質問を削除するにはどうすればよいですか?

+0

のような珍しい文字に置き換えることがありますd VAR03! –

+0

申し訳ありませんが、タイプミスでした – Trent

+0

タイプミスがなく、期待通りに動作します – jeb

答えて

0

これは動作するはずです:

set VAR01=%~1 
set VAR01=%~2 
set VAR01=%~3 

が、次のようになります:

@echo off 

setlocal EnableDelayedExpansion 

:: RETRIEVE ARGS WITH SPACES 

set VAR01=%~1 
set VAR02=%~2 
set VAR03=%~3 

:: CONFIRM IT WORKED 

echo %VAR01% 
echo %VAR02% 
echo %VAR03% 

endlocal 

exit /b 

を間違った部分でした

set VAR01=%~1 
set VAR02=%~2 
set VAR03=%~3 
+0

これは誤字です。 – Trent

+0

修正されたバージョンはあなたのマシンで動作しますか? – zanseb

+0

タイプミスは私のバージョンではありませんでした。私の質問ではちょうどタイプミスでした。 – Trent

0

あなたの閲覧のための小さなスクリプトの例。

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 

REM EXIT IF NO ARGS RECEIVED 
IF "%~1"=="" EXIT 

REM SET MINIMUM NUMBER OF ARGS 
SET "i=1" 

REM RETRIEVE ALL ARGS 
:ARGS 
SET "VAR0%i%=%~1" 
SHIFT 
IF NOT "%~1"=="" (
    SET/A i+=1 
    GOTO :ARGS 
) 

REM INFORM NUMBER OF ARGS 
CLS 
ECHO=THERE WERE %i% ARGS 

REM CONFIRM IT WORKED 
ECHO= 
SET VAR0 

REM ALTERNATIVE CONFIRMATION 
ECHO= 
FOR /L %%A IN (1,1,%i%) DO IF DEFINED VAR0%%A ECHO=!VAR0%%A! 

TIMEOUT -1 
ENDLOCAL 
EXIT 
0

オタク以外の問題はないと思います。引数を示し、私はDosTips.orgから学んだ(が、正確なリンクを見つけることができません)番VARSにそれらを置くために、非常にトリッキーな方法がある:

:: Expand-Args.cmd 
@Echo off 
Set Args=,1=%~1,2=%~2,3=%~3,4=%~4,5=%~5,6=%~6,7=%~7,8=%~8,9=%~9 
Set "Args=%*%Args:,="&Set "Arg%" 
Set Arg 

バッチは、この出力がで実行されます。 Expand-Args one "2 2" three 4 five 6 "7 7" 8 9あなたは決してVAR02設定ませんしているので、二重引用符で囲まれた内容に干渉しないように

Arg1=one 
Arg2=2 2 
Arg3=three 
Arg4=4 
Arg5=five 
Arg6=6 
Arg7=7 7 
Arg8=8 
Arg9=9 
Args=one "2 2" three 4 five 6 "7 7" 8 9 

編集は、区切り文字commaは、ALT + 0127

関連する問題