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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
530: 2018/05/15(火)15:47 ID:Aaz/hbaw(2/2) AAS
0001 数字以外
531: 2018/05/16(水)00:05 ID:vNnFvDtx(1) AAS
ありがとうございます
>>527
findstって正規表現のようなことができるのですね、知らなかったです

>>528
英字だけ、数字だけだといいのですが、英数字混在文字列でエラーになりました
*1 の代わりに +0も同じでした
532
(1): 2018/05/16(水)03:54 ID:Hrg3NbAG(1/6) AAS
@echo off
call :check_num %1 result
echo %result%
pause
goto :eof

:check_num
if "%~1"=="" set "b=FALSE" & goto :eof
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
endlocal & set "%2=%b%"
533: 2018/05/16(水)04:03 ID:Hrg3NbAG(2/6) AAS
>>532
7行目の :check_num の次の行に
setlocal
を追加願います
534
(1): 2018/05/16(水)04:13 ID:Hrg3NbAG(3/6) AAS
なんか間違ってたので書き直した

@echo off
call :check_num %1 result
echo %result%
pause
goto :eof

:check_num
setlocal
if "%~1"=="" set "b=FALSE" & goto x
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
535: 2018/05/16(水)16:36 ID:VQztSlVV(1/4) AAS
1"2
result"=="" set "b=FALSE" & goto x の使い方が誤っています。
536: 2018/05/16(水)16:48 ID:VQztSlVV(2/4) AAS
"1"
TRUE
1"2"
ECHO は <OFF> です。
537: 2018/05/16(水)21:51 ID:Hrg3NbAG(4/6) AAS
引数の中の " の対策すると大変なんで、やりたくない
やりたい人、どうぞ
538
(1): 2018/05/16(水)22:31 ID:VQztSlVV(3/4) AAS
1^2
1|2
1&2
539: 2018/05/16(水)23:12 ID:Hrg3NbAG(5/6) AAS
引数の中に cmd で特別な意味を持つ文字が有る場合は左に ^ を付けるか
全体を " で囲むしかないよ
540: 2018/05/16(水)23:15 ID:VQztSlVV(4/4) AAS
>>538>>527宛て

>>534的には、1^^2
541: 2018/05/16(水)23:50 ID:Hrg3NbAG(6/6) AAS
FALSE になるようだが何か問題があるの?
542: 2018/05/17(木)00:05 ID:TsNh8oQN(1/9) AAS
ああ分かった リテラルが 1^2 の場合ね 失礼
543: 2018/05/17(木)00:31 ID:TsNh8oQN(2/9) AAS
call :check_num "%~1" result
にでもすりゃいいのかな
こういうのは考え出すときりが無い様な気がするが
544: 2018/05/17(木)01:18 ID:zVFG07SK(1/5) AAS
分かってるのかどうか知らないが、
1"2"が、ECHO は <OFF> です。になるのは、eol="が効いてるため
545
(1): 2018/05/17(木)06:56 ID:TsNh8oQN(3/9) AAS
eof= を消すと副作用があるし
どっちにしろ引数に ; があると誤動作するみたいだし
こりゃあもうお手上げだな
546: 2018/05/17(木)07:02 ID:TsNh8oQN(4/9) AAS
あ、eol= だった
547
(1): 2018/05/17(木)07:11 ID:pqvSuRzJ(1) AAS
質問者が「もっとすっきりくっきりな方法」と言ってるんだから複雑でトリッキーな方法は求められてなないだろう
548: 2018/05/17(木)08:50 ID:zVFG07SK(2/5) AAS
>>545
>>269-273
549: 2018/05/17(木)09:36 ID:cmWUEZX7(1) AAS
>>547
いつもそうなるけど、バッチじゃ諦めろ、が正解になってしまうよw
550
(2): 2018/05/17(木)10:17 ID:TsNh8oQN(5/9) AAS
どんな方法でも良いから
引数の中に " とか ; が入ってても
正しく動作するのを頼む

というのは絶対に無理なのかね
551: 2018/05/17(木)11:47 ID:TsNh8oQN(6/9) AAS
>>550が不可ならそれを前提条件にするしかないだろ
ちょっと直してみた
@echo off
call :check_num "%~1" result
echo %result% & pause & goto :eof
:check_num
setlocal
set "b=FALSE" & if "%~1"=="" goto x
for /f "delims=-+0123456789 tokens=*" %%i in ("%~1") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
552
(1): 2018/05/17(木)17:15 ID:TsNh8oQN(7/9) AAS
とりあえず引数の " と ; の対策らしきもの
引数は行末まで1個のみ
もう嫌気がさしたのでこれ以上はやめとく
@echo off
set a=%*"
set /a b=0,c=0
setlocal enabledelayedexpansion
:x
set d="!a:~%b%,1!!a:~%b%,1!"
if !d!=="" goto y
if !d!=="""" set /a c+=1
if !d!==";;" set /a c+=1
set /a b+=1 & goto x
:y
endlocal & set c=%c%
set "e=FALSE" & if %c% gtr 1 (goto z) else set "a=%*"
for /f "delims=-+0123456789 tokens=*" %%i in ("%a%") do (
set "a=%%i" & if not defined a set "e=TRUE"
)
:z
echo %e%
553
(1): 2018/05/17(木)17:16 ID:zVFG07SK(3/5) AAS
>>550
@echo off
set "arg1=%1"
call :check_num arg1 result
echo %result% & pause & goto :eof
:check_num
setlocal EnableDelayedExpansion
set "b=FALSE"
for /f "delims=0123456789 tokens=*" %%i in ("!%1!") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
goto :eof

引数に ; は指定できない(半角空白、カンマ、セミコロン、=は引数の区切りを示すため)
なお、遅延環境変数の展開を使わないでも以下のようなチェックで最初に弾けば可能
if "%arg1:"=%" equ "%arg1:"=”%" (echo ^"なし) else echo ^"あり
554
(1): 2018/05/17(木)17:18 ID:zVFG07SK(4/5) AAS
なお、+-は除くのが吉
+1+2-3
555
(2): 2018/05/17(木)18:05 ID:TsNh8oQN(8/9) AAS
>554.bat 1"&ab"
'ab""' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
TRUE
556: 2018/05/17(木)21:22 ID:zVFG07SK(5/5) AAS
>>555
これ以上はファイル渡しにすべきだろう
set /p
or
for /f delimes^=^ tokens^=*^ eol^=
557: 2018/05/17(木)21:53 ID:TsNh8oQN(9/9) AAS
>>555
554.bat とあるが実際は >>553 のバッチ処理結果です
バッチ2行目の set コマンドの、左側の " が悪さをしてる
当然、下にあるチェック文もそのままでは使えない
引数 1;2 は実際には2つに分かれるが
これで TRUE を返すのは違和感あるので
>>552 では FALSE を返している
2つの %* を %1 にすれば TRUE を返せる筈
558: 2018/05/18(金)12:57 ID:CQAI+hTy(1) AAS
これが分からない

外部リンク:social.technet.microsoft.com
559: 2018/05/18(金)15:14 ID:nWqd9LPa(1) AAS
for /f %%i in ('"cmd /k prompt $h <nul"') do set BS=%%i
set /p AAA=".%BS%   必要ですか?(y/n):"
1-
あと 443 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.012s