【.cmd】 バッチファイルスクリプト %15 【.bat】 (819レス)
1-

643: 2024/12/19(木)07:22 ID:jup1lTg9(1) AAS
BATでこんなことできるぞってのを教えてください。
644: 2024/12/19(木)08:07 ID:i8S4J+Do(1) AAS
無限増殖.bat

@echo off
start "%~f0"
start "%~f0"
645
(2): 2024/12/19(木)18:24 ID:9yUs11tl(1) AAS
set /pコマンドに空欄のままエンターを押すと強制終了してしまうのですがどうしたらいいでしょうか
set InputPath=%InputPath:"=% をコメントアウトすれば空欄での強制終了は回避できるのですが
今度は""で括られたパスを入力すると強制終了してしまいます

@echo off
set /p InputPath=
set InputPath=%InputPath:"=%

if "%InputPath%"=="" (
set msg=空欄だよ
) else if exist "%InputPath%\" (
set msg=フォルダだよ
) else if exist "%InputPath%" (
set msg=ファイルだよ
) else (
set msg=不明だよ
)

echo %msg%
pause
646
(1): 2024/12/20(金)00:11 ID:TH9BF58b(1) AAS
>>645
これでbatそのまま?(処理を抜き出したもので元々はループさせたりしてない?)
またpuaseを付けるところを見るにダブルクリックとかで実行?
コマンドプロンプトで複数回実行したりしてない?

まあ説明すると
入力でそのままエンターすると変数にヌル文字が入るわけじゃなくて変数の入力自体をしない
つまり、以前に定義されてた値があればそれがそのまま入ったままだし
未定義なら未定義のままとなる

ループさせるとかなら変数の初期化をするのがいい
set InputPath=
(これでInputPathは未定義となる)
if not defiend InputPath echo msg=空欄だよ
まあ未定義なら
if "%InputPath%"=="" (
set msg=空欄だよ
のままでちゃんと「空欄だよ」となるはずだから直す必要は無いけど

それと
set InputPath=%InputPath:"=% → set "InputPath=%InputPath:"=%"
としないと、入力に a&b などと入れられると問題となる
647: 645 2024/12/20(金)01:08 ID:byrLY/tu(1) AAS
>>646
助言ありがとうございます

set InputPath="" を @echo off 直下に追加したところ希望通りの結果が得られました
助かりました!

ちなみにダブルクリックで1回だけ実行しループ処理は入れてません。貼った構文が全てです
648
(1): 01/24(金)11:47 ID:zMaqlWh1(1) AAS
いつのころからか
cmdhome.lnk
みたいなcmd起動ショートカット作って
アイコン指定してもアイコンが反映されなくなってしまった
Win10なんだけどなんか改善方法ないんだろうか
味気なさ過ぎて悲しい
649
(1): 01/25(土)04:04 ID:ZawpPmOr(1) AAS
レガシーコンソールじゃないとアイコン反映されないっぽいな
なんで退化してしまうのか
650: 01/26(日)10:14 ID:QXh9thRU(1) AAS
>>648=>>649なんだろうけど
ちょっと意味がわからんかったわ
画像付きでどうしたいのか説明してくれんかね
651: 01/26(日)14:54 ID:WMeA3DrY(1) AAS
エクスプローラー再起動で反映されない?
652
(1): 01/26(日)15:05 ID:4xEs3XpP(1) AAS
バッチでHexからBase58へ変換したい
可能ですか?

参考
learnmeabitcoin.com/technical/keys/base58/
653: 01/26(日)15:20 ID:atsgMxQf(1) AAS
Base64ならCertUtilでできるがBase58のコマンドはない
そのリンク先にRubyのコードがあるから参考にしたら
654: 02/06(木)21:17 ID:TFp3Dqlz(1) AAS
batで最も重要な構文
これさえマスターすればどんな複雑な処理も書ける

set tempfn=%temp%\%random%_%random%_%random%.txt

yourcommand "%tempfn%"
or yourcommand > "%tempfn%"

for /f %%i in (%tempfn%) do call :each "%%~i"
del "%tempfn%"
goto :eof

:each
echo eachline:[%*]
goto :eof
655
(1): 02/12(水)16:52 ID:oMyiCtXq(1) AAS
@echo off & setlocal enabledelayedexpansion & set "h=" & set "b="
set "a=123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
set /p "h=Hex=" & set "c=!h!a" & set "z=%a:~0,1%" & set /a n=0
:1
if defined h (set /a n+=1) else goto 2
set /a "d%n%=0x%h:~-6%" & set "h=%h:~0,-6%" & goto 1
:2
set /a e=0,f=0 & for /L %%i in (%n%,-1,1) do (
set /a "d%%i+=e<<24,e=d%%i%%58,f|=d%%i/=58")
set "b=!a:~%e%,1!%b%" & if %f% neq 0 goto 2
if "%b%"=="%z%" set "b="
:3
if "%c:~0,2%"=="00" set "b=%z%%b%" & set "c=%c:~2%" & goto 3
if defined b echo Base58=%b% & pause
656: 02/16(日)04:09 ID:Nn6kjJ7X(1) AAS
set
foo.exe
set
としたときにfoo.exe内で書き換えた環境変数を
呼び出し側が取り込むことってできないの?
バッチ同士ならcallで行けるけどそんな感じで
657: 02/16(日)06:41 ID:51aCbtwK(1/4) AAS
俺もよく分かってないけど、
環境変数って大本はレジストリに入ってる
で普通は各々のプロセスで環境変数のインスタンスが生成されてそれを弄ることになる
サブプロセスを生成した場合は親の環境がコピーされていてそれを弄ることになる
そうならサブプロセスが終了した後ではもう残っていないことになる
サブプロセス(foo.exe)がどこの環境変数を弄るかによる
それともレジストリを書き換えたのか?
658: 02/16(日)08:16 ID:nK83B1eq(1) AAS
プロセス終了後に弄った環境変数を取得?
そんなの簡単にできたらセキュリティーホールになりそう
659: 02/16(日)11:25 ID:51aCbtwK(2/4) AAS
すごいシステムの下層レベルだと出来る方法があるのかも知れないけど
通常はプロセスは各々独立してて他プロセスのメモリ空間は共有されない
660: 02/16(日)14:24 ID:51aCbtwK(3/4) AAS
Linuxだと子プロセスから親プロセスに引き継ぐことができるらしい
(親プロセスが子プロセス生成時に親プロセス側でsourceコマンドを実行)
が、やっぱりWindowsでは無いみたい
外部リンク:learn.microsoft.com
>既定では、子プロセスは親プロセスの環境ブロックのコピーを継承します
>プロセスの作成時に子プロセスの環境変数を変更することは、1 つのプロセスが別のプロセスの環境変数を直接変更できる唯一の方法です。 プロセスは、そのプロセスの子ではない別のプロセスの環境変数を直接変更することはできません。
661: 02/16(日)14:29 ID:51aCbtwK(4/4) AAS
なので現実的な方法としては
foo.exeで渡したい情報はファイルか標準出力で親プロセスに渡せばいいと思う
662: 02/17(月)08:27 ID:oRb3RUoY(1) AAS
無理なのか
何が何でもという事もないので
受け渡し用tempファイルでやることにするよ
サンクス
663: 02/17(月)23:32 ID:l9ByBUai(1) AAS
for %%A in(*.xlsx *.xls)←ループ処理する時に、
*.xlsと*.xlsxを指定したら.xlsxは2回実行されてしまう。
*.xlsだけ指定すると1回だけ実行される。

含むではなくて、*.xlsで終わるか*.xlsxで終わるものを指定する検索はどうしたら出来ますか?
664: 02/18(火)00:40 ID:iDsz3WKD(1) AAS
findstrで自己解決しそう、ありがとう兄妹ノシ
665
(1): 02/18(火)17:36 ID:GcWP7NNv(1) AAS
for %%A in (*.xls?) じゃダメなの?
.xlsaとか.xlsbなんてファイル普通ないでしょ
666: 02/18(火)17:39 ID:IbEo812m(1) AAS
>>665
*.xlsだけでも同じだぞ
DOSネームとの互換機能だぞ
667
(1): 02/18(火)18:45 ID:TLR0SIQr(1/2) AAS
dir /b|findstrよりももしかしたら遅いかもしれんが
for /f "tokens=* delims=" %%i in ('forfiles /m *.xls') do @echo %%~i
668: 02/18(火)19:16 ID:naPa9y/a(1) AAS
?は付けとけ
環境に依存する
669: 02/18(火)19:20 ID:TLR0SIQr(2/2) AAS
要件とは別に.xlsと.xlsxとを区別するものを上げただけ
あとはよろしく
670: 02/20(木)00:56 ID:OIbQhS2Y(1) AAS
みんなありがとう
後ろに?は全然思いつかなかった。
因みにfindstrは挫折した。

>>667
これは難しくて分からんからもうちょっと調べてくる㌧
671: 02/24(月)09:10 ID:c2/p8Qwq(1) AAS
フォルダの中に
ファイル名にシングルクォートが入ってるファイルが複数あって
シングルクォートだけ一気に削除する簡単な方法ない?
ファイルの削除じゃなくて
672: 02/24(月)09:14 ID:K9TE8hB9(1) AAS
powerqueryかな
1-
あと 147 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.012s