【.cmd】 バッチファイルスクリプト %15 【.bat】 (819レス)
上下前次1-新
593: 2024/11/08(金)11:10 ID:PSMBlcAH(1) AAS
フォルダーごと削除してから新規作成したほうが簡単じゃね
594: 2024/11/08(金)11:27 ID:IbrHrevx(1) AAS
俺の環境だと>>586で消えるけど、/q付けないでやったらファイル削除確認メッセージが出てるか?
出てないなら中身のファイルの属性が隠しファイルになってるとか
595: 2024/11/08(金)23:02 ID:gP+dh+BC(1) AAS
del /q "新しいフォルダー\*"
for /d %%i in ("新しいフォルダー\*") do rd /s /q "%%~i"
596: 2024/11/09(土)11:03 ID:bVsLqwPh(1) AAS
cd "新しいフォルダー" && 2> nul rd /s /q .
597: 2024/11/09(土)11:39 ID:L7dYAlvM(1) AAS
>>581
またつまづきました><
入力 12&encoding=se34 56=78
これで&encoding=seを削除したくて
set "s=%s:^&=%"
で&を通したんですが
'encoding'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されません。
となって出来ないです
set "s=%s:^encoding=%"
data = data.replace(/&encoding=se/g, "");
のように加えてもダメでした
どうすればいいですか?
598: 2024/11/09(土)13:08 ID:q8k7iVH6(1) AAS
宿題は自分で考えよう
599: 2024/11/09(土)13:14 ID:L+GgUCLJ(1/3) AAS
バッチでjscriptに渡す前に&が解釈されてるのかな?知らんけど
できないです、どうすればいいですかではなく
どこでエラーになってるか突き止めるのが先なのと
文字列処理したいなら違う言語例えばjscriptを覚えた方がよいかと
600: 2024/11/09(土)13:21 ID:L+GgUCLJ(2/3) AAS
jscriptは>>581のようにOS標準で入ってる古いjavascript
最近の構文は一部使えないがバッチよりも動作が高速で正規表現など文字列処理にも適している
他にpowershellもある
601: 2024/11/09(土)14:09 ID:A663IrvX(1/5) AAS
&はbatでの特殊記号であり、コマンドの区切りの意味がある
set a=aaaa&set b=bbb&set c=ccc
とか複数の命令を1行で書ける
他に&&,||もある
602: 2024/11/09(土)14:31 ID:A663IrvX(2/5) AAS
もしかして、set /p mystringA=あいさつ:で入力したときの話か?
なら、""で括れ
set /p "mystringA=あいさつ:"
set mystringA="%mystringA:&=%"
echo "%mystringA%"
603: 2024/11/09(土)14:37 ID:A663IrvX(3/5) AAS
set mystringA="%mystringA:&=%"→set "mystringA=%mystringA:&=%"
604(1): 2024/11/09(土)14:43 ID:A663IrvX(4/5) AAS
あと>>581はデータを引数渡し("%s%")してるので、「"」をデータ内に入れることができない
ファイル渡しすれば確実だが、他に環境変数(s)で渡す場合を示しておく
data=new ActiveXObject("WScript.Shell").Environment("Process")("s").replace(/12=34/g,"4567");
605: 2024/11/09(土)15:04 ID:A663IrvX(5/5) AAS
ついでに、&について
通常は使わなくても次の行に書けばいいが
閉じた環境からのデータを引渡ししたい場合などはどうしても使わなければならない
set a=1
call :sub
echo %a%
goto :eof
:sub
setlocal
set /a a+=1
endlocal&set a=%a%
goto :eof
606: 2024/11/09(土)18:43 ID:L+GgUCLJ(3/3) AAS
>endlocal&set a=%a%
こんなキモい書き方した事ないな
そもそもsetlocalだかは弊害もあるから使わずに書く事を意識した方がいいね
このスレは安易に使いすぎてる
607: 2024/11/09(土)19:20 ID:KYeqqNmx(1) AAS
ここはキモイ人ばっかりですから問題ないです笑
608: 2024/11/10(日)07:08 ID:3mwMiYGo(1) AAS
遅延展開以外はsetlocalなんて滅多に使わんが他にどうしろと
609: 2024/11/10(日)10:11 ID:zZSAaq07(1/3) AAS
setlocal enabledelayedexpansionは書く人多いけど
endlocalで閉じてる人見たこと無い
610: 2024/11/10(日)14:06 ID:9SnRMU05(1/2) AAS
そりゃあ終了したら効果が無くなるんだから文法マニアくらいしか書かんだろう
611: 2024/11/10(日)18:35 ID:i0Pkbsqf(1) AAS
サブルーチンでsetlocal enabledelayedexpansionを使ったら
endlocalを書かないと呼び出すたびに環境がコピーされていって
あっという間に正常に動作できなくなるさ
612: 2024/11/10(日)19:42 ID:9SnRMU05(2/2) AAS
サブルーチンに置くというのは想定しなかったな
メインの、というかスクリプトの先頭に置く使い方しかしてないや
613: 2024/11/10(日)20:44 ID:Hbc3IhS3(1) AAS
call先にsetlocalがあってもexit /bやgoto :eofで戻ると
変数復元されるのでendlocalは不要だが有ってもいい
やばいのはforやgotoでのループ内部にsetlocalしかないやつ
614: 2024/11/10(日)21:35 ID:p0BF9o8N(1) AAS
>>604
ありがとう。
何時間かやってるけどうまくいかないです。
?@if (0)==(0) echo off
rem ***
:start
?set /p "ss=ss:"
?set "ss=%ss:&=%"
?set /p "savename=保存名:"
?set ss=%ss% option "%savename%"
?echo %ss%確認1
?cscript //nologo /e:jscript "%~f0" "%URL%"
rem ***for /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" "%ss%"') do set ss= %%i
?echo %ss%確認2
goto :start
rem ***
?@end
// JScript部分
// var data = WScript.Arguments(0);
?data=new ActiveXObject("WScript.Shell").Environment("Process")("ss");
?data = data.replace(/aaaaa/g, "bbbbb");
?data = data.replace(/12=34/g, "56=78");
?data = data.replace(/encoding=seg/g, "");
?WScript.StdOut.WriteLine(data);
?WScript.Quit();
これでやると?で?〜?が無視される。
?にvarという変数を与えても同じ。
?をdata = WScript.Arguments(0);にすると与えた入力が途中で途切れる(実際の入力値に”が入ってるため)
?の代わりにfor文だとbatが落ちる(AppleWebKit/537.36 の使い方が誤っています。)
こういうのをスラスラ書ける天才たちがうらやましい。
615(1): 2024/11/10(日)22:06 ID:zZSAaq07(2/3) AAS
forの中の"%ss%"を削除すれば?
616(1): 2024/11/10(日)22:08 ID:cLh8//6O(1/2) AAS
うーんよく判らんけど
もう入力データはjscipt内でWScript.StdIn.ReadLine();からで拾ってきた方が早くね?とか
バッチはjsciptの呼び出し部分だけ残して全部jscriptでやった方が楽じゃね?とは思った
617: 2024/11/10(日)22:19 ID:zZSAaq07(3/3) AAS
ファイル名として使っちゃダメな文字(又はデバイス名)ってのもあるので
そういうのが入力されたら別文字に変えるとか削除するとかしないとダメになるぞ
618(1): 2024/11/10(日)23:54 ID:cLh8//6O(2/2) AAS
上で言った楽なやつね。叩き台としてどうかな
@if (0)==(0) echo off
set ss=
:start
echo %ss%確認1
rem cscript //nologo /e:jscript "%~f0" "%ss%"
for /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" "%ss%"') do set ss=%%i
echo %ss%確認2
goto :start
@end
// JScript部分
var data = "";
if (WScript.Arguments.Count() > 0) { // 渡された引数がある
data = WScript.Arguments(0);
if (data != "") { WScript.StdErr.WriteLine("渡された引数:" + data); }
}
WScript.StdErr.Write("ss:"); // バッチのfor入力から除外するためプロンプトをエラー出力で表示
var ss = WScript.StdIn.ReadLine();
WScript.StdErr.Write("保存名:");
data = WScript.StdIn.ReadLine();
data = data.replace(/aaaaa/g, "bbbbb");
data = data.replace(/12=34/g, "56=78");
data = data.replace(/encoding=seg/g, "");
WScript.StdOut.WriteLine(data);
619(1): 2024/11/11(月)00:41 ID:ggA4ksL2(1/3) AAS
"%ss%"を引数につけてると
入力に"を入れられると二週目からエラーとなる
620(1): 2024/11/11(月)00:55 ID:ggA4ksL2(2/3) AAS
入力データから"を削除するようにしたほうがいい
ファイル名にも"は使えないから必要ないだろ
それと基本文字列を扱う場合は""で括ること
echo %ss%→echo "%ss%"
じゃないと、&|などでエラーになるし、^も消えるとかいろいろ起きる
(a^b.txtは正常なファイル名)
621(1): 2024/11/11(月)01:34 ID:ggA4ksL2(3/3) AAS
"%ss%"でエラーになってるのはbatでの構文解釈時なのでjscriptでの対処云々以前の問題
622(1): 2024/11/11(月)02:13 ID:BY3zyfqu(1) AAS
みなさんありがとう。
理想なのができたので、まず、
?をfor /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" ') do set ss= %%i
>>615
ありがとう。たったこれだけだったよ
>>616,618
文字制限で入力ができなかった。
でもそういうやり方もあるんだと学べたのでありがとう
>>619,620,621
このbatの後に渡されるexeの処理に””で括っておかないとexeのほうでエラーになる
ちゃんとそこを伝えれてなかったね、ごめん
回答してくれてありがとう
これWScript.StdIn.ReadLine();をchat gptで文字制限を聞いたら?のような入力方法だったよ
とはいえ、ありがとうございました><
上下前次1-新書関写板覧索設栞歴
あと 197 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.017s