hoge.bat~~ ~~start "title" "test (hoge).bat"~~ ~~
と半角スペースを入れてやればうまくいきます(むろんファイル名にも)。
↑すみません、ご自身で書かれていましたね、失礼しました。。。
どうやら半角スペースが入らないと、括弧の前のtest
までで解釈をやめ、test.bat
なりtest.exe
なりを実行しようとするみたいですね。
半角スペース入れる対応ではダメなのですかね?
もしくは、括弧を使わないとか。。。
あるバッチファイルから、ほかのバッチファイルを起動させるバッチを作っているのですが、
test(1).bat
などの名前に()
が含まれるファイルをstart
できません。
解決方法を教えてください。
呼びだされた側のプロンプトに表示されているものです。
'test' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\username\Desktop>
start test(hoge).bat
pause
ファイル構造
.
├── hoge.bat
└── test(hoge).bat
ダブルクォーテーションでパスを囲みましたが、エラーは変わりませんでした。以下がそのソースコードです。
start "title" "test(hoge).bat"
また、遅延環境変数を用いても、エラーは変わりませんでした。以下がそのソースコードです。
@setlocal enabledelayedexpansion
set Path=test(hoge).bat
start "title" "!Path!"
遅延環境変数のダブルクォーテーションを付ける場所を変えても同じでした。
@setlocal enabledelayedexpansion
set Path="test(hoge).bat"
start "title" !Path!
なぜかファイル名に空白が含まれている場合はちゃんと動きました。
start "title" "test (hoge).bat"
pause
以下のようにすれば動きますが、私はstart
コマンドの/high
や、/wait
、/min
などのオプションを使いたいので、できればstart
をつかいたいです。
"test(hoge).bat"
hoge.bat~~ ~~start "title" "test (hoge).bat"~~ ~~
と半角スペースを入れてやればうまくいきます(むろんファイル名にも)。
↑すみません、ご自身で書かれていましたね、失礼しました。。。
どうやら半角スペースが入らないと、括弧の前のtest
までで解釈をやめ、test.bat
なりtest.exe
なりを実行しようとするみたいですね。
半角スペース入れる対応ではダメなのですかね?
もしくは、括弧を使わないとか。。。
@dokimiki
Questioner回答ありがとうございます!
どうやら半角スペースが入らないと、括弧の前のtestまでで解釈をやめ、test.batなりtest.exeなりを実行しようとするみたいですね。
おっしゃる通りコマンドプロンプト側が途中で解釈をやめちゃってるみたいですね...
バッチファイルがstart
するときに使っているコマンド引数をタスクマネージャーで覗いてみたのですが、やはり括弧が特別な記号として解釈されてそうですね...
微妙な違いはありますが、以下が近いかと
参考になります!
やはりファイル名の(
を消して解決するのが一番早いですかね...
コマンドプロンプト側の処理だからっていうので納得するしかないですね(笑)
最終的にファイル名を変えることで解決することにしました!
回答していただいたお二方、( @HalHarada 様、 @imagou 様 )どうもありがとうございました!
それが一番リーズナブルかと思います!
既に解決済みかもしれませんが、ダブルクォートを重ねると実行できたりします(理由は不明ですが・・・)。
start "title" ""test(hoge).bat""
start 'title' 'test(hoge).bat'
ダブルですか? シングルでは?
windowsは?
@dokimiki
Questioner@mrbonjin さん、回答ありがとうございます!
この方法なのですが、パスに空白があるときに何故か動かなくなってしまうんですよね、、、
脱windowsなので,バッチ,poweshellは御無沙汰で見当違いのレスポンスですみません。windowsはつくずく深いと感じています。
パスに空白があるときに何故か動かなくなってしまうんですよね、、、
少し試してみました。
ファイル名に()
|
パスに空白 | 囲み方 |
---|---|---|
× | × |
"~" or なし |
× | ○ | "~" |
○ | × | ""~"" |
○ | ○ | "~" |
ファイル名に()
がある場合でもパスに空白が含む場合は囲み方を変えないとダメみたいですね😑。
@dokimiki
Questioner
()はファイル名に使えるようです。今日、重複ダウンロードで使っていました。
バッチファイルも使えそうです。
エスケープが必要なのでしょうか?
start "title" "test¥(hoge¥).bat"
因みに、全角と半角の()違いはないですよね。
type "test¥(hoge¥).bat"
dir "test(hoge).bat"
もダメ?
@dokimiki
Questioner回答ありがとうございます!
バックスラッシュ\
でエスケープしようとすると、パス指定と解釈される(test
フォルダの中の(hoge
フォルダの中の).bat
ファイル)ので、キャレット^
でエスケープしてみたのですが、結果は同じでした...
また、回答にある通りdir
やtype
で試すと普通にtest(hoge).bat
で指定できたので、start
の時だけなのかな?と思っています。
もう一丁
バックスラッシュ\\でエスケープ
では?
@dokimiki
Questioner返信ありがとうございます!
start "title" "test\\(hoge\\).bat"
で試したのですが、
The system cannot find the file test\\(hoge\\).bat.
というエラーが吐かれてしまいました...
start に拘らず、call でバッチファイルの実行をお勧めします。
最後に泣き1回!
start はアプリ実行なのでバックスラッシュ\\\\でエスケープかも?
@dokimiki
Questioner返信ありがとうございます!
start に拘らず、call でバッチファイルの実行をお勧めします。
なるほど!callを使えばエラーなくいけたので、その改善も視野に入れようと思います!
最後に泣き1回!
start はアプリ実行なのでバックスラッシュ\\でエスケープかも?
start "title" "test\\\\(hoge\\\\).bat"
で試したのですが、
The system cannot find the file test\\\\(hoge\\\\).bat.
というエラーで終わってしまいました...
根気づよく解決しようとして下さり、ありがとうございます!