2017-02-07 12 views
0

数日前に動作したバッチスクリプトに問題がありますが、変更が加えられていなくても機能しません! 私の知識がなくてもシステム内で何か変わったと思います。質問マークはWindowsのバッチファイルにエンコードされています

order.htm?order=12345 

しかし、それはこのようになった:

予想のリンクがある(疑問符は%3Fになり気づか)

order.htm%3Forder=12345 

コードは次のとおりです。

@echo off 
echo. 

set "drive=%~d0" 
set "runningDir=%~dp0" 

:start 
ClS 
Echo. 
Set /P Job=Enter number:^> 

@echo off 

if exist c:\"Program Files (x86)"\Google\Chrome\Application\chrome.exe goto program_files_x86 

:program_files_x86 
start c:\"Program Files (x86)"\Google\Chrome\Application\chrome.exe --disable-print-preview --ignore-certificate-errors --disable-web-security --user-data-dir --allow-file-access-from-files %runningDir%\order.htm?order=%job% 
goto end 

:end 
goto start 

何か提案がありますか?

よろしく ニクラス

答えて

2

二重引用符は、通常、全体のフォルダ/ファイルの文字列と、それだけではなく一部の周りに使用する必要があります。

コマンドスタートは、最初の二重引用符付き文字列を新しいコマンドプロセスのタイトルとして解釈します。したがって、GUIアプリケーションの起動時には、コマンドラインで""で指定された空のタイトル文字列を使用して、アプリケーションのパスをタイトル文字列として実行することを回避してください。

%~dp0で参照されるバッチファイルパスは、常にバックスラッシュで終了します。したがって、この文字列の後に余分なバックスペースを指定しないでください。または、バッチファイルのパスを持つrunningDirのような環境変数を指定しないでください。ところで、バッチファイルを実行する際のカレントディレクトリは、バッチファイルのディレクトリと異なる場合があります。そのため、名前runningDirは誤解を招くほど良くありません。環境変数のより良い名前はBatchPathです。

バッチファイルでstartをラベルとして使用することは可能です。しかしコマンドのためにそれを行うことはお勧めできませんスタートこれはそれぞれのコマンドを検索するラベルを検索することが困難になります。 Beginのようなラベルを使用する方が良いです。

URLには、ディレクトリ区切り文字が/であるため、バッチファイルパス内の各バックスラッシュ(Windowsのディレクトリ区切り文字)をスラッシュで置き換える必要があります。

URLはhttp://(ハイパーテキスト転送プロトコル)のようなプロトコルで始まり、二重引用符で完全に囲む必要があります。

そして最後echo/またはecho(は、空白行を印刷するためのecho.よりも優れている、詳細についてはDifference between Echo[Special Character]を参照してください。

書き換えられたバッチコード:

@echo off 
echo/ 

set "BatchPath=%~dp0" 
set "BatchPath=%BatchPath:\=/%" 

:Begin 
clS 
echo/ 
set /P "Job=Enter number: " 

if exist "%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" goto program_files_x86 

:program_files_x86 
start "" "%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" --disable-print-preview --ignore-certificate-errors --disable-web-security --user-data-dir --allow-file-access-from-files "http://%BatchPath%order.htm?order=%Job%" 
goto end 

:end 
goto Begin 

使用されるコマンドとその仕組みを理解するために、コマンドプロンプトウィンドウを開き、そこに次のコマンドを実行し、完全にページが非常に慎重に、各コマンドのために表示されているすべてのヘルプを読みます。

  • cls /?
  • echo /?
  • goto /?
  • if /?
  • set /?
  • start /?
関連する問題