拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1424858999/
それ以前の過去スレ
%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/
探検
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/03/11(土) 13:47:11.66ID:2LSSeyH1
797デフォルトの名無しさん
2018/08/26(日) 12:04:17.20ID:Kp4FoNKX なんか初歩的やなあ。
遅延展開だから最初にsetlocal enabledelayedexpansion
を書かいて&で繋げて次のコマンドを書ける。ただし%%は%に置き換える必要がある
遅延展開だから最初にsetlocal enabledelayedexpansion
を書かいて&で繋げて次のコマンドを書ける。ただし%%は%に置き換える必要がある
798デフォルトの名無しさん
2018/08/26(日) 13:07:23.92ID:ZzrAYlbi やってみればわかるけどコマンドプロンプトで
setlocal enabledelayedexpansionやっても効果ないよ。
cmd /v:onで遅延展開有効にしたコマンドプロンプト起動しないとだめ。
setlocal enabledelayedexpansionやっても効果ないよ。
cmd /v:onで遅延展開有効にしたコマンドプロンプト起動しないとだめ。
799デフォルトの名無しさん
2018/08/26(日) 14:01:30.30ID:Kp4FoNKX ああほんとだ。こんな感じにすればいいのね
cmd /v:on
set str=hoge &for /l %a in (0,2,10) do ( set str=!str!%a ) & echo !str!
cmd /v:on
set str=hoge &for /l %a in (0,2,10) do ( set str=!str!%a ) & echo !str!
800デフォルトの名無しさん
2018/08/26(日) 15:49:42.37ID:/S+ZLweZ 800!
このシリーズも、12まで言っても、新発見があるのね。
前(バッチファイルプログラミング質問スレ )のも含むと、すでに15スレ目か。
このシリーズも、12まで言っても、新発見があるのね。
前(バッチファイルプログラミング質問スレ )のも含むと、すでに15スレ目か。
801デフォルトの名無しさん
2018/08/26(日) 18:22:30.74ID:Kp4FoNKX 自分はこのスレになってから来たからまだ新参、過去スレ読まなきゃ
802デフォルトの名無しさん
2018/08/26(日) 19:11:50.77ID:qpELtL6e >>798
> バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS
> 引数は /V:ON または /V:OFF スイッチよりも優先されます。
> 詳細については SETLOCAL /? を参照してください。
じゃない??
cmd /v:on なんて使ったことがない…
> バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS
> 引数は /V:ON または /V:OFF スイッチよりも優先されます。
> 詳細については SETLOCAL /? を参照してください。
じゃない??
cmd /v:on なんて使ったことがない…
803デフォルトの名無しさん
2018/08/26(日) 19:12:48.89ID:qpELtL6e あ、もしかしてバッチとコマンドプロンプトでは動きが違うってこと??
804796
2018/08/26(日) 19:26:46.75ID:PFw0pViP805デフォルトの名無しさん
2018/08/26(日) 19:58:30.97ID:Kp4FoNKX ググらずにコマンドプロンプト開いて試せばいいんだよ
・遅延展開を使うために事前に cmd /v:on[Enter]する
・バッチのfor文は%%を%1つに置き換えてから貼る。
・do ループの処理は複数行で書けないので、( 処理 & 処理 & 処理 )と書く。(の後と)の前の半角スペースが大事
とりあえずそんなとこ。
・遅延展開を使うために事前に cmd /v:on[Enter]する
・バッチのfor文は%%を%1つに置き換えてから貼る。
・do ループの処理は複数行で書けないので、( 処理 & 処理 & 処理 )と書く。(の後と)の前の半角スペースが大事
とりあえずそんなとこ。
806デフォルトの名無しさん
2018/08/26(日) 21:34:45.08ID:ZzrAYlbi コマンドプロンプトでもdo の後に括弧つけて改行すれば
More?ってプロンプト出て普通に複数行書ける
> for %x in (hoge) do (
More?
More?ってプロンプト出て普通に複数行書ける
> for %x in (hoge) do (
More?
807デフォルトの名無しさん
2018/08/27(月) 01:51:11.66ID:Sgkp88za SETLOCALに ENABLEEXTENSIONSなどがあったのか、知らなかったなあ
setlocalcのようなものが必要なこと自体cmdの設計ミスなんだけど、ますます複雑化、恥の上塗り路線
setlocalcのようなものが必要なこと自体cmdの設計ミスなんだけど、ますます複雑化、恥の上塗り路線
808デフォルトの名無しさん
2018/08/27(月) 06:43:21.31ID:EbTlBfxg >>795
有難うございます!
有難うございます!
809デフォルトの名無しさん
2018/08/27(月) 07:33:20.85ID:4tgtf9in >>808
for %%i in (.) do set PARENT_DIR=%%~dpi
for %%i in (.) do set PARENT_DIR=%%~dpi
810デフォルトの名無しさん
2018/08/30(木) 08:39:19.94ID:cyhHU1Jz forとか使わなくても…
%cd:\=&set parent=%
って知られてないんかな?
%cd:\=&set parent=%
って知られてないんかな?
811デフォルトの名無しさん
2018/08/30(木) 08:40:17.66ID:cyhHU1Jz すまん勘違いした
812デフォルトの名無しさん
2018/08/30(木) 08:54:21.79ID:eE05Kd4s for %%i in (..) do set PARENT_DIR=%%~fi
813デフォルトの名無しさん
2018/09/11(火) 15:07:38.99ID:7Sv68F+V テキストを type でユニコードに変換できるけど
cmd /u /c type sjis.txt > uni.txt
これを逆にシフトjisに戻す方法はありますか?
cmd /u /c type sjis.txt > uni.txt
これを逆にシフトjisに戻す方法はありますか?
814デフォルトの名無しさん
2018/09/11(火) 15:30:06.35ID:7Sv68F+V cmd /a /c more < uni.txt > sjis2.txt
815デフォルトの名無しさん
2018/09/11(火) 15:30:11.03ID:zUlaXCLj nkf -s uni,txt > sj.txt
816デフォルトの名無しさん
2018/09/11(火) 15:32:51.33ID:7Sv68F+V817デフォルトの名無しさん
2018/09/11(火) 16:55:41.49ID:7Sv68F+V cmd /u /c type s.txt > u.txt
set /p x="" < nul > bom.txt
copy /b bom.txt + u.txt u2.txt
type u2.txt > s2.txt
comp s.txt s2.txt
set /p x="" < nul > bom.txt
copy /b bom.txt + u.txt u2.txt
type u2.txt > s2.txt
comp s.txt s2.txt
818デフォルトの名無しさん
2018/09/11(火) 21:05:10.34ID:hTiklz9U nkf 推しは死ね。
それはなんでもアリじゃねぇか。
とりあえず、ここは「(デフォでは)全Windows環境で動く」が前提にしろや。
>>817
それが何故上手く動くのかの解説をする義務が君にはあると思う。
「ここのコマンドでSJIS変換が入ってます」くらいの。
それはなんでもアリじゃねぇか。
とりあえず、ここは「(デフォでは)全Windows環境で動く」が前提にしろや。
>>817
それが何故上手く動くのかの解説をする義務が君にはあると思う。
「ここのコマンドでSJIS変換が入ってます」くらいの。
819デフォルトの名無しさん
2018/09/11(火) 21:54:57.13ID:7Sv68F+V 上記の2バイトのBOMはユニコードのテキストである印です。
例えばメモ帳で空のユニコードのファイルを作成したらbom.txtと同じになる。
typeコマンドはBOMを参照して入力コードを決定し、
コードページを参照して出力コードを決定する。
例えばメモ帳で空のユニコードのファイルを作成したらbom.txtと同じになる。
typeコマンドはBOMを参照して入力コードを決定し、
コードページを参照して出力コードを決定する。
820デフォルトの名無しさん
2018/09/11(火) 23:18:52.19ID:hTiklz9U821デフォルトの名無しさん
2018/09/12(水) 08:46:42.71ID:wnqO0p2C もの凄く泥臭いな
822デフォルトの名無しさん
2018/09/12(水) 12:32:37.36ID:iSRyeJ5N 応用すれば色々と変換できる
ソースが EUC-JP の例
set /p BOM="" < nul > UTF-16LE.txt
chcp 20932
cmd /u /c type EUC-JP.txt >> UTF-16LE.txt
chcp 65000
type UTF-16LE.txt > UTF-7.txt
chcp 65001
type UTF-16LE.txt > UTF-8.txt
chcp 50222
type UTF-16LE.txt > JIS.txt
chcp 932
type UTF-16LE.txt > SJIS.txt
泥臭いのが好きな人はどうぞ
改行コードは知らんw
ソースが EUC-JP の例
set /p BOM="" < nul > UTF-16LE.txt
chcp 20932
cmd /u /c type EUC-JP.txt >> UTF-16LE.txt
chcp 65000
type UTF-16LE.txt > UTF-7.txt
chcp 65001
type UTF-16LE.txt > UTF-8.txt
chcp 50222
type UTF-16LE.txt > JIS.txt
chcp 932
type UTF-16LE.txt > SJIS.txt
泥臭いのが好きな人はどうぞ
改行コードは知らんw
823デフォルトの名無しさん
2018/09/12(水) 21:20:08.66ID:EE8mLPPB 本筋とは関係ないんだが、『2バイトのBOM』のあるレス >>817,822 読み込むと
しばらくしてと JaneStyle(3.75) が落ちる
dat から該当部分『2バイトのBOM』を削除すると問題なくなる
今どき JaneStyle 3.75 使ってる人はほぼ居ないと思うけど参考まで
オマ環だったらゴメンナサイ
しばらくしてと JaneStyle(3.75) が落ちる
dat から該当部分『2バイトのBOM』を削除すると問題なくなる
今どき JaneStyle 3.75 使ってる人はほぼ居ないと思うけど参考まで
オマ環だったらゴメンナサイ
824デフォルトの名無しさん
2018/09/12(水) 22:07:08.64ID:iSRyeJ5N 俺の環境は Win10 で
Jane Style Version 4.00
不具合無い
Jane Style Version 4.00
不具合無い
825デフォルトの名無しさん
2018/09/12(水) 22:49:28.45ID:gLwHpn+Y >>823
専ブラをバージョンアップしない理由は何?
専ブラをバージョンアップしない理由は何?
826デフォルトの名無しさん
2018/09/12(水) 23:08:31.59ID:alzyNvAF >>823
3.75でこのスレを串(API)で読み込んで10分ほど放置、その後新着チェックや別スレを見ても別に落ちたりしないんだが
(なお、HTMLで読み込むとBOM部分が削除されちゃったんで意味なし)
3.75でこのスレを串(API)で読み込んで10分ほど放置、その後新着チェックや別スレを見ても別に落ちたりしないんだが
(なお、HTMLで読み込むとBOM部分が削除されちゃったんで意味なし)
827デフォルトの名無しさん
2018/09/12(水) 23:09:04.85ID:iSRyeJ5N どうやら >>822 のBOM="" の引用符の中は
Internet Explorer 11 ではコピペ出来ないようだ
該当の行の Base64 は
c2V0IC9wIEJPTT0i//4iIDwgbnVsID4gVVRGLTE2TEUudHh0DQo=
Internet Explorer 11 ではコピペ出来ないようだ
該当の行の Base64 は
c2V0IC9wIEJPTT0i//4iIDwgbnVsID4gVVRGLTE2TEUudHh0DQo=
828デフォルトの名無しさん
2018/09/12(水) 23:48:42.33ID:/kdY+KWC830デフォルトの名無しさん
2018/09/13(木) 00:07:45.35ID:t/mtX2p/ なお10回程スクロール(キー、マウスホィール、スクロールバー)してみたんだけど
831デフォルトの名無しさん
2018/09/13(木) 00:47:39.75ID:vvLnBjaZ MacTypeは関係ないのでは?
4.0でなんともないし
4.0でなんともないし
832デフォルトの名無しさん
2018/09/13(木) 00:49:13.24ID:1CXXM/l/ 確認ありがとうございます
限定的な環境依存のいわゆる、オマ環、と分かっただけでも収穫です
流石にスレチと思うのでこの辺で
限定的な環境依存のいわゆる、オマ環、と分かっただけでも収穫です
流石にスレチと思うのでこの辺で
833デフォルトの名無しさん
2018/09/14(金) 07:13:36.14ID:FIpeWt57834デフォルトの名無しさん
2018/09/14(金) 13:56:39.97ID:Ah8o0gi1835デフォルトの名無しさん
2018/09/14(金) 16:33:12.67ID:UfVRD/gP よくわかんないんだけど
BOMはUTF-16LEでは "FF FE" じゃないの?
BOMはUTF-16LEでは "FF FE" じゃないの?
836デフォルトの名無しさん
2018/09/14(金) 17:33:39.58ID:Ah8o0gi1 >>822ならそうなるよ。
837デフォルトの名無しさん
2018/09/14(金) 18:51:45.62ID:fIt3xJ+t >>834
chcp 65000が利かないのかな?環境は2000? XP?
こっちではどうかな?
for /f "tokens=1,2 delims=[" %%i in ('cmd /u /c echo 寿対') do set xFF=%%i&set xFE=%%j
set /p BOM=%xFF%%xFE%<nul>utf16le.txt
chcp 65000が利かないのかな?環境は2000? XP?
こっちではどうかな?
for /f "tokens=1,2 delims=[" %%i in ('cmd /u /c echo 寿対') do set xFF=%%i&set xFE=%%j
set /p BOM=%xFF%%xFE%<nul>utf16le.txt
838デフォルトの名無しさん
2018/09/14(金) 20:35:18.83ID:Ah8o0gi1839デフォルトの名無しさん
2018/09/19(水) 17:45:23.36ID:zK7o51II setlocal enabledelayedexpansion
set a=a
set b=A
if /i %a% == %b:~0,1% echo eq1
if /i !a! == !b:~0,1! echo eq2
set c=!b:~0,1!
if /i !a! == !c! echo eq3
if /i %a% == %b% echo eq4
if /i !a! == !b! echo eq5
結果は
eq1
eq3
eq4
eq5
何故か eq2 が出ない
set a=a
set b=A
if /i %a% == %b:~0,1% echo eq1
if /i !a! == !b:~0,1! echo eq2
set c=!b:~0,1!
if /i !a! == !c! echo eq3
if /i %a% == %b% echo eq4
if /i !a! == !b! echo eq5
結果は
eq1
eq3
eq4
eq5
何故か eq2 が出ない
840デフォルトの名無しさん
2018/09/19(水) 18:33:47.81ID:zK7o51II setlocal enabledelayedexpansion
set a=abc
if /i !a:~0,1! == !a:~0,1! echo eq
1! の使い方が誤っています。
俺の PC だけなのか?
set a=abc
if /i !a:~0,1! == !a:~0,1! echo eq
1! の使い方が誤っています。
俺の PC だけなのか?
841デフォルトの名無しさん
2018/09/19(水) 18:44:41.74ID:zK7o51II 分かった
^, にしたら良かった
if /i !a:~0^,1! == !a:~0^,1! echo eq
^, にしたら良かった
if /i !a:~0^,1! == !a:~0^,1! echo eq
842デフォルトの名無しさん
2018/09/20(木) 06:54:59.39ID:SZObeV+C 謎仕様だなあ...
843デフォルトの名無しさん
2018/09/21(金) 03:25:46.77ID:q2E2aQh+ また謎です
shiftすると%1は変わるが、%*は変わらない
shiftすると%1は変わるが、%*は変わらない
844デフォルトの名無しさん
2018/10/03(水) 12:55:17.46ID:kms9X1pz 表示は出来るが、代入が一部だけ出来ない整数値があったよ
@echo off
setlocal enabledelayedexpansion
set /a "a=1<<31"
set /a b=a
set /a c=%a%
set /a d=!a!
echo a=%a%
echo b=%b%
echo c=%c%
echo d=%d%
pause
結果は
a=-2147483648
b=-2147483648
c=
d=
@echo off
setlocal enabledelayedexpansion
set /a "a=1<<31"
set /a b=a
set /a c=%a%
set /a d=!a!
echo a=%a%
echo b=%b%
echo c=%c%
echo d=%d%
pause
結果は
a=-2147483648
b=-2147483648
c=
d=
845デフォルトの名無しさん
2018/10/05(金) 06:58:30.40ID:Iu01kfl1 setlocal enabledelayedexpansion
set /a "a=1,b_!a!=2"
set b_
で、
b_0=2
何か変だが、こういう仕様なのか?
set /a "a=1,b_!a!=2"
set b_
で、
b_0=2
何か変だが、こういう仕様なのか?
846デフォルトの名無しさん
2018/10/05(金) 08:53:46.57ID:vSWfZutq ,で分けてあってもsetコマンドは1つだけなので複数コマンドとは思われてないってことなんだろうね
setlocal enabledelayedexpansion
set /a a=1 & set b_!a!=2
set b_!a!
なら大丈夫
setlocal enabledelayedexpansion
set /a a=1 & set b_!a!=2
set b_!a!
なら大丈夫
847デフォルトの名無しさん
2018/10/05(金) 17:03:33.33ID:Iu01kfl1 >>846 ありがとうございます
!a! は set /a 実行直前の値でした
setlocal enabledelayedexpansion
set /a a=0
for /L %%i in (1,1,3) do set /a "a=%%i,b=a,c=!a!,d=%a%" & echo !a! !b! !c! !d!
1 1 0 0
2 2 1 0
3 3 2 0
!a! は set /a 実行直前の値でした
setlocal enabledelayedexpansion
set /a a=0
for /L %%i in (1,1,3) do set /a "a=%%i,b=a,c=!a!,d=%a%" & echo !a! !b! !c! !d!
1 1 0 0
2 2 1 0
3 3 2 0
848デフォルトの名無しさん
2018/10/05(金) 17:27:41.95ID:vSWfZutq setlocal enabledelayedexpansion
set /a a=0
for /L %%i in (1,1,3) do ( set /a a=%%i &set /a b=a &set /a c=!a! &set /a d=%a% &echo !a! !b! !c! !d! )
なら
1 1 1 0
2 2 2 0
3 3 3 0
となる。
bへの値代入が!抜きのaでできるって知らなかったわ…
謎挙動。
set /a a=0
for /L %%i in (1,1,3) do ( set /a a=%%i &set /a b=a &set /a c=!a! &set /a d=%a% &echo !a! !b! !c! !d! )
なら
1 1 1 0
2 2 2 0
3 3 3 0
となる。
bへの値代入が!抜きのaでできるって知らなかったわ…
謎挙動。
849デフォルトの名無しさん
2018/10/05(金) 18:09:57.00ID:Iu01kfl1 set /a で %a% や !a! はあまり使用しない方が良さそうだ
% や ! は演算子に含まれる文字で紛らわしいし
展開のタイミングで予想外の挙動するし
展開時に >>844 のように特異値でエラーになったりするし
値参照は変数名だけでいい
% や ! は演算子に含まれる文字で紛らわしいし
展開のタイミングで予想外の挙動するし
展開時に >>844 のように特異値でエラーになったりするし
値参照は変数名だけでいい
850デフォルトの名無しさん
2018/10/05(金) 18:17:00.44ID:vSWfZutq ご自由に。それより某グラマー御用達QAサイトのトップ回答者様が書くバッチがgoto :EOF 多用で頭痛い
851デフォルトの名無しさん
2018/10/05(金) 18:26:50.86ID:Iu01kfl1 俺もよく使うよ、goto :eof
852デフォルトの名無しさん
2018/10/05(金) 18:28:05.47ID:hOPHqLcn853デフォルトの名無しさん
2018/10/05(金) 18:33:02.62ID:Iu01kfl1 goto その物が多いとか言われた事も
854デフォルトの名無しさん
2018/10/05(金) 18:46:17.97ID:vSWfZutq 自分だと大抵
{メインルーチン}
goto :EOF
:sub1
{サブルーチン12}
exit /b
:sub2
{サブルーチン}
exit /b
と書くことが多い。
トップ回答者様は
{メインルーチン}
goto :EOF
:sub1
{サブルーチン}
goto :EOF
sub2
{サブルーチン}
goto :EOF
と回答されている。サブルーチンの下のはgoto は不要だし慣れない。
{メインルーチン}
goto :EOF
:sub1
{サブルーチン12}
exit /b
:sub2
{サブルーチン}
exit /b
と書くことが多い。
トップ回答者様は
{メインルーチン}
goto :EOF
:sub1
{サブルーチン}
goto :EOF
sub2
{サブルーチン}
goto :EOF
と回答されている。サブルーチンの下のはgoto は不要だし慣れない。
855デフォルトの名無しさん
2018/10/05(金) 19:02:53.79ID:Iu01kfl1 戻り値なけりゃどっちでもいい様な気がするが
逆に exit を避けてる人もいるよ
逆に exit を避けてる人もいるよ
856デフォルトの名無しさん
2018/10/05(金) 19:53:21.88ID:LaGwhHU8 俺もgoto派だな
857デフォルトの名無しさん
2018/10/05(金) 21:35:58.50ID:RB/KKRkK gotoは見通しが悪くなるから、極力使わないようにしてる
他の主流の言語だと使えないものが多いから、必然的にそういう書き方に慣れてしまった
他の主流の言語だと使えないものが多いから、必然的にそういう書き方に慣れてしまった
858デフォルトの名無しさん
2018/10/05(金) 23:49:53.55ID:8nMQUHh9 goto は使わないに越したことはない。
が、制御構文が貧弱な言語では、熟慮の上で使わざるを得ない場面で使う。
が正解。
詳しくはWikipediaで。
が、制御構文が貧弱な言語では、熟慮の上で使わざるを得ない場面で使う。
が正解。
詳しくはWikipediaで。
859デフォルトの名無しさん
2018/10/05(金) 23:56:24.52ID:qkvvR9Zs Cでもgotoは使うよね
860デフォルトの名無しさん
2018/10/05(金) 23:58:44.47ID:8nMQUHh9 C言語にはMISRAとかいう規約があるが無視していい。
あれは組み込み分野だけの特殊なものだと思っていい。
大抵の人間は、「これは思考からはぶいていい」という書き方の方が読みやすい。
だから、「これは戻すか終わらせる」と書いていっていい。
そうすれば、残ったものに集中できるだろ?
まぁ、日ごろ「自分が辞めた後にこれを読まされる人間が困らないかどうか」って考えて書いてるかどうかってことだ。
あれは組み込み分野だけの特殊なものだと思っていい。
大抵の人間は、「これは思考からはぶいていい」という書き方の方が読みやすい。
だから、「これは戻すか終わらせる」と書いていっていい。
そうすれば、残ったものに集中できるだろ?
まぁ、日ごろ「自分が辞めた後にこれを読まされる人間が困らないかどうか」って考えて書いてるかどうかってことだ。
861デフォルトの名無しさん
2018/10/06(土) 16:39:29.59ID:P4YKYACU あちこちでreturnするのもスパゲッティなgotoと大差がない気がするんだ
テロ的というか
テロ的というか
862デフォルトの名無しさん
2018/10/06(土) 17:10:22.17ID:GNiE4xH/ 字面が違うだけで同じだろ
863デフォルトの名無しさん
2018/10/06(土) 20:28:48.17ID:gea8Zy97 gotoもイディオムに従って使えば混乱しない
バッチファイルだとforの方が理解不能で害悪
バッチファイルだとforの方が理解不能で害悪
864デフォルトの名無しさん
2018/10/06(土) 23:02:20.58ID:tgEP6apu gotoがゴーゴーに見えた
865デフォルトの名無しさん
2018/10/06(土) 23:12:15.45ID:uJ87E9Rb >>860-861
IPAの出してるMISRAの解説書のreturnは1か所にしろというルール、
あれはクソofクソのルールだと思うね。early returnこそ正義
Cとbatの書き方は全然比較にならないけど
IPAの出してるMISRAの解説書のreturnは1か所にしろというルール、
あれはクソofクソのルールだと思うね。early returnこそ正義
Cとbatの書き方は全然比較にならないけど
866デフォルトの名無しさん
2018/10/07(日) 00:27:12.50ID:pbh8RIqN >>861
むしろ goto の良い使い方と言われている制限が、return をまねたもの。
むしろ goto の良い使い方と言われている制限が、return をまねたもの。
867デフォルトの名無しさん
2018/10/07(日) 11:03:03.39ID:Bzp9uIq0 バッチファイルかパワーシェルでIPv4のIPアドレスのみを取得して環境変数に代入するにはどういうコマンドになりますか?
教えてください
教えてください
868デフォルトの名無しさん
2018/10/07(日) 12:00:15.70ID:6qmhFN/2 「powershell ip address」で検索!
869デフォルトの名無しさん
2018/10/07(日) 12:28:26.52ID:VwaVbKnV >>867
環境変数IPAddressに192を含んだIPアドレスを代入するサンプル(PowerShell 2.0併用)
set CMD=powershell -command "& {ipconfig |? {$_ -match 'IP.*: 192\.'}|% {$_ -replace '.*: (\d+\.\d+\.\d+\.\d+)','$1'}}"
for /f "usebackq delims=" %%a in (`%CMD%`) do set IPAddress=%%a
echo %IPAddress%
PowerShell部分はipconfigの結果から正規表現でIPと: 192という文字を含む行を抽出
抽出した行のIPアドレス部分のみ正規表現の置換で抽出といった感じ
PowerShell3.0以降だともうちょっと素直に書ける感じだけど
環境変数IPAddressに192を含んだIPアドレスを代入するサンプル(PowerShell 2.0併用)
set CMD=powershell -command "& {ipconfig |? {$_ -match 'IP.*: 192\.'}|% {$_ -replace '.*: (\d+\.\d+\.\d+\.\d+)','$1'}}"
for /f "usebackq delims=" %%a in (`%CMD%`) do set IPAddress=%%a
echo %IPAddress%
PowerShell部分はipconfigの結果から正規表現でIPと: 192という文字を含む行を抽出
抽出した行のIPアドレス部分のみ正規表現の置換で抽出といった感じ
PowerShell3.0以降だともうちょっと素直に書ける感じだけど
870デフォルトの名無しさん
2018/10/07(日) 12:53:16.71ID:Dedwpgqn アダプタが1つだけならこんなでいいんじゃね?
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set IPADRESS=%%a
set IPADRESS=%IPADRESS:~1%
echo %IPADRESS%
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set IPADRESS=%%a
set IPADRESS=%IPADRESS:~1%
echo %IPADRESS%
871デフォルトの名無しさん
2018/10/07(日) 12:54:26.67ID:Bzp9uIq0 この処理作るのにバッチとパワーシェル組み合わせないとできないんですか?
ip取得するだけでも結構大変なのですね
ip取得するだけでも結構大変なのですね
872デフォルトの名無しさん
2018/10/07(日) 12:56:55.73ID:Bzp9uIq0 と思ったらバッチだけでもできそうなんですね、アダプターは一つです
ちょっと色々教えてもらったのでテストしてみます!
ちょっと色々教えてもらったのでテストしてみます!
873870
2018/10/07(日) 13:03:20.66ID:Dedwpgqn 遅延変数展開の呪文要らなかったわ、1行目削っていいよ
874デフォルトの名無しさん
2018/10/07(日) 13:07:01.74ID:Bzp9uIq0 遅延環境数ってforとifの()で使用するときだけ必要なんでしたっけ?
875デフォルトの名無しさん
2018/10/07(日) 13:23:02.79ID:Dedwpgqn だいたいその理解でおk
forやifの()内のスクリプトブロックが複数処理で変数代入とその参照のペアがある場合に使う
1処理だけとか、代入だけとかなら不要
forやifの()内のスクリプトブロックが複数処理で変数代入とその参照のペアがある場合に使う
1処理だけとか、代入だけとかなら不要
876デフォルトの名無しさん
2018/10/07(日) 17:41:47.85ID:0jrGYEp4 無限ループの原因は何か
SET A=1073741824
FOR /L %%B IN (-%A%,%A%,%A%) DO ECHO %%B
SET A=1073741824
FOR /L %%B IN (-%A%,%A%,%A%) DO ECHO %%B
877デフォルトの名無しさん
2018/10/07(日) 19:04:07.20ID:Dedwpgqn set /a A=1073741824
1073741824
set /a B=A+A
-2147483648
となるからね、32bitINTの範囲が-2147483648〜-2147483647
2進表記の最上位bitが1が立ってしまったらマイナス値
1073741824
set /a B=A+A
-2147483648
となるからね、32bitINTの範囲が-2147483648〜-2147483647
2進表記の最上位bitが1が立ってしまったらマイナス値
878デフォルトの名無しさん
2018/10/07(日) 19:25:23.31ID:Dedwpgqn 試してみるとfor /l 文ではステップ値が1073741824以上の場合必ずバグったループになるね、まあ仕方ないのかも
879デフォルトの名無しさん
2018/10/07(日) 19:43:19.94ID:0jrGYEp4 内部的にどんな計算してるか気になるところです
B は -1073741824,0,1073741824 なので
普通に考えると32ビットのオーバーフローはしてない筈
B は -1073741824,0,1073741824 なので
普通に考えると32ビットのオーバーフローはしてない筈
880デフォルトの名無しさん
2018/10/07(日) 19:55:29.49ID:0jrGYEp4 ああ、分かった
4ループめでオーバーフローするのか
3ループめで最終値に等しいと抜けるんじゃ無いわけか
4ループめでオーバーフローするのか
3ループめで最終値に等しいと抜けるんじゃ無いわけか
881デフォルトの名無しさん
2018/10/07(日) 19:57:49.70ID:2JwzOMBB バッチファイルのif文でパワーシェルのif -Orみたいな処理できますか?
882デフォルトの名無しさん
2018/10/07(日) 20:18:06.07ID:0jrGYEp4 IFの条件は2個の値を比較するだけ
複雑なOR,AND,XORとかあるんなら計算して結果を変数に入れる
それをIFの条件で使う
複雑なOR,AND,XORとかあるんなら計算して結果を変数に入れる
それをIFの条件で使う
883デフォルトの名無しさん
2018/10/08(月) 21:58:47.76ID:To7x1PVP あると便利なミニミニバッチ
DOS窓に今の時間を表示しておく
m.bat
@echo off
setlocal
set x=%date:~5% %time:~0,5% %*
title=%x%
exit /B 0
画面クリア
c.bat
@echo off
cls
exit /B 0
クリップボードクリア
cc.bat
@echo off
echo.|clip
echo clip clear
exit /B 0
DOS窓に今の時間を表示しておく
m.bat
@echo off
setlocal
set x=%date:~5% %time:~0,5% %*
title=%x%
exit /B 0
画面クリア
c.bat
@echo off
cls
exit /B 0
クリップボードクリア
cc.bat
@echo off
echo.|clip
echo clip clear
exit /B 0
884デフォルトの名無しさん
2018/10/09(火) 08:38:25.31ID:IIAdkwpd 画面クリアは普通にcls打つのと何が違うん?
885デフォルトの名無しさん
2018/10/09(火) 11:35:59.50ID:9WevvN1n886デフォルトの名無しさん
2018/10/09(火) 15:53:20.49ID:hXgFZ2lj >>884
一文字でいいので、お菓子を食べながらでもできる、大差
一文字でいいので、お菓子を食べながらでもできる、大差
887デフォルトの名無しさん
2018/10/10(水) 17:37:49.95ID:Wl83IH5q そういうしょぼいものならdoskeyでも使っとけ
888デフォルトの名無しさん
2018/10/11(木) 22:01:20.44ID:aIIKUaH8 1文字とか何かで誤爆しそうで危うすぎる
889デフォルトの名無しさん
2018/10/12(金) 00:17:12.22ID:xVyRtSc0 くだらねー
890デフォルトの名無しさん
2018/10/13(土) 05:37:42.36ID:YmkYzRio copyコマンドがおかしい
copy x+y z
とするとzに改行追加されている
copy /B x+y z
だと問題なしだが??
copy x+y z
とするとzに改行追加されている
copy /B x+y z
だと問題なしだが??
891デフォルトの名無しさん
2018/10/13(土) 07:34:07.12ID:TS7U3WRI >>890これね
ttp://shigechi-64.hatenablog.com/entry/20090717/1247798200
ttp://shigechi-64.hatenablog.com/entry/20090717/1247798200
892デフォルトの名無しさん
2018/10/13(土) 19:25:44.82ID:fQqIQRVk 改行じゃなくて 0x1A の 1byte なら付加されるが
echo test> a
dir a
copy a /b + nul /a
dir a
サイズが 1byte 増える
echo test> a
dir a
copy a /b + nul /a
dir a
サイズが 1byte 増える
893デフォルトの名無しさん
2018/10/14(日) 01:22:10.62ID:IWBgfNe4894デフォルトの名無しさん
2018/10/14(日) 06:32:47.46ID:5zXkQKrC テキストファイルのEOF(0x1A)は前世紀の遺物
昔のテキストエディタはファイルの末尾にEOF(0x1A)を付加していた。
仕様が古すぎて今じゃCOPYのヘルプを見ても、詳細が分からん状態
copy でファイルを連結する時は /a がデフォルト
ちなみに copy /a はEOF(0x1A)を付加するだけじゃないぞ
ファイルの途中に0x1Aが有ったらそれ以降が無くなってしまう怖い仕様
あと、echo xxx >> とかでテキストを追加したら末尾の0x1Aは勝手に削除される
昔のテキストエディタはファイルの末尾にEOF(0x1A)を付加していた。
仕様が古すぎて今じゃCOPYのヘルプを見ても、詳細が分からん状態
copy でファイルを連結する時は /a がデフォルト
ちなみに copy /a はEOF(0x1A)を付加するだけじゃないぞ
ファイルの途中に0x1Aが有ったらそれ以降が無くなってしまう怖い仕様
あと、echo xxx >> とかでテキストを追加したら末尾の0x1Aは勝手に削除される
895デフォルトの名無しさん
2018/10/14(日) 09:07:44.01ID:YBMQaeBO896デフォルトの名無しさん
2018/10/14(日) 18:08:37.67ID:gwXaIkcp chcp 65001入ってるスクリプトをUTF-8で保存して動かしてみたらエスケープ処理が酷い・・・
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★3 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 偏差値35大臣「すぐに経済的威圧するところへの依存はリスク」 [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【朗報】高市、中国からの日本行き空路49万件キャンセルを達成🤩オーバーツーリズム対策の手腕が光る [359965264]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
