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

■ このスレッドは過去ログ倉庫に格納されています
2018/11/21(水) 14:52:07.84ID:v84I4o+L
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1424858999/
【.cmd】 バッチファイルスクリプト %12 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1489207631/

それ以前の過去スレ
%10 http://peace.2ch.net/test/read.cgi/tech/1374205515/
%9  http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8  http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7  http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6  http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5  http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4  http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3  http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2  http://pc12.2ch.net/test/read.cgi/tech/1197881068/
%1  http://pc11.2ch.net/test/read.cgi/tech/1178281991/
2019/06/28(金) 04:47:52.79ID:+wrrcV+u
だからキモイって
創価学会員並みにキモイ
狂信者の啓蒙活動と同じ
こんなところではなくおまえの会社でやってろ
2019/06/28(金) 07:00:46.98ID:n6DQpX/4
しかしWin環境はテキストのBOMマーク推奨なのに、for /fで読み出しするとBOMをわざわざ表示するのバカだよな。
過去の検討不足がまんま固定してる
2019/06/28(金) 07:22:18.87ID:utv5/5Cv
面倒くさい奴が一人いるな
何を書こうが勝手だが、ここはお前の職場じゃないぞ
2019/06/28(金) 07:41:24.76ID:utv5/5Cv
>>286
BOM付きのファイルは一行目を空行にしている。
バッチに限らず後で色々トラブルあるから
2019/06/28(金) 23:56:34.27ID:b/1HFBuK
>>284
> 「この言語や環境はどこまで想定しているのかを調べる」

それはかなり大変なので、2、3回やってもうまくいかなかったら別の言語に乗り換えるという便法が別の解決策
2019/06/29(土) 01:27:00.86ID:LLveF6E3
だから何?
2019/07/04(木) 08:37:48.34ID:yoyjVAJo
Win10 v1903
メモ帳で新規作成したテキストがtypeで化ける
もはやSJISは既定値ではない
cmdは旧態依然
2019/07/04(木) 17:34:32.60ID:9mSpzETW
まあ chcpすりゃいいだけだし
2019/07/04(木) 18:30:22.69ID:wRHHZz1p
日本語レイアウトが崩れるからだめ
2019/07/04(木) 21:43:07.98ID:y34WtIiv
以前は実行中のバッチファイルを編集保存、行を追加したり減らしたり、すると
エラーになってたと思うんだけど、何かエラーにならなくなった?
Windows10 1903 からの変更?
たまたまなのかな?
2019/07/04(木) 21:57:41.98ID:y34WtIiv
>>294 自己レスです
すいません、気のせいでした、たまたま起きないように見えただけで
普通にエラーが起きました
2019/07/05(金) 00:07:51.66ID:BL7Y7b8G
実行中の行やその直後の行を追加したり削ったりすれば、
同じ処理が繰り返しになったり、必要な処理がスキップされる形になって
挙動がおかしくなるな
2019/07/05(金) 20:30:36.68ID:Osj0+Img
バッチファイルスクリプトって働き方改革になるの?
2019/07/05(金) 21:19:11.24ID:zBRgAgd8
Powershellが10年経って育った今からバッチを学ぶ意義は薄い
2019/07/06(土) 08:00:17.95ID:NPkITZNc
>>296
全部メモリーに読み込んでしまうとかファイルロック掛けるとかすれば良いのにね
2019/07/06(土) 08:01:28.83ID:NPkITZNc
>>298
PowerShellは色々トリッキーなところあるからなぁ
もう少し普通のスクリプト言語で良かったのに…
2019/07/06(土) 10:23:31.70ID:OJAqpfME
>>299
インタープリターではなくなる
2019/07/06(土) 10:31:09.33ID:SnF6bIfm
働き方改革?
2019/07/06(土) 10:53:24.31ID:NPkITZNc
>>301
意味わからん…
2019/07/06(土) 10:59:51.87ID:OJAqpfME
>>303
そもインタープリターは行単位でのみ読み込み解釈実行する仕様。

行内容を変えても反映されないんじゃインタープリターにならない
2019/07/06(土) 11:04:50.99ID:NPkITZNc
>>304
> そもインタープリターは行単位でのみ読み込み解釈実行する仕様。
逐次解釈は別にメモリーからでもいいだろ

> 行内容を変えても反映されないんじゃインタープリターにならない
そもそも行内容変えたらおかしくなるって話なんだがw
2019/07/06(土) 11:12:26.69ID:OJAqpfME
>>305
1の行の処理が終わってから2の行を読み込み解釈するのがインタープリター
メモリ先に読み込んだんじゃ意味ないの。
行内容変えてバグ混入させてバグったなら仕様通り
2019/07/06(土) 11:45:00.41ID:ddaI9LPq
ディスクキャッシュなしだとクッソ遅いんだよな
2019/07/06(土) 11:54:17.26ID:NPkITZNc
>>306
読み込み元がファイルかメモリーかなんて関係ないだろ
昔のBASICはインタープリターじゃねーのかよw

> 行内容変えてバグ混入させてバグったなら仕様通り
バカすぎる…
2019/07/06(土) 12:11:18.65ID:OJAqpfME
本来の仕様・特性を理解しておらず。
メモリに全部読み込んでファイルロックかけちゃえばとか
どっちがアホなんだか
>>296 のようなことをしなければいいだけ
2019/07/06(土) 12:13:38.81ID:NPkITZNc
> メモリに全部読み込んでファイルロックかけちゃえばとか
日本語の理解力もないのかよ…
2019/07/06(土) 12:20:37.36ID:OJAqpfME
仕様通りの動作に「仕様を変えるべきだ」というなら「どうぞ、自分で制作しておやりなさい」としか
ディスク上のプロフラムファイルを処理しろと指示しておいて、実行中にプログラムファイル弄る方がバカでしょ?
2019/07/06(土) 12:45:33.27ID:SnF6bIfm
横から失礼します。
例えば、バッチじゃないけど、
中間コード生成するのは、
インタプリタじゃないの?
2019/07/06(土) 12:53:22.08ID:NPkITZNc
> ディスク上のプロフラムファイルを処理しろと指示しておいて、実行中にプログラムファイル弄る方がバカでしょ?
うんうん、
> 行内容を変えても反映されないんじゃインタープリターにならない
とか言ってたバカに言ってやれよww
2019/07/06(土) 13:25:39.62ID:OJAqpfME
>>313
絶望的に頭悪いな
行内容を変えても反映されないんじゃインタープリターにならない
未実行の行内容をにバグ混入させればバグるのは仕様通り。インタープリタだから。
>>299だと行内容変えても帰る前の動作を続けるかファイルが変えられなくなる。
2019/07/06(土) 13:31:06.82ID:NPkITZNc
> 実行中にプログラムファイル弄る方がバカでしょ?
なのに内容変えたら反映しろとか頭おかしいw
もう自分が何を指摘されてるかもわかってないんだろうな
2019/07/06(土) 14:13:50.98ID:OJAqpfME
動作がバグらないように行内容をいじる方法もあるからなー
バカには気づけないのかもな
2019/07/06(土) 14:26:59.31ID:NPkITZNc
しれっと話し変えててウケる~w
2019/07/06(土) 14:27:43.94ID:ZOT0kh7c
title Win8.1のcmdはPowershellを呼び出すとタイトルが変わってしまう
timeout 5
powershell sleep 5

Powershellを呼び出してもタイトルが変化しない方法ありませんか?
2019/07/06(土) 15:18:42.27ID:Mj6xLmMK
なんか色々とっちらかってるけど

入力に対して逐次実行を行い内容を出力するための実行エンジンがインタプリタ
まとめて実行する方法がバッチ
バッチを書くための言語の種類がスクリプト
なのでインタプリタ上で動くスクリプトで記述されたバッチが多いのは事実だけど
バッチスクリプトだからって必ずしもインタプリタ上で動作するわけではない

あまり言われることはないけどC言語なんかも手順をまとめて記述するという
意味ではバッチ
そのバッチを効率よく動かすためにハードウェアにネイティブなコードなどに
変換するのがコンパイラ

なので>>312が言うような中間コードを生成するのは処理的にはバッチのコンパイル
C#がやJAVAが典型的だけどバッチとして書かれたスクリプトをコンパイラで
中間コードに変換して.netエンジンとかJAVAエンジンで動かすけど、これらの
エンジンはインタプリタとして作成されているので直接コマンドを逐次実行する
ことも出来るようになっている

インタプリタが何を持って逐次実行の基準にしている(一般的にテキスト入力な
インタプリタはキャリッジリターンだけど)かはインタプリタの実装しだいなので、
バッチの内容がバッチ実行中に書き換わった際に動作が変わる/変わらないって
いうのは実行エンジンがインタプリタであるとかないとか言うのと関係ない

Linuxのシェルスクリプトはshっていうインタプリタで動いてるけど、バッチ
スクリプトは「'(バッククォート)」で囲まれた文字列はコマンドとして実行でき、
文字列は動的に書き換えできるのでバッチファイルを書き換えながらインタプリタで
実行できるバッチスクリプトって言うものも存在する

逆にC#みたいな中間コードを実行するインタプリタシステムは一般的にまとめて
コードを読み込んで実行するので、実行中にファイルを書き換えても読み込まれた
コードが変わるわけではないのでそのまま実行できる
2019/07/06(土) 15:32:56.64ID:Es9FYwgG
バカの長文ウザい
2019/07/06(土) 16:47:17.04ID:edODQM35
理解できないときの一行レス乙
2019/07/06(土) 17:04:06.81ID:l+THgL+v
>>321
多分、その通り。
>>320は、自分以外みんなバカというセンスのかたなのでしょう。
 (320著『自分以外みんなバカ』)
323312
垢版 |
2019/07/06(土) 17:45:47.25ID:SnF6bIfm
>>319
レスありがとうございました。
2019/07/06(土) 18:13:58.11ID:yCp3HJnn
>>321-322
そりゃ、
> あまり言われることはないけどC言語なんかも手順をまとめて記述するという意味ではバッチ
みたいなアホなことを言う奴を理解しろと言われてもなぁw
2019/07/06(土) 18:30:06.42ID:edODQM35
アホとバカは意味がちゃうで
2019/07/07(日) 00:42:47.20ID:YVv/+K6C
貴重なメモリをバッチなんかに使われたくない
ましてやファイルハンドル or FCBを消費するなんて考えたくもない
2019/07/07(日) 17:57:51.72ID:sK6+FwWI
書いたスクリプトをそのままCMD画面に貼り付けて実行できるのが素晴らしすぎる
これもインタープリタゆえのメリット
2019/07/17(水) 22:50:53.76ID:2IS3Ei7C
指定したURLをIEで開くバッチファイルを作りたいのですが、以下のいずれの書き方でもうまく起動しませんでした。
どのように記述すれば良いのでしょうか?


start "" """C:\Program Files\internet explorer\iexplore.exe"" https://www.yahoo.co.jp/";

start "" "'C:\Program Files\internet explorer\iexplore.exe' https://www.yahoo.co.jp/";

start 'C:\Program Files\internet explorer\iexplore.exe' https://www.yahoo.co.jp/

cmd /c start "" """C:\Program Files\internet explorer\iexplore.exe"" https://www.yahoo.co.jp/";

cmd /c start "" "'C:\Program Files\internet explorer\iexplore.exe' https://www.yahoo.co.jp/";

cmd /c start 'C:\Program Files\internet explorer\iexplore.exe' https://www.yahoo.co.jp/
2019/07/17(水) 22:52:08.85ID:2IS3Ei7C
↑書き忘れましたが、IEを起動したらバッチファイル自体はすぐに終了して欲しいです。
2019/07/17(水) 22:58:10.74ID:t7LU6uHU
これで普通に開けたけど

start "" "C:\Program Files\internet explorer\iexplore.exe" "https://www.yahoo.co.jp/";
exit
2019/07/17(水) 23:41:41.05ID:2IS3Ei7C
>>330
助かりました。ありがとうございます><
2019/07/22(月) 20:50:29.11ID:64jFVFKi
質問です
chcp を設定後に日本語テキストファイルを type しても
なぜか数行ごとに部分的に文字化けします
正しく表示させる方法はありますか
ファイルをコード変換するしかないでしょうか

20932 (EUC-JP)
50220 (JIS)
65000 (UTF-7)
65001 (UTF-8)
2019/07/23(火) 00:29:27.63ID:NmYCCAI2
正常に表示できる部分もあるのか?
コマンドプロンプトのフォント設定はレジストリをいじればできるようだが
chcp したとしても
各コードに合わせた日本語フォントがないと思う

ファイルをコード変換には nkf などを利用すればよい
もちろんcp932に変換できない文字がありえる点には注意
2019/07/23(火) 01:19:58.32ID:dqAnc0cb
横から失礼。多分フォントの問題じゃないなあ。再現してみる。

@echo off
del a.txt
set "a=ああああああああああああああああああああああああああああああああああ"
chcp 65001
for /l %%i in (1,1,10) do echo %a% >> a.txt
start notepad a.txt
type a.txt
pause
goto :eof
2019/07/23(火) 13:00:19.24ID:dqAnc0cb
>>332 typeの代替えバッチ

@echo off & set /a b=1
for /f "delims=:" %%i in ('type "%~1" ^| findstr /n /r /c:"^$"') do call :x %%i
set /a a%b%=0,b=1,c=1
for /f delims^=^ eol^= %%i in ('type "%~1"') do call :y & echo.%%i
goto :eof
:x
set /a a%b%=%1,b-=-1 & exit /b
:y
set /a d=a%b%
set /a c-=-1 & if %c%==%d% echo.& set /a b-=-1 & goto y

動作文字コードは>>332の4種類とcp932とBOM付UTF-16LE
内部コマンドのtypeの文字化けの原因は不明
得体の知れないバッチが嫌ならnkfでどうぞ
336332
垢版 |
2019/07/23(火) 19:39:52.27ID:3qcsVE62
みなさんレスありがとうございました
>>335 のバッチを実行したら正しく表示されました
なにか不具合があれば nkf で変換します
2019/08/05(月) 14:25:26.72ID:KhkfuoHG
@ECHO OFF
FOR /L %%I IN (1,1,3) DO (
:ラベルの次に空行だと死ぬようだ

ECHO %%I
)
PAUSE
2019/08/05(月) 23:40:50.69ID:uv4O1i4q
>>337
FOR コマンドの中に単純にラベルを入れるとそうなる。
諦めろ。そういう腐った仕様だ。
2019/08/09(金) 07:12:05.83ID:e+IGCa9q
MSはpowershell作っといてcmdも生殺しのまま
2019/08/09(金) 07:24:42.21ID:i8+nUA9v
後方互換レガシー用だから
2019/08/10(土) 16:26:14.51ID:O+qo9jJ2
・ループはなるべくラベルgotoで作る
・処理はまとめてCALLで呼び出す
と変な仕様に悩まされなくて済む
2019/08/12(月) 01:15:40.10ID:qDWW1IB8
>>341
つーか >>337 は FOR コマンドの中に「REM コマンドの代わりとして」ラベルを入れたっぽいよね。

REM コマンドは確かにダサい。クソみたいにダサい。
が、完全な代替手段はないことが今日までの先人たちの研究で分かっている。
「○○な場合正しく動かない」というケースから逃れられない。
素直に REM しとけ、って話なのさ。
2019/08/12(月) 01:43:33.99ID:asx4qCxc
>>341
そうですね
バッチ作成30年の知恵

バッチ前言語というのをつくり、バッチに変換するツールがあるといいのに
2019/08/14(水) 08:17:57.87ID:2+7gdzMY
なぜエラー?
@echo off
for /l %%i in (1,1,3) do (^

echo %%i
)
pause
2019/08/14(水) 12:07:08.56ID:tEu06J9P
空白行があるのがまずいのです。
2019/08/15(木) 07:26:44.38ID:mKbuBo/x
echo onで見るとechoが消えてる
for /L %i in (1 1 3) do (%i)
2019/08/15(木) 07:36:02.85ID:mKbuBo/x
今、気付いたけど
for/Lのカウントの区切り文字は半角スペースでもいいんだな
2019/08/15(木) 12:44:36.23ID:ALsBqyPd
なんで"("のあとでエスケープしてるんだ?
2019/08/15(木) 18:55:50.85ID:8DKeAJZl
>>348
エスケープすると長い記述を改行分割できる。
下記なら動くのではと想像
@echo off
for /l %%i in (1,1,3) do (^
^
echo %%i
)
pause
2019/08/15(木) 18:58:32.85ID:8DKeAJZl
こうかも。
違いはechoの前の半角スペースの有無
@echo off
for /l %%i in (1,1,3) do (^
^
echo %%i
)
pause
2019/08/15(木) 20:14:09.75ID:bAdklReO
>>350
横からだが、だとしても ”(” の直後には不要でしょう
わざわざ地雷踏みにいってるとしか思えない
2019/08/15(木) 20:20:13.66ID:hL4sD0l+
>>349
そういうことじゃなく、
そんなところにエスケープさえしなければ動く、ということ
空改行があっても同じ

@echo off
for /l %%i in (1,1,3) do (

echo %%i
)
pause


そもそも、エスケープが必要なのは以下のような書き方の場合

@echo off
for /l %%i in (1,1,3) ^
do (

echo %%i
)
pause
2019/08/16(金) 13:12:21.88ID:nbkgz595
元々^が要らんのは分かるが
何で2行下のechoが消えるんだ?
2019/08/16(金) 19:53:07.91ID:tgbth6lv
何が正解か良く分からないけど「echo」が消えているのではなく
「echo %%i」が実行された結果「%i」って文字列が出力されて
いるんじゃないかな
2019/08/17(土) 03:04:11.02ID:loMKkBUO
うん、メッセージを出したかったら、
echo [メッセ−ジ文]
だよね。
2019/08/17(土) 07:25:02.72ID:u1p0gnkJ
>>346を見ろ
357332
垢版 |
2019/08/17(土) 18:15:26.70ID:etNorZr1
はろー♪
@echo off
(^

rem echo Hello, World!)
pause
2019/08/17(土) 21:41:43.17ID:nWccZbx0
>>357
cmd のパーサーが馬鹿なだけ。
そういうトリッキーな小賢しい書き方を探しても誰も幸せになれない。
2019/08/17(土) 23:29:25.24ID:u1p0gnkJ
>>357
そういうのはもういいから
2019/08/20(火) 20:01:18.85ID:S2+8M2EA
C:\Users\hogehoge\AppData\Local\Microsoft\Windows\InetCache

にIEのキャッシュファイルがあって、コマンドで削除したいのですが

del /f /q C:\Users\hogehoge\AppData\Local\Microsoft\Windows\InetCache\*

を管理者権限のコマンドプロンプトで実行しても消えてくれません。
どうすれば消せるのでしょうか?
環境はWin10です。

ちなみに上記の「del /f /q」を「dir」に変えて実行すると、何もファイルが表示されませんでした。
エクスプローラでは表示されるのに…
2019/08/20(火) 20:06:19.31ID:WpfDQiIq
まずは対象ファイルの属性を確認かな
2019/08/20(火) 20:39:45.13ID:WpfDQiIq
ここに詳しく書いてある
https://freesoft.tvbok.com/web/ie/ie11ie10webcache.html
2019/08/30(金) 17:07:15.01ID:C82bQLaF
任意のテキストファイルの各行(1〜N)を、
変数のARRAY[1〜N]にそのまま代入できますか?
テキストは空行あり、文字化けは無しで。
2019/08/30(金) 18:13:13.64ID:C82bQLaF
すみません
N行は指定じゃなくて全行です
2019/08/30(金) 19:43:28.54ID:hATE1ff9
>>363 確認の表示が不要なら消してくれ
 
@echo off & set /A N=0 & if "%~1"==":GETS" goto GETS
for /F "delims=" %%I in ('call "%~0" ":GETS" "%~1"') do (
set /A N+=1 & set %%I)
setlocal enabledelayedexpansion
for /L %%I in (1,1,%N%) do echo ARRAY[%%I]=!ARRAY[%%I]!
goto :eof
 
:GETS
set o="tokens=* delims=0123456789"
for /F %o% %%I in ('findstr /N "^" "%~2"') do (
set /A N+=1 & set s=%%I
setlocal enabledelayedexpansion
echo ARRAY[!N!]=!s:~1!
endlocal)
2019/08/30(金) 20:46:06.08ID:C82bQLaF
>>365
ありがとうございました
シフトJISで動作しました
2019/08/31(土) 00:24:30.62ID:dLbvCDhA
発見
call は遅い
自バッチ内であっても繰り返しの中では使わないほうがよい
2019/08/31(土) 02:06:06.88ID:KhyCGx+x
それは分かる
何かいい方法が有ったら書いてくれ
2019/08/31(土) 07:34:22.10ID:KhyCGx+x
ループの中では、call setも遅いな
call先はバッチが基本なので
%path%のフォルダ内にset.batが存在しないか
ループの中で毎回、無駄に検索して時間のロスに
2019/08/31(土) 13:05:56.96ID:4qIvp+ND
フルパスか相対パスで書けばいいのに
2019/08/31(土) 15:06:36.69ID:ny+pXiR9
クリーンに再実装しようとしてもうまく行かないし、Windows Terminalのオプソ化に期待
2019/08/31(土) 21:47:05.78ID:KhyCGx+x
内部コマンドsetにフルパス?
2019/09/17(火) 21:00:42.57ID:Syn6UaDZ
ポータブルデバイスにフォルダ移動したいのですがどのコマンドを使えばよろしいのでしょうか?

宜しくお願いします。
2019/09/18(水) 07:27:23.31ID:zCU+H1xg
robocopy
2019/09/18(水) 22:10:15.94ID:zS9nLp3S
>>374
回答ありがとございます。
試してみましたがうまくいきませんでした。
2019/09/19(木) 17:48:14.75ID:W0BHkkEI
そのポータブルデバイスとやらのスレで聞け
2019/09/19(木) 19:33:15.60ID:UaiZGsoz
>>373
MTP接続しているデバイスにbatでフォルダ移動したいということ?
2019/09/19(木) 21:49:07.77ID:oZTJ7ty8
>>377
MTP接続しているデバイスの端末(スマホ)のフォルダをCドライブにコピーしたいのです。

何度もありがとございます。
2019/09/20(金) 18:54:32.90ID:YblgUZDU
>>378
MTPにWindowsからアクセスする場合にはWDP (Windows Portable Device)という
仕組みを使ってアクセスする必要があるらしいのでPowerShellとかVBSみたいな
COMオブジェクトに対応しているスクリプト言語を使うかプログラミングしないと
無理みたいだけど
2019/09/20(金) 20:53:45.43ID:C2+cwByF
>>379
なるほどコマンドだけでは出来ないのですね。ありがとうございました。
2019/09/20(金) 21:22:16.17ID:CafmkPOq
mtpじゃなくftp使えばいいんじゃない
2019/09/20(金) 23:15:32.97ID:Va/jwPXC
スレチだけど、横から失礼。
今USBで繋いだスマホのファイルをPCのexplorerで見てたら、
どうしても表示されないファイルが一部あるんだよ。
表示を更新してもダメだ。何なんだろ、これ。
スマホ側でzipに圧縮したら転送できたんだが。
2019/09/21(土) 09:52:34.32ID:obXFPJy6
>>382
MTPは本来画像とか音声とか映像ファイルを共有するための規格なんだけど
それでは不便なので実装者が拡張して他のファイルも見えるようにしているらしい

でWindowsのexplorerで削除できないファイルってのは何種類かあるけど表示
できないってのは覚えがないのでスマホ側の実装の問題じゃないかな
2019/09/21(土) 11:24:33.96ID:aqL81KxG
>>383
スマホのandroidがおかしいのかも
explorerでコピペしたら
全数処理できてるか要確認ですね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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