web-dev-qa-db-ja.com

Windows .cmdファイルまたはバッチファイルのパスにスペースを含むパス変数を設定します

スクリプトを書くのは初めてなので、これを機能させることはできません。スペースのないパスにファイルを移動した場合は可能ですが、可能であればスペースを使用したいのですが。

.cmdファイルがあるフォルダーに多数のOffice更新プログラムを抽出したい。バッチファイルを任意のコンピューターで使用できるようにするには、別のマシンで実行するために1か所で変更するだけでよいパス変数を設定します。問題は、パスにスペースが含まれていることです。定義内のパスを引用符で囲んだ場合、cmd.exeはファイル名を追加して切り替える前にパスを引用符で囲み、バッチは「コマンドライン構文エラー」で失敗します。引用符がないと、「内部または外部のコマンド、操作可能なプログラム、またはバッチファイルとして認識されません」というエラーが発生します。

テストのために、ヘルプスイッチを使用するまで、または正常に機能するようになります。 8.3ファイル/フォルダー名(たとえば、My Documents as MyDocu〜1)を使用して実行できますが、別の方法で実行できますか?

96
marcerickson

次のようなものを試してください:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2
91
aphoria

私が使う

set "VAR_NAME=<String With Spaces>"

パスを更新する場合:

set "PATH=%UTIL_DIR%;%PATH%"
54
koko

ここには2つのオプションがあります。最初に、パスを引用符で囲まずに保存し、後で引用することができます。

set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something

使用できる別のオプションは、文字列を引用符で囲まないようにするサブルーチンです(ただし、この場合、引用符を追加し、それらを削除して、利益なしに再度追加するため、実際にはあまり良い考えではありません):

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

%~1は、引数を囲む引用符を削除します。これは、引用符で囲まれたフォルダ名を渡すときに役立ちますが、前述のように、この特定のケースでは最善のアイデアではありません:-)

31
Joey

これを試して;

  1. 以下のように変数を作成します

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. 次に、パスを変数に置き換えます。開始と終了の引用符を必ず追加してください

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    
15

.batファイルを作成するときは、常にパスを二重引用符で囲みます。 (PAUSEを追加しただけなので、画面は閉じません。)

例えば:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE
7
JoBaxter

これを行う適切な方法は次のとおりです。

@ECHO off
SET MY_PATH=M:\Dir\^
With Spaces\Sub Folder^
\Dir\Folder
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat
CALL "%MY_PATH%\hello.bat"
pause
6
djangofan

この問題を修正する最も簡単な方法は、フォルダー名を引用符で囲むことです。

(cd\New Folder\...) --> (cd\"New Folder"\...)

これが役に立てば幸いです。

4
user5528279

永続的なパスを保存する必要がある場合(cmdの再起動時にパスは変更されません)

  1. 管理者としてコマンドプロンプトを実行します(cmd.exeを右クリックして、管理者として実行を選択します)

  2. Cmd setx path "%path%;your new path"に入力します

  3. パスを入力してEnterキーを押して、パスが正しく使用されているかどうかを確認します

1
mpmpeiris