【.cmd】 バッチファイルスクリプト %15 【.bat】

2022/09/14(水) 20:04:01.36ID:XL8H98jz
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう

過去スレ
%14 https://mevius.5ch.net/test/read.cgi/tech/1597442426/
%13 https://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 https://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 https://echo.2ch.net/test/read.cgi/tech/1424858999/
%10 https://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 https://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 https://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 https://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 https://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 https://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 https://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 https://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 https://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
https://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
https://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
https://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
https://pc5.2ch.net/test/read.cgi/tech/1040614686/
2025/06/13(金) 23:50:46.94ID:BURDJDsC
ややこしい処理は
呼び出し側で処理したいデータを環境変数にセット
BATは何もせずPythonを呼び出す
にすればすべて解決
2025/06/14(土) 04:23:27.36ID:/OCzCvqy
環境変数てサイズに制限あるんで
大量のデータを渡す場合は普通にファイル渡しがいいかと。
親フォルダに半角スペースを入れてD&Dする方法もあるけど
それでも ab%cd%e.txt みたいのは化けるわけで
%* や %1 は取得時にすでに壊れてるのでどうにもならんわ
730デフォルトの名無しさん
垢版 |
2025/06/14(土) 08:25:15.70ID:yDCgYQHw
なるほど、あれの/Cオプションの引数にはあるけれど、あれがバッチに渡さないわけね
理解したんで あれ起動時のコマンドラインを愚直にパースするとこんな感じか

@echo off
setlocal enableDelayedExpansion

set CMDLINE=!CMDCMDLINE:*cmd" ="!
set Q="
set "S= "

set i=1
set ARG=

:loop
if !CMDLINE:~%i%! == !Q! goto :pause
set c=!CMDLINE:~%i%,1!
if !c! == !Q! (
call :Q
) else if not !c! == !S! (
call :NQ
) else (
set /a i += 1
)
goto :loop

続く
731デフォルトの名無しさん
垢版 |
2025/06/14(土) 08:25:56.73ID:yDCgYQHw
:Q
set ARG=!ARG!!c!
set /a i += 1
set c=!CMDLINE:~%i%,1!
if not !c! == !Q! goto :Q
set ARG=!ARG!!Q!
call :exec
set ARG=
set /a i += 1
goto :eof

:NQ
set ARG=!ARG!!c!
set /a i += 1
set c=!CMDLINE:~%i%,1!
if not !c! == !Q! if not !c! == !S! goto :NQ
set ARG="!ARG!"
call :exec
set ARG=
goto :eof

:exec
echo コマンド !ARG!
goto :eof

:pause
pause
732デフォルトの名無しさん
垢版 |
2025/06/14(土) 08:41:58.61ID:yDCgYQHw
あ、ソート忘れたけどいいよね
文字化けするならforの前にchcp 65001入れておくれ
733デフォルトの名無しさん
垢版 |
2025/06/14(土) 15:14:17.65ID:eF2X+eHO
なにかおかしいと思ってたんだが
これ拡張子が.cmd のバッチファイルを想定してあるんだな
.bat だと無限ループするから変だと思った
734外野
垢版 |
2025/06/14(土) 16:09:26.74ID:/OCzCvqy
>>718 参考に作ってみた。拡張子bat。UNCパスOK。違ってたらごめん

@echo off & set "a=%cmdcmdline:"=%"
set "a=%a:*.bat=%" & call set arg="%%a: %~d1=" "%~d1%%"
echo コマンド %arg:* =% & pause
735デフォルトの名無しさん
垢版 |
2025/06/14(土) 16:43:38.20ID:yDCgYQHw
>>733
そういうことなら set CMDLINE= の行を
set CMDLINE=!CMDCMDLINE:*%~x0" ="!
にすれば .cmd でも .bat でも .Cmd でも .BAT でもおけだな
736デフォルトの名無しさん
垢版 |
2025/06/15(日) 07:57:25.07ID:sG85beXD
>>730-731 に重大な欠陥があった

全角空白 とアンパサンド&echo.この文が単独で表示されたらダメ&pause

というファイル名を試したらダメだった
最後の行のpauseの後にexitを入れてcmd.ехеを終わらせる必要があった

これで >>727 は直せたはずだけどまだあったら指摘してください
なおUNCパス上でも動作に問題なし
737外野
垢版 |
2025/06/15(日) 10:50:38.73ID:ZhGW5ICb
>>718
>>736さんの件で >>734 もexitを追加する必要があるようだ
738デフォルトの名無しさん
垢版 |
2025/06/15(日) 13:37:57.77ID:E4ppjALA
>>736
試したけどファイル名の表示までは問題ないし
意図していない動作には違いないけど
余計な文字とpauseが1回余分に出るだけだね
739外野
垢版 |
2025/06/15(日) 14:22:10.67ID:ZhGW5ICb
pauseだと無害だけどdelだったらヤバいみたいな
740デフォルトの名無しさん
垢版 |
2025/06/16(月) 07:47:57.49ID:FL2oCcdJ
>>734
2行目を

call set "a=%%a:*%~x0 =%%" & call set arg="%%a: %~d1=" "%~d1%%"

にすると .cmd 派としては嬉しい
ついでに %arg% に手を加えなくてもすむ
2025/06/16(月) 12:04:25.57ID:3rn8pxf/
>>740さんの指摘で訂正しました。ありがとう

@echo off & set "a=%cmdcmdline:"=%"
call set "a=%%a:*%~x0 =%%" & call set arg="%%a: %~d1=" "%~d1%%"
echo コマンド %arg%
pause & exit

ちなみに最後の exit が無いと a&b.txt をD&Dしたら
バッチ終了後に既存の b.txt が勝手に開きました
(フルパス空白無しの場合)
2025/06/16(月) 12:25:15.13ID:CXTiNK7e
こんな有様でもDOSの頃は良かったんだけどね
Windowsで規制解除した時にエスケープ決めておけば
2025/06/16(月) 12:56:05.32ID:h70+cne9
昔はD&Dなんて無かったからなあ
744デフォルトの名無しさん
垢版 |
2025/06/16(月) 20:18:24.83ID:FL2oCcdJ
>>741
改良提案したのにごめん、%1に依存してるからNGかもと気づいた
ファイル名でなくディレクトリ名に & があって、パス全体では空白がない場合たぶんNG
2025/06/16(月) 21:12:33.56ID:3rn8pxf/
>>744
それは無いと思います
最初に引用符を全部削除して、%0と%1の間は空白一個です
最後に両側に引用符を付けています
だから引数は全て引用符に囲まれている
746デフォルトの名無しさん
垢版 |
2025/06/16(月) 21:23:14.37ID:FL2oCcdJ
>>730 にもちょっとあれ表記で書いたけど
cmd.ехеがバッチを起動するときにクオートされてない & までしかバッチに渡さないんだよ
だから%1は&の前までしか入らない
747デフォルトの名無しさん
垢版 |
2025/06/16(月) 21:47:39.98ID:FL2oCcdJ
あ、それでもいいのか? ごめん
2025/06/16(月) 22:03:48.18ID:3rn8pxf/
%cmdcmdline%を見ると%0は必ず引用符で囲まれている
%~d1はドライブ名なので最初の2文字だけですね
749デフォルトの名無しさん
垢版 |
2025/06/16(月) 22:12:19.82ID:FL2oCcdJ
空白とパスの頭に一致すればいいんだから%1が&の前まででも十分で
それこそ %~d1 の代わりに %a:~1,2% でもいいわけだ
はやとちりしてすまん
2025/06/16(月) 22:24:14.65ID:3rn8pxf/
あ、今気付いたけどバッチ自体のフルパスに%があると不味いですね
%cd%.bat とかふざけた名前を付けると起動すらしない(笑)
751デフォルトの名無しさん
垢版 |
2025/06/16(月) 22:28:11.29ID:FL2oCcdJ
あ、%~d1 を使う段階ではまだaの頭に " がないから %a:~0,2% か
今日はダメすぎる…
2025/06/16(月) 22:43:47.80ID:rarg6+Me
>>743
過去ログとか見てみると
ドロップして動画変換したいと言ってる人がいたけど
バッチにドロップするという概念がなかったって人もいたわ
D&Dは新しい変化といえるのかな
2025/06/16(月) 23:13:16.42ID:h70+cne9
そもそも昔はマウスが…
2025/06/17(火) 01:09:51.80ID:iFChncGT
>>752
それほとんど使わないし
ファイルのDDで誤ってバッチに突っ込んだりするから
機能停止したい
2025/06/17(火) 01:48:49.47ID:k94ULtHo
Windows11で新しいターミナルになって
せっかく画面に複数ファイルD&Dできるようになったのに
やっぱりスペースのないやつは " 付かない
馬鹿なのか
2025/06/17(火) 16:27:15.74ID:tmeQgGUx
Windowsにはライブラリという機能があってな
複数の場所のファイルをまとめて管理できる
エクスプローラーではデフォルト非表示だけど
有効にすると別のドライブのファイルもドラッグ&ドロップができたり
757>>724
垢版 |
2025/06/17(火) 18:10:43.80ID:+VkCgLWJ
だから >>715 で問題ないと言ってるだろ
いったい何を試行錯誤してんだ
2025/06/17(火) 22:17:05.18ID:tmeQgGUx
解説がなかったからだろ
2025/06/17(火) 23:21:34.27ID:v63kiG1M
>>757
確かに >>715 は UNCパスやドライブ文字が違うファイル
にも対応できてる すごいバッチだと思います
>>718 は行数は少ないけどドライブ文字を流用してるから手抜きではありますね
2025/06/17(火) 23:56:02.26ID:k94ULtHo
>>757
まあ冗長だと思ったからじゃね
2025/06/21(土) 00:15:12.24ID:UJBDQV9Q
>>755
ターミナルのコマンドライン引数は ; が区切り文字らしいので
バッチのパスや引数に ; があると別のタブができちゃう
弱点が増えてよかったね
2025/06/21(土) 09:18:33.42ID:P2MDKzd7
;って元々区切り文字じゃね
2025/06/21(土) 23:59:59.67ID:UJBDQV9Q
バッチのパスに ; があってもCMDは起動できる
ターミナルだと起動できない " で囲んでもダメ
2025/06/22(日) 01:31:14.42ID:GoovCRBR
ああPowerShellの話か
2025/08/01(金) 00:06:46.33ID:8i1j7N2J
Windows11でbatファイルの関連付けが
ターミナルになってる気がするんだけど
前からだったっけ?
2025/08/03(日) 11:49:08.20ID:ggxTCWx/
2年前には入ってたと思うけど
ストアアプリなので既存のユーザーには入らない
767デフォルトの名無しさん
垢版 |
2025/08/03(日) 20:26:28.87ID:kVKBj15M
>>765
まずはターミナルアプリのことから知ってくれ
2025/08/05(火) 07:13:58.34ID:zm6JVwOO
去年にWindows11の新しいPCを買ったけど
最初からbatもwt窓だった
conhostもまだあるみたいやけど
今時どんな時に使うのか知らん
2025/08/06(水) 07:51:31.03ID:eYVzecPY
所詮ストアアプリだからWinPEとかでは動かない
2025/08/06(水) 11:47:35.61ID:jPPdovnJ
wtは文字表示の具合が微妙
たまに表示が乱れるし
2025/08/06(水) 12:14:42.07ID:a7ynNpBm
罫線とか全角判定は相変わらずぐちゃぐちゃよな
2025/08/06(水) 16:14:09.89ID:yOBvuTYH
>>768
設定→システム→開発者向け→ターミナル
で変更はできるがすぐ変わってしまう
773デフォルトの名無しさん
垢版 |
2025/08/06(水) 20:16:09.54ID:DmAnEwRh
>>770-771
俺も今年1月あたりから同様の不具合に悩まされるようになったから、
「ConEmu」 https://conemu.github.io/ , https://github.com/ConEmu/ConEmu/releases
これの最新版である Build 230724 で代用するようになった。

ただし見た目は「Windows Terminal」のほうが好きだから、そのプレビュービルドも以下の2ヶ所で度々チェックしている。
https://github.com/microsoft/terminal/releases , https://apps.microsoft.com/detail/9n8g5rfz9xk3
774デフォルトの名無しさん
垢版 |
2025/08/09(土) 16:20:48.09ID:S08gCjht
>>773
それはターミナルの一部の見た目の話だろ?

ここはターミナルアプリのタブを一度も触ったことがねえやつばかりだな。
2025/08/10(日) 00:24:03.75ID:vHIHeDq6
パスに日本語等の非ASCII文字が入ると、
まともにコマンド編集できなくなる時点で、欠陥品としか言いようがない
776デフォルトの名無しさん
垢版 |
2025/08/10(日) 01:30:45.70ID:swuUdv2c
>>775
そんな日本語対応をMicrosoftがするわけねえだろ。
だいたいコピー&ペーストだってあとからできるようにしてくれたんだぞ?
2025/08/10(日) 01:49:24.39ID:YdGUalHl
一部のマルチバイト文字が混在すると文字の間隔が変
コードページを変えると更に別の文字も化けたりする
一度に大量の行を表示すると最後にゴミが出てくる
タブはあると便利ですが単独のバッチには不要
2025/08/10(日) 18:33:55.19ID:vNE7ex5+
>>777
コードページ、ターミナルアプリ(wt,conemu/cmderなど)、シェル(cmd,pwsh,bashなど)とフォントの相互作用なので完全解が難しいので
自分はシステムコードページ65001にして解空間を最大化している
779デフォルトの名無しさん
垢版 |
2025/08/10(日) 18:50:43.65ID:swuUdv2c
単に老眼の話をしているだけのような気がしてきた
2025/08/11(月) 00:25:05.59ID:CPQs8BLp
同じ文字でconhostは正常なので、原因はcmdや老眼のせいじゃないな。
バッチはconhost使えばいいんじゃね。
ショートカット弄ると設定が戻ってしまうようだけど(笑)
2025/08/11(月) 01:16:02.27ID:eBBeTH67
どうもパス等が長くて表示が折り返されるときにおかしなことになるみたいだな
wtではひし形のはてなマーク、cmdでは中黒に置き換わって、
ウィンドウサイズを変更すると表示されるが、もとに戻すと文字化けが残ったまま
おかしな行が増殖したりする
782デフォルトの名無しさん
垢版 |
2025/08/11(月) 01:21:00.25ID:BPQ8/IeS
文字間は隣の文字によって間隔を調整するのがM365やWindowsの普通になってきたので、その仕様を知らないのかもしれないね。

よくわからないのが、画面表示をそのまま見ようとするところ。

そんな少ないデータならいいけど、画面に表示されたものをそのまま見るというのはやはり一般人の使用だよね?
2025/08/11(月) 01:39:43.41ID:qEWBZoUZ
wt
全角の隣りの文字と重なってる
2025/08/11(月) 01:59:31.66ID:qEWBZoUZ
全角と半角の区別できてない出来の悪いワープロソフトみたいな感じ
2025/08/11(月) 02:12:53.98ID:qEWBZoUZ
[★★★★]
2025/08/11(月) 19:29:30.81ID:jApty1op
>>780
conhostはWindowsTerminalソース(の一部)をOSチームがコンパイルしてるだけなので
デフォルトや設定したフォントの線が疑われる
2025/08/11(月) 20:16:13.52ID:qEWBZoUZ
フォント合わせて>>785をwtに貼り付けてみ
ピッチが半角なので字が重なる
2025/08/11(月) 22:36:38.73ID:CnfwEDHt
>>787
こっちでは重ならない
ttps://i.imgur.com/y7yAZC2.png

Windows Terminal Preview
Version: 1.23.12102.0
設定/Profile/Appearance/Fontface->PlemolJP Console NF
2025/08/11(月) 22:39:30.80ID:CnfwEDHt
書き込めないけど
commanlineはcmd.exeのフルパス
2025/08/12(火) 01:19:57.65ID:MtCSZU3d
%ComSpec%
2025/08/12(火) 09:42:06.08ID:QRF63dtM
>>788
そのフォント (PlemolJP Console NF) は文字が半角だね
例えば MS Gothic だと全角なので重なる
ttps://imgur.com/a/Tu36sdZ
Windows ターミナル (プレビュー)
1.23.12102.0
2025/08/12(火) 11:03:47.27ID:eJzfGzgD
このスレはバッチファイルのスレ
以降ターミナルは出禁な
2025/08/12(火) 11:29:00.44ID:ZbzKnXb5
同じソースで表示が違うのは技術的な制約でもあるのかな。
2025/08/12(火) 11:48:05.08ID:eJzfGzgD
ターミナル関連の話題は以下のスレでどうぞ

Windows Terminal ターミナルスレ
https://mevius.5ch.net/test/read.cgi/tech/1754966849/
795デフォルトの名無しさん
垢版 |
2025/09/02(火) 16:43:43.72ID:i1pFsEW3
start "" cmd
実行でこのコマンドを処理するにはメモリ リソースが足りません。
表示されるんだがこれ何なん
2025/09/02(火) 20:02:10.57ID:lXl1g7Hp
点々はどういう意味なの?
2025/09/02(火) 21:26:41.12ID:BhBAQR8u
start /?
798デフォルトの名無しさん
垢版 |
2025/09/03(水) 09:11:34.79ID:dhexZ22K
昔は"タイトル"で""のパス指定の不具合を避けるためにstartコマンド時は当たり前だったけどな
startコマンドは内部コマンドだっけ、cmdのバージョンで違うのかな
2025/09/03(水) 13:01:11.90ID:LYp0OMy2
9xでは外部コマンド start.exe だったから command.com でも使えた
9xの拡張 cd ... とか復活しないかな
2025/09/03(水) 18:46:15.03ID:KF88luMo
昔はmoveも外部コマンドだったよな
内部コマンドって""で囲うとエラーになる
2025/09/04(木) 10:07:13.83ID:yqF1XoOK
"echo"
ほんとだ、エラーになった
2025/09/04(木) 10:53:05.10ID:tGb8/+Td
そもそも外部コマンドなんてのは無くて、やってるのはプログラムの実行
パスを "" で囲んでもエラーにならないのは不思議ではない
2025/09/04(木) 17:41:24.69ID:rkH6+lpV
>>800
エラーになるとは限らんぞ
同名の exe とか bat があるとそっちが実行される
2025/09/04(木) 17:54:37.97ID:vmz+sxn8
そんなもの作るなよ
2025/09/04(木) 18:44:28.50ID:zhnUgp6m
昔Hello,worldの次にif.exe作って大混乱した思い出
2025/09/07(日) 00:28:25.81ID:g4CPkrpa
795は start.exe というファイルがあったから
という可能性もあるのかな
2025/09/07(日) 00:35:43.76ID:g6X1tCRi
不審に思ったらwhereしろ
2025/09/07(日) 14:31:25.42ID:JaUUy90I
curl.exe がWindows標準で提供されるようになったの知らなくて、
あれ?、なんか違う、なんで?、ってなったの思い出した
2025/09/07(日) 15:29:49.37ID:upkpHxj9
powershellでcurlがエイリアスされてて混乱した人っていっぱいいると思う
2025/09/07(日) 22:46:56.26ID:LU1Xfm1C
busyboxを入れてるけど、
unixコマンドとwindowsコマンドでダブるやつがあるので、
動作が想定外になって、whereで確認することがある。
busyboxへのシンボリックリンクを優先・非優先のディレクトリで区別して、
system32とのパスとの優先度で使い分けてるわ。
2025/09/08(月) 05:52:56.51ID:FPjsYLdB
whereはちゃんとpath, pathext解析して優先度順に複数候補表示してくれるんだよな
ms製にしては気が利いてる
2025/09/08(月) 12:35:07.82ID:3fc6GDUF
内部コマンド名と同じ外部コマンドは除外するか、警告できないと危ない
2025/09/08(月) 14:13:01.30ID:YSLtRFr0
パスの管理ができていればそんなに心配することないよ
Windowsコマンドを優先しておけばまずそういった問題は起きないし

自分はわざわざ入れた外部コマンドをつかいたいから、これを優先してるけど、
バッチファイルを使うときなどに差し支えそうなときは、
> set PATH=C:\WINDOWS\system32;%PATH%
といったように、必要なパスを先頭に追加するようにしてる
2025/10/01(水) 11:35:01.69ID:yaFP74wm
Win11で拡張子.batのファイルを右クリックして編集の時のアプリを変える方法は?
2025/10/01(水) 12:31:58.43ID:L0tsff1s
レジストリのbatfileのedit
2025/10/01(水) 13:02:36.52ID:Yv+8qcgZ
バッチ内で環境変数を使うとおかしくなることがある
なるべくプログラム内で判断する
2025/10/01(水) 13:06:11.54ID:tFujMJWG
>>816
どういう風におかしくなるの?
まったくそんな経験は無いんだが
2025/10/02(木) 01:16:11.74ID:94UvuaYX
というか、バッチファイルの場合、環境変数が使えないと何も出来ないと思うんだけど
2025/10/02(木) 06:03:02.17ID:hmT74Uqz
特に聞きたいこともないようだしほっときゃいい
820デフォルトの名無しさん
垢版 |
2025/10/11(土) 19:44:41.57ID:EgUKqw11
>>814
右クリック時に他のテキストエディタで開くショートカットを追加すればいいだけだろ
2025/10/12(日) 08:31:09.10ID:jZVWBoeK
>>820
そのためのSendToフォルダ利用は、初歩的な基本だよね。

「ファイルを指定して実行」→名前欄に「shell:sendto」と入力して「OK」
またはコマンドプロンプト画面でコマンドライン「start shell:sendto」を実行
2025/10/12(日) 08:38:29.30ID:PP4v40Vb
1工程多いから不満
2025/10/12(日) 08:42:16.86ID:SMvQmH4s
ランチャ・ファイラ側で^e押したら拡張子に応じた適切な編集ツール起動するように設定しとけ
2025/10/12(日) 14:59:50.94ID:3Mp/lKj+
815にあるようにレジストリの値を変更すればいいだろ
HKEY_CLASSES_ROOTの.batを見ると(既定)に「batfile」とある
さらにbatfileを見ると、
shell\edit\commandに「%SystemRoot%\system32\notepad.exe %1」とあるのでここを書き換えればいい
825デフォルトの名無しさん
垢版 |
2025/10/12(日) 23:39:32.94ID:D80drn0C
>>824
Windowsのデフォルト設定がわからなくなるようなやり方を勧めるべきではない。
2025/10/13(月) 03:14:57.22ID:YwWo+azg
shell\他のテキストエディタで開く\command
というキーを作って、そこに他のテキストエディタで開くコマンドを記載すればいい
827デフォルトの名無しさん
垢版 |
2025/10/13(月) 08:12:17.04ID:SftElVT9
>>821
かつてWindowsXPは、
SendToフォルダに46個を超えるショートカット等が入っていても、
SendToフォルダ内のサブフォルダにショートカット等が入っていても、
それら全てをファイル/フォルダの右クリック→「送る」から正常に選択できた。

しかしWindows7~Windows11の「送る」からは、
47個目以降のショートカットやサブフォルダ内のショートカットを選択できない仕様へ退化していた。
右クリックしたファイル/フォルダをSendToフォルダ内のサブフォルダ内へコピーする事なら可能だが…

WindowsXPとWindows7の間に発売されたWindowsVistaでは、どっちの仕様だったのだろうか?
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況