[過去ログ] 【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
619: 2018/07/13(金)20:29 ID:laaSwUH8(3/3) AAS
ちなみに >>617 をメモ帳にコピペして
変数 a の文字列で検索したら、なぜか変数 b にも一致したりする
逆もまた然り
620(1): 2018/07/14(土)06:43 ID:8rUsawXH(1/3) AAS
>>612
if文の不具合は引用符絡みのようなので
それを削除して書き直しました
@echo off
call :set_arg arg
if not defined arg goto :eof
for %%f in (%arg%) do echo "%%~nxf"
pause & goto :eof
:set_arg
setlocal enabledelayedexpansion
省10
621: 2018/07/14(土)06:43 ID:8rUsawXH(2/3) AAS
:x3
set a=!a:~%b%,-1!& set /a b=0
:x4
if not defined a goto x8
if !a:~%b%^,1!==!d! set /a n=0 & goto x6
:x5
if not !a:~%b%^,1!==!e! set /a b+=1 & goto x5
set s=!s!!d!!a:~0,%b%!!d!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x6
省9
622(1): 2018/07/14(土)09:47 ID:17hM4zE5(1) AAS
>>620
パスに全角半角含むかどうかに関わらず
a.pngがNG
a - コピー.pngがOK
あ.pngがNG
623: 2018/07/14(土)18:45 ID:8rUsawXH(3/3) AAS
>>622
すみません。:x3 の下の行を下記に訂正します
:x3
set a=!a:~%b%,-1!!e!& set /a b=0
624: 2018/07/14(土)22:32 ID:utl6Xayz(1) AAS
>>598
IT土方してるけどいまだにVB6のメンテ案件がたくさん来る (・_・;)
古いシステムを使い続ける企業って多いんだなあ
625: 2018/07/14(土)23:07 ID:LxoRiW+E(1) AAS
日本は異常なほどソフト弱すぎだわな
626(3): 2018/07/15(日)00:45 ID:LqRrN2Y+(1/3) AAS
リダイレクト使ってバッチ内に記述したテキストをファイルに出力すると、行数が増えるにつれて
どんどん処理が遅くなるんですが(多分ファイルのオープンとクローズの処理が重たい
んだとは思うけど)、何十行もあるテキストでも一括で書き込んで早くする方法とかないですか?
ただ不思議なのは、ソースとなるテキストを別のテキストファイルからforで読み込みして
各行を逐次出力ファイルにリダイレクトで書き出した場合はそんなに遅くないんですよねぇ。
627(3): 2018/07/15(日)07:47 ID:3kOM020K(1/2) AAS
>>626
俺はそう思ったことはないなぁ…具体的なコードを見せて。
一括での書き込みは、処理をカッコで括るとできる。
(
echo start
:
:
echo end
) > test.txt
628(1): 626 2018/07/15(日)10:00 ID:LqRrN2Y+(2/3) AAS
>>627
コードといっても何も特別なことはしてないんだけど、何十行というのは嘘で
当該箇所確認してみたら実際には何百行もありました。
----- sample1.bat
echo [%time%] 開始
type nul > "D:\tmp\out-file.txt"
echo hoge>> "D:\tmp\out-file.txt"
echo hoge>> "D:\tmp\out-file.txt"
〜延々と600行近い繰り返し〜
echo hoge>> "D:\tmp\out-file.txt"
省8
629(2): 626 2018/07/15(日)10:01 ID:LqRrN2Y+(3/3) AAS
>>627
----- sample2.bat
echo [%time%] 開始
type nul > "D:\tmp\out-file.txt"
for /f "usebackq delims=" %%L in (`findstr /n .* "D:\tmp\hoge-source.txt"`) do (
set str_temp=%%L
call :redirect-loop
)
echo [%time%] 終了
exit /b
省6
630: 2018/07/15(日)11:22 ID:SEkGxxwq(1) AAS
へー(´・∀・`)
631: 627 2018/07/15(日)12:40 ID:3kOM020K(2/2) AAS
>>628-629
あー、600行もあったらファイルのオープン・クローズ処理の影響が大きくなるねぇ。
カッコで括ると「括った内容、1行で延々書かれたものとして処理」してくれる。多分こういう用途のためにあるんだと思う。
なのでカッコ内の特殊文字エスケープは通常と変わらなかったはず…。(確証はないけど)
俺はヒアドキュメントっぽいことがしたい時、いちいちリダイレクトを入れるのが面倒&読みづらいこともあってこう書いてるわ。
632: 2018/07/18(水)10:40 ID:w8OpeSfX(1) AAS
>>629
別のバッチファイルにするのは駄目なん?
call b.bat >file
なら()の処理とか不要では。
633: 2018/07/18(水)21:57 ID:6GF3Pq4/(1/2) AAS
別のバッチファイルにする必要も無いんじゃね?
@echo off
call :abc > d.txt
goto :eof
:abc
echo xxx
echo yyy
echo zzz
634: 2018/07/18(水)22:23 ID:pnNaFbbR(1/4) AAS
それもいいんじゃない?
635(2): 2018/07/18(水)22:31 ID:pnNaFbbR(2/4) AAS
ちょっと聞きたいんだが…
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" filename.txt') do echo.%%B
これ、バッチが標準入力から受け取ったものを処理する雛形らしいんだけど…
findstr /n "^"
これアリか?正規表現として成立してない!?何だこれ??
findstr /n ".*"
ならアリだしこう書くべし。正規表現として何でもマッチする。
なんだけど何で findstr /n "^" が通るのか分からんわ。
636(1): 2018/07/18(水)22:46 ID:6GF3Pq4/(2/2) AAS
それ、確か : で始まる行が不味いんじゃね?
637(1): 2018/07/18(水)23:08 ID:apOKL4Dj(1) AAS
>>635
findstrはあくまで検索パターンにマッチする行全体を返す。
行頭文字があればマッチと判断するんだな、たぶん"$"でも通るんじゃね?w
638: 2018/07/18(水)23:17 ID:pnNaFbbR(3/4) AAS
>>636
外部リンク[html]:blogs.yahoo.co.jp
が上手いことやってる。感心した。万能ではないらしいが検証中。
tee が作れるかもしれん。
>>637
マジだった。findstrはアホの子だった。
639: 2018/07/18(水)23:20 ID:pnNaFbbR(4/4) AAS
あー、もっとも、find /v "" が空文字列にマッチする時点で駄目ではある。
640: 2018/07/18(水)23:47 ID:Ppp31GO+(1) AAS
このスレは勉強になる
641(1): 2018/07/19(木)00:47 ID:oVpGn6oR(1) AAS
>>635
正規表現としてじゃなくて cmd のエスケープかと。
echo;abc | findstr /n ""
FINDSTR: 検索文字列がありません。
echo;abc | findstr /n "^"
1:abc
642: 2018/07/19(木)06:16 ID:hT+uAClu(1) AAS
>>641
^ の左側に " があるので ^ はただの文字
643(4): 2018/07/19(木)08:15 ID:31+wDFSY(1) AAS
プロセスが特定の文字列を出力したら処理を終了させたくて下記のようなの書いてみたけど思うように動かないです。
process.exe | find "hoge"&&TASKkill /F /im process.exe
&&で指定したコマンドは元のプロセスが終了しないと実行されないのでしょうか?
644(1): 2018/07/19(木)08:26 ID:HqFtoS+0(1) AAS
>>643
多分、process.exeが終了しなくても、標準入出力をクローズすればパイプは渡ってくるんじゃないかな?
645: 2018/07/19(木)22:23 ID:I1yUatr2(1) AAS
>>643
リファレンス読めよ。
&&を何かに変えれば多分動くぜ。
646: 2018/07/20(金)01:23 ID:FDkJiEQ5(1) AAS
コマンドプロンプトって、論理和使えないんだっけな
647: 2018/07/20(金)02:06 ID:2iB3qPvx(1/2) AAS
& コマンドの連結
&& 前のコマンドの実行結果が正常(ERRORCODE=0の場合)に後ろのコマンドを実行する
|| 前のコマンドの実行結果が失敗(ERRORCODE>0の場合)に後ろのコマンドを実行する
648: 2018/07/20(金)02:28 ID:2iB3qPvx(2/2) AAS
ERRORLEVELだったよ
あと、環境変数は実行前に展開されるため、前のコマンドで設定した値を後ろのコマンドで参照すると思わぬ結果になる
for文での注意と同様で、遅延環境変数を使うとかすれば大丈夫だが
また行を分ける場合に%errorlevel%を使うなら参照だけにすること
(設定すると単なる環境変数として扱われる)
あと、そもそも前のコマンドが終了してないのにパイプにデータが渡ってくるのかも要確認
上下前次1-新書関写板覧索設栞歴
あと 354 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.028s