[過去ログ] 【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
416: 2018/03/17(土)18:29 ID:71uTBaAx(1) AAS
>>412
>>1にそれらしいことは書いてあるから、ダメってことはないだろう
ただ、「Jscript・Perl等の埋め込み」って何だろう
バッチファイルに他言語のコードを埋め込めるのか?
417: 2018/03/17(土)18:38 ID:RY7g5/8I(4/4) AAS
「バッチ JScript」とかでググればいいんじゃないか
418: 2018/03/17(土)19:54 ID:HNxDhnRb(2/2) AAS
>>413
ありがとうございますとても参考になりました
419(5): 2018/03/17(土)21:16 ID:Eknm4yJC(1) AAS
@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
420(1): 2018/03/18(日)00:33 ID:Sr1iY1Ai(1/2) AAS
ループ回しすぎじゃね?
小さいファイルならいいだろうけど
でかいログファイルとかだと辛いかも
421: 2018/03/18(日)01:44 ID:WKBkcipr(1/4) AAS
バッチのfor /f 〜 in (ファイル)って1行ずつシーケンシャルにメモリに読んでるって考えていいのかな?
422: 2018/03/18(日)04:17 ID:Cc3+LG/u(1/4) AAS
>>420
wordってのがどれだけの頻度で出現するかで違ってくる
もし殆ど書かれてないのなら、最後が
--hogeならforループはほぼ2回分(wordが各行当たり前にあるのなら4回分)
hogeやなしならforループはほぼ1回分(wordが各行当たり前にあるのなら3回分)
wordと--wordの検索は一緒のループでできそうだけど
あと、データ中に、&|^%"'\や%date%を入れてみたけど問題ないみたいだ(win7)
423: 2018/03/18(日)04:26 ID:Cc3+LG/u(2/4) AAS
いや各行にwordと--wordのどっちかしか無いとするなら--wordの場合で最大でも3回分か
424(3): 2018/03/18(日)05:31 ID:5/8yH4g6(1/3) AAS
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
425(1): 2018/03/18(日)07:42 ID:Cc3+LG/u(3/4) AAS
1万行ある適当なテキストファイルでテストしてみた
>>419の方、3.1秒 (最後に-- hoge行を加えた場合 7.5秒)
>>424の方、2分14秒(最後に-- hoge行を加えた場合 2分14秒)
ってな結果になった
>>419の方はforのループ回数は多いが、比較すると速いという結果になった
426: 2018/03/18(日)16:56 ID:93ta1lhd(1/2) AAS
Oh...ワタシ findstr /n ノキョドウカンチガイシテタネ...
427: 2018/03/18(日)20:22 ID:93ta1lhd(2/2) AAS
>>419、>>424は対象ファイルの行頭にコロンがあると消されちゃうね。
428: 2018/03/18(日)22:13 ID:WKBkcipr(2/4) AAS
そういう後から判明するバグが紛れ込むからバッチで文字列処理は嫌なんだよな
429: 2018/03/18(日)22:14 ID:5/8yH4g6(2/3) AAS
先頭から連続するデリミタは全て消される
>>419>>424 どっちもダメ
>>424 は /? もダメ
abc
:::def
/?
-- hoge
430(1): 2018/03/18(日)22:17 ID:5/8yH4g6(3/3) AAS
/? は >>419 の方がダメだった
431: 2018/03/18(日)22:45 ID:WKBkcipr(3/4) AAS
俺が仮組みしてみたやつもforの変な仕様で空行削除されてた
バッチだけで手軽には無理だな
素直に適当なスクリプト使った方がいい
432(1): 2018/03/18(日)22:59 ID:Cc3+LG/u(4/4) AAS
>>430
セミコロンをピリオドとかコロンとにするといいみたい
echo; → echo:
433: 2018/03/18(日)23:05 ID:Sr1iY1Ai(2/2) AAS
>>425
424のほうのgoto labelをfor(/L)にすると多少速くなるけど
findstrを繰り返し使ったほうが速いね
メモリにも優しい
434: 2018/03/18(日)23:09 ID:WKBkcipr(4/4) AAS
>>432
どの文字に変えてもその文字が来ればデミリタ判断されておかしなぶった切りが起こるから
デミリタ文字のエスケープ処理が必要になるんでは
435: 2018/03/19(月)02:29 ID:VE4HgUIn(1) AAS
×デミリタ
○デリミタ
436: 2018/03/19(月)06:32 ID:UCUeI8NE(1) AAS
UTF8扱えない時点で限界を感じる
437(3): 2018/03/19(月)09:11 ID:cAxnz/N1(1) AAS
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
438(1): 2018/03/20(火)06:19 ID:5rDh/omp(1/2) AAS
>>437
元ファイルにechoで追加ですむ場合もあるが
ファイル終端が改行になってるか確認する方法が思いつかない
439(1): 2018/03/20(火)08:03 ID:BuzmWDFp(1/3) AAS
>>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で違った結果が出るところが面白いよ
440(1): 2018/03/20(火)19:42 ID:5rDh/omp(2/2) AAS
>>439
ファイル終端が改行になっていないと最後の行の後ろにhogeがくっつくだけだよ
>>419で試してみなよ
echoで空行を追加してからhogeを付ければいいんだけど
それだとファイル終端が改行になっていたら余計な空行ができる
441(2): 2018/03/20(火)20:10 ID:to9q6Sr+(1) AAS
コマンドプロンプトの画面で以下の<コマンド?>を入力すると現在の年月日時分秒が表示されるのですが
これを変数に入れるにはどうすれば良いのでしょうか?
以下の<コマンド?>ではうまく入りませんでした・・・
<コマンド?>
powershell -command "date -f yyyyMMddHHmmss"
<コマンド?>
set NICHIJI=powershell -command "date -f yyyyMMddHHmmss"
442(1): 2018/03/20(火)23:06 ID:BuzmWDFp(2/3) AAS
>>440
>>437のことじゃなかったのか
443: 2018/03/20(火)23:18 ID:aHaiWzOW(1) AAS
>>441
for /f "delims=" %%G in (‘powershell -command “date …”’) do set “NICHIJI=%%G"
444: 2018/03/20(火)23:52 ID:BuzmWDFp(3/3) AAS
>>441
外部プログラムの標準出力を取り込むのが目的ではなくて、単に現在日時をセットするだけならバッチのみで済むけど
set NICHIJI=%date:/=%%time::=%
set NICHIJI=%NICHIJI:~0,-3%
445: 2018/03/21(水)01:09 ID:UBrEBSgZ(1/2) AAS
>>442
すみません、分かりにくい文でした
>>437を改造しようとしたが改行がネックだと言う話
以下の通り改造してみた
>>437の4行目と5行目の間に一行挿入
if %c%==0 goto y
ラベル:x以降は変更
:x
echo hoge>>out.txt
goto :eof
:y
copy in.txt out.txt & call :x
for /f %%i in ('findstr .* out.txt') do set "e=%%i"
if "%e%"=="hoge" goto :eof
copy in.txt out.txt
echo.>>out.txt
goto x
上下前次1-新書関写板覧索設栞歴
あと 557 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.020s