[過去ログ]
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1489207631/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
415: デフォルトの名無しさん [sage] 2018/03/17(土) 18:22:19.25 ID:RY7g5/8I >>414 俺の選んだ手法がアホなだけかもしれんけど、バッチって基本的に制約多くて泣けてくるもんだから・・・( ノД`) せっかくだしvscript版もどこかに貼ってもらえるとありがたいな。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/415
416: デフォルトの名無しさん [sage] 2018/03/17(土) 18:29:59.15 ID:71uTBaAx >>412 >>1にそれらしいことは書いてあるから、ダメってことはないだろう ただ、「Jscript・Perl等の埋め込み」って何だろう バッチファイルに他言語のコードを埋め込めるのか? http://mevius.5ch.net/test/read.cgi/tech/1489207631/416
417: デフォルトの名無しさん [sage] 2018/03/17(土) 18:38:49.28 ID:RY7g5/8I 「バッチ JScript」とかでググればいいんじゃないか http://mevius.5ch.net/test/read.cgi/tech/1489207631/417
418: デフォルトの名無しさん [] 2018/03/17(土) 19:54:28.64 ID:HNxDhnRb >>413 ありがとうございますとても参考になりました http://mevius.5ch.net/test/read.cgi/tech/1489207631/418
419: デフォルトの名無しさん [sage] 2018/03/17(土) 21:16:57.69 ID:Eknm4yJC @echo off set n0=0 set n1=0 set n2=0 set file="xxx.txt" set newfile="new.txt" set word=xxx type nul>new.txt for /f "tokens=1* delims=:" %%i in ('findstr /n "." %file%') do set n0=%%i for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"%word%" %file%') do set n1=%%i for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"-- %word%" %file%') do set n2=%%i if %n0% equ %n1% if %n1% neq %n2% goto :eof if %n0% equ %n2% (call :del-line %n2%) else (copy /y %file% %newfile%>nul) call :add-line move /y %newfile% %file%>nul goto :eof :del-line for /f "tokens=1* delims=:" %%i in ('findstr /n ".*" %file%') do if %%i neq %1 echo;%%j>>%newfile% goto :eof :add-line echo;%word%>>%newfile% goto :eof http://mevius.5ch.net/test/read.cgi/tech/1489207631/419
420: デフォルトの名無しさん [sage] 2018/03/18(日) 00:33:29.96 ID:Sr1iY1Ai ループ回しすぎじゃね? 小さいファイルならいいだろうけど でかいログファイルとかだと辛いかも http://mevius.5ch.net/test/read.cgi/tech/1489207631/420
421: デフォルトの名無しさん [sage] 2018/03/18(日) 01:44:49.36 ID:WKBkcipr バッチのfor /f 〜 in (ファイル)って1行ずつシーケンシャルにメモリに読んでるって考えていいのかな? http://mevius.5ch.net/test/read.cgi/tech/1489207631/421
422: デフォルトの名無しさん [sage] 2018/03/18(日) 04:17:33.81 ID:Cc3+LG/u >>420 wordってのがどれだけの頻度で出現するかで違ってくる もし殆ど書かれてないのなら、最後が --hogeならforループはほぼ2回分(wordが各行当たり前にあるのなら4回分) hogeやなしならforループはほぼ1回分(wordが各行当たり前にあるのなら3回分) wordと--wordの検索は一緒のループでできそうだけど あと、データ中に、&|^%"'\や%date%を入れてみたけど問題ないみたいだ(win7) http://mevius.5ch.net/test/read.cgi/tech/1489207631/422
423: デフォルトの名無しさん [sage] 2018/03/18(日) 04:26:44.33 ID:Cc3+LG/u いや各行にwordと--wordのどっちかしか無いとするなら--wordの場合で最大でも3回分か http://mevius.5ch.net/test/read.cgi/tech/1489207631/423
424: デフォルトの名無しさん [sage] 2018/03/18(日) 05:31:06.94 ID:5/8yH4g6 set /a a0=0,b=0,c=1,e=1 for /f "delims=: tokens=1*" %%i in ('findstr /n .* in.txt') do ( set "a%%i=%%j" if defined a%%i set /a b=%%i set /a c=%%i+1 ) setlocal enabledelayedexpansion if not "!a%b%!"=="!a%b%:hoge=!" set /a c=b set "a%c%=hoge" del out.txt :y echo.!a%e%!>>out.txt set /a e+=1 & if !e! leq !c! goto y http://mevius.5ch.net/test/read.cgi/tech/1489207631/424
425: デフォルトの名無しさん [sage] 2018/03/18(日) 07:42:25.76 ID:Cc3+LG/u 1万行ある適当なテキストファイルでテストしてみた >>419の方、3.1秒 (最後に-- hoge行を加えた場合 7.5秒) >>424の方、2分14秒(最後に-- hoge行を加えた場合 2分14秒) ってな結果になった >>419の方はforのループ回数は多いが、比較すると速いという結果になった http://mevius.5ch.net/test/read.cgi/tech/1489207631/425
426: デフォルトの名無しさん [sage] 2018/03/18(日) 16:56:47.62 ID:93ta1lhd Oh...ワタシ findstr /n ノキョドウカンチガイシテタネ... http://mevius.5ch.net/test/read.cgi/tech/1489207631/426
427: デフォルトの名無しさん [sage] 2018/03/18(日) 20:22:40.18 ID:93ta1lhd >>419、>>424は対象ファイルの行頭にコロンがあると消されちゃうね。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/427
428: デフォルトの名無しさん [sage] 2018/03/18(日) 22:13:27.07 ID:WKBkcipr そういう後から判明するバグが紛れ込むからバッチで文字列処理は嫌なんだよな http://mevius.5ch.net/test/read.cgi/tech/1489207631/428
429: デフォルトの名無しさん [sage] 2018/03/18(日) 22:14:36.65 ID:5/8yH4g6 先頭から連続するデリミタは全て消される >>419,>>424 どっちもダメ >>424 は /? もダメ abc :::def /? -- hoge http://mevius.5ch.net/test/read.cgi/tech/1489207631/429
430: デフォルトの名無しさん [sage] 2018/03/18(日) 22:17:56.90 ID:5/8yH4g6 /? は >>419 の方がダメだった http://mevius.5ch.net/test/read.cgi/tech/1489207631/430
431: デフォルトの名無しさん [sage] 2018/03/18(日) 22:45:10.52 ID:WKBkcipr 俺が仮組みしてみたやつもforの変な仕様で空行削除されてた バッチだけで手軽には無理だな 素直に適当なスクリプト使った方がいい http://mevius.5ch.net/test/read.cgi/tech/1489207631/431
432: デフォルトの名無しさん [sage] 2018/03/18(日) 22:59:27.55 ID:Cc3+LG/u >>430 セミコロンをピリオドとかコロンとにするといいみたい echo; → echo: http://mevius.5ch.net/test/read.cgi/tech/1489207631/432
433: デフォルトの名無しさん [sage] 2018/03/18(日) 23:05:58.69 ID:Sr1iY1Ai >>425 424のほうのgoto labelをfor(/L)にすると多少速くなるけど findstrを繰り返し使ったほうが速いね メモリにも優しい http://mevius.5ch.net/test/read.cgi/tech/1489207631/433
434: デフォルトの名無しさん [sage] 2018/03/18(日) 23:09:22.00 ID:WKBkcipr >>432 どの文字に変えてもその文字が来ればデミリタ判断されておかしなぶった切りが起こるから デミリタ文字のエスケープ処理が必要になるんでは http://mevius.5ch.net/test/read.cgi/tech/1489207631/434
435: デフォルトの名無しさん [sage] 2018/03/19(月) 02:29:30.41 ID:VE4HgUIn ×デミリタ ○デリミタ http://mevius.5ch.net/test/read.cgi/tech/1489207631/435
436: デフォルトの名無しさん [sage] 2018/03/19(月) 06:32:04.04 ID:UCUeI8NE UTF8扱えない時点で限界を感じる http://mevius.5ch.net/test/read.cgi/tech/1489207631/436
437: デフォルトの名無しさん [sage] 2018/03/19(月) 09:11:01.79 ID:cAxnz/N1 set /a a=0,b=0,c=0,d=1 & del out.txt 2> nul for /f "delims=:" %%i in ('findstr /n . in.txt') do set /a a=%%i for /f "delims=:" %%i in ('findstr /n hoge in.txt') do set /a b=%%i if %a%==%b% set /a c=b for /f "delims=0123456789 tokens=*" %%i in ('findstr /n .* in.txt') do ( set "e=%%i" setlocal enabledelayedexpansion if !d!==!c! goto x echo.!e:~1!>>out.txt endlocal set /a d+=1 ) :x echo hoge>>out.txt http://mevius.5ch.net/test/read.cgi/tech/1489207631/437
438: デフォルトの名無しさん [sage] 2018/03/20(火) 06:19:09.67 ID:5rDh/omp >>437 元ファイルにechoで追加ですむ場合もあるが ファイル終端が改行になってるか確認する方法が思いつかない http://mevius.5ch.net/test/read.cgi/tech/1489207631/438
439: デフォルトの名無しさん [sage] 2018/03/20(火) 08:03:38.21 ID:BuzmWDFp >>438 終端に改行があろうがなかろうが、echoで出力すれば改行は付加されるよ あとは参考になるかわからんが set LF=^ setlocal EnableDelayedExpansion findstr /n .* in.txt findstr /n $ in.txt findstr /n !LF! in.txt の出力の差で終端改行のありなしの見分けがつくかも (setとsetlocal行の間の空行は省略しないこと) 改行コードが、CR/LF、LF、CRで違った結果が出るところが面白いよ http://mevius.5ch.net/test/read.cgi/tech/1489207631/439
440: デフォルトの名無しさん [sage] 2018/03/20(火) 19:42:04.51 ID:5rDh/omp >>439 ファイル終端が改行になっていないと最後の行の後ろにhogeがくっつくだけだよ >>419で試してみなよ echoで空行を追加してからhogeを付ければいいんだけど それだとファイル終端が改行になっていたら余計な空行ができる http://mevius.5ch.net/test/read.cgi/tech/1489207631/440
441: デフォルトの名無しさん [sage] 2018/03/20(火) 20:10:53.11 ID:to9q6Sr+ コマンドプロンプトの画面で以下の<コマンド?>を入力すると現在の年月日時分秒が表示されるのですが これを変数に入れるにはどうすれば良いのでしょうか? 以下の<コマンド?>ではうまく入りませんでした・・・ <コマンド?> powershell -command "date -f yyyyMMddHHmmss" <コマンド?> set NICHIJI=powershell -command "date -f yyyyMMddHHmmss" http://mevius.5ch.net/test/read.cgi/tech/1489207631/441
442: デフォルトの名無しさん [sage] 2018/03/20(火) 23:06:27.49 ID:BuzmWDFp >>440 >>437のことじゃなかったのか http://mevius.5ch.net/test/read.cgi/tech/1489207631/442
443: デフォルトの名無しさん [sage] 2018/03/20(火) 23:18:51.64 ID:aHaiWzOW >>441 for /f "delims=" %%G in (‘powershell -command “date …”’) do set “NICHIJI=%%G" http://mevius.5ch.net/test/read.cgi/tech/1489207631/443
444: デフォルトの名無しさん [sage] 2018/03/20(火) 23:52:48.01 ID:BuzmWDFp >>441 外部プログラムの標準出力を取り込むのが目的ではなくて、単に現在日時をセットするだけならバッチのみで済むけど set NICHIJI=%date:/=%%time::=% set NICHIJI=%NICHIJI:~0,-3% http://mevius.5ch.net/test/read.cgi/tech/1489207631/444
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 558 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s