5

Windows x64バージョンには、「\ Program Files(x86)」のように括弧で囲まれた名前のフォルダーが含まれており、これにより、使用しているバッチファイルが壊れます。問題のある行の例:

(%path%)の%% cの場合、存在する場合は "%% c\xyz.exe"を設定しますxyz=OK

つまり、「(x86)」で「)」に達すると、エラーメッセージが表示されて終了します。

これを修正する方法について何かアイデアはありますか?これはかなり大きなバッチファイルであり、ATMをより良い言語で書き直す時間がありません...

どうもありがとう :)

4

3 に答える 3

5

あなたの質問に直接答えることはありませんが、私が試みていると思うことをしようとしている場合(つまり、ファイルがパスに存在することを確認します)、バッチファイルで次のようなものを使用できます。

   @echo off
   for %%i in (xyz.exe) do set xyz=%%~$PATH:i

   if "%xyz%" == "" Goto NotFound

   Echo "Found"
   Goto TheEnd

:NotFound
   Echo "Not found"

:TheEnd
于 2011-03-21T20:04:35.087 に答える
3

通常、引用符は機能するはずですが、この場合は、で区切られたすべての要素を反復処理する必要があります;

;ただし、を組み合わせに置き換えることができる" "ため、角かっこは引用符で囲まれ、要素を反復処理できます。

サンプル:path=C:\temp;C:\windows;C:\Program Files (x86)
forループはで検索します
"C:\temp" "C:\windows" "C:\Program Files (x86)"

コードとしては次のようになります

setlocal EnableDelayedExpansion
set "searchPath=!path:;=" "!"
for %%c in ("!searchPath!") do (
    if exist "%%~c\xyz.exe" set xyz=OK
)
于 2011-03-21T20:12:46.700 に答える
2

この目的のために、フォルダの短い名前を使用できます。これがあなたのやり方です。

Windowsでコマンドpromtを開きます。Cドライブ(またはプログラムフォルダがあるドライブ)に移動します。次のように入力し、

   c:\> dir /x  <Hit Enter>

これにより、すべてのフォルダの短い形式が返されます。

「\ProgramFiles(x86)」が「PROGRA〜2」(または同等の短縮名)として表されることに気付くでしょう。これは、バッチスクリプトの作成中にエラーが発生しないようにするために使用するものです。

その他のオプションについては、こちらをご覧ください。 http://www.computerhope.com/dirhlp.htm

"dir /x"
の説明場所。"

于 2011-03-21T19:43:20.713 に答える