[過去ログ] 【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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
446: 2018/03/21(水)01:15 ID:UBrEBSgZ(2/2) AAS
あ、for /f "delims=" かな
447: 2018/03/22(木)16:25 ID:pbBa6R9F(1/3) AAS
echo と同じ行で何か実行すると空白が入る

echo.>a
echo.>b & rem
dir a b
448
(1): 2018/03/22(木)17:04 ID:pbBa6R9F(2/3) AAS
豆知識その2
echo と同じ行でパイプ実行すると表示が変わることがある

set a=%%b%%
set b=xxx
echo %a%
echo %a% | more
449: 2018/03/22(木)17:12 ID:pbBa6R9F(3/3) AAS
豆知識その3
文字化け嫌なら遅延展開で

@echo off
set "a=a > nul"
set "b=b & rem"
echo %a%
echo %b%
echo ------
setlocal enabledelayedexpansion
echo !a!
echo !b!
pause
450: 2018/03/22(木)21:50 ID:TJWufbYh(1) AAS
プログラムからファイルの追加・削除・変更などを行っている最中のフォルダに対して「dir /s」のコマンドを実行した場合
そのせいでプログラムからの処理を邪魔してしまうことってあるのでしょうか?
451: 2018/03/24(土)19:48 ID:pj5y8nH5(1) AAS
絶対に邪魔をしないと言い切るのは難しいな。悪魔の証明
452: 2018/03/25(日)01:41 ID:cTYVl2v9(1) AAS
普通は影響しないと思ってていいだろう
そのプログラムがシビアな待ち時間を気にするような造りにさえなってなければね
453: 2018/03/25(日)14:43 ID:8LXGoh28(1) AAS
dirはファイル自体を見に往くわけじゃないから
454
(1): 2018/04/03(火)02:29 ID:yDWDpnwx(1/2) AAS
ちょっとハマってしまったのでアドバイスをいただきたく。

@echo off
cd /d %~dp0
setlocal ENABLEDELAYEDEXPANSION

FOR /f "delims=" %%i IN ('cmd /u /c ECHO;名') DO (
SET CR=%%i
SET CR=!CR:~0,1!
)
SET LF=^

set CRLF=!CR!!LF!

set DATA=alpha beta gamma
set DATA2=%DATA: =!CRLF!%

@echo ----------------------------------------------
@echo !DATA2!
@echo ----------------------------------------------
(@echo !DATA2!) > testdata2.txt

@echo -------------FOR開始---------------
FOR /F "tokens=*" %%a in ('echo !DATA2! ^| findstr /C:"be"') DO (
@echo FORに入った
@echo %%a
)
@echo -------------FOR終了---------------

:last
pause
455: 454 2018/04/03(火)02:42 ID:yDWDpnwx(2/2) AAS
>>454でやりたいこと
・空白区切りの文字列群が入っている環境変数DATAがある。
・ここから、特定の文字列(ここでは"be")を含む文字列だけを取り出したい。

・空白を改行(CRLF)に置換してfindstrすればいいかと思ったが、
 @echo !DATA2! > testdata2.txt では確かに改行されたファイルができるものの、
 @echo !DATA2! | findstr /C:"be" だと、そもそも @echo !DATA2! が
 "alphaCRLFbetaCRLFgamma"のような単一行扱いでfindstrに渡されるらしく(?)、うまくいかない。
 出力結果は
  -------------FOR開始---------------
  FORに入った
  alpha
  -------------FOR終了---------------
 となってしまう。
 (echo alphaCRLFbetaCRLFgamma をやろうとして、CRLFのとこまでしか出力してないということ?)

・type testdata2.txt | findstr /C:"be" にすればいいのだが、できれば一時ファイルへの出力は行いたくない。

何か良い方法はないでしょうか。
456
(1): 2018/04/03(火)18:08 ID:dFuhrusg(1) AAS
日立だな
457: 2018/04/03(火)21:08 ID:NTm1Ga+l(1) AAS
空白区切りならcallとshiftで回せばいいのでは

@echo off

set DATA=alpha beta gamma

call :SEARCH %DATA%

goto :eof

:SEARCH
if "%1" == "" goto :eof
echo %1 | findstr be
shift
goto SEARCH
458
(1): 2018/04/05(木)19:45 ID:9RkYEovX(1/2) AAS
とあるプロンプトを表示して確認画面でyes/no入れてyesが表示されたら処理を続けるnoが入れられたらgoto ENDって事がワンライナー(一行)でやりたいんですけど良い方法ありませんか?
459: 2018/04/05(木)19:54 ID:9RkYEovX(2/2) AAS
>>458は例えば↓なのを一行でやりたいんです

setlocal
set /p answer="実行しますか(y/n)? : %answer%"
if "%answer%"=="y" (
echo "start"
) else if "%answer%"=="n" (
echo "cancel"
exit /b 1
)else (
echo "other key"
exit /b 1
)
endlocal
460
(1): 2018/04/05(木)21:02 ID:KYHgmfzR(1/2) AAS
ワンライナー云々抜きに choice.exe は使ったらダメ?
1-
あと 542 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.015s