23/06/13 10:09:20.96 RNzu8ICZ.net
ググっても書式バラバラだわ実行したらエラーメッセージ出るわ、もうわからん助けて・・・。
やりたいこと:ファイル名ごとに渡すプログラムを変えたい。
わからないこと:
if 変数==内容(分岐処理)でいいのか、if 変数==内容 分岐処理なのかサイトによってバラバラだし
どっちにしてもelseなんて定義されてねーよばーかって出てしまう。
条件分岐の書式を教えてください。
参考にしたサイトの1つ:www.javadrive.jp/command/bat/index8.html
希望する処理内容:
処理用フォルダを丸ごとBatファイルにSendto
ファイル名にcoが含まれるJPG、Webp、PNGは、cov.exeに投げる
ファイル名にautoが含まれるJPG、Webp、PNGは、auro.exeに投げる
ファイル名にrecが含まれるJPG、Webp、PNGは、rec.exeに投げる
今書いてる内容:これでelse?は?と言われる
URLリンク(imepic.jp)
320:デフォルトの名無しさん
23/06/13 10:11:36.00 RNzu8ICZ.net
まちがえた、こっち
URLリンク(imepic.jp)
321:デフォルトの名無しさん
23/06/13 10:14:16.97 sYfPkaoR.net
C++でランチャー作るほうが楽そう
322:デフォルトの名無しさん
23/06/13 10:19:37.96 v41Gwse2.net
>>319
画像が見えないけど
多分、if文が終了しててelseが単独で出てくるのでエラーになってるんだと思う
下のように書けば問題ないはず
if 変数==文字列 (
処理群
) else (
処理群
)
if 変数==文字列 処理 else 処理
if 変数==文字列 処理 else (
処理群
)
こういうのはエラーになる
if 変数==文字列 (処理)
else (命令)
323:デフォルトの名無しさん
23/06/13 10:23:02.74 xwoVSiEY.net
見えんけどbatの分岐はgoto使え
324:320
23/06/13 10:32:32.52 RNzu8ICZ.net
ごめんー(::)
URLリンク(imepic.jp)
GOTOまぜちゃってるせいかな・・・
(これも実は初めて知った処理だったりする・・・
325:デフォルトの名無しさん
23/06/13 10:36:13.21 RNzu8ICZ.net
書式いろいろあるんですね・・・
Perl風にelsifって書いてみたりしました(苦笑)
>if 変数==文字列 処理 else 処理
>if 変数==文字列 処理 else (
>処理群
>)
処理が1行で終わる場合は上、複数行にわたるなら下という理解でいいですか?
326:デフォルトの名無しさん
23/06/13 10:52:25.04 xwoVSiEY.net
素人に()を使いこなすのは無理
if で * なんか使えるわけね~だろ
もっと高級な言語で作ってから出直せ
327:デフォルトの名無しさん
23/06/13 11:10:48.21 RNzu8ICZ.net
>>326
そうなんですねorz
その辺ググっても取っ散らかってて情報が・・・なんかもう・・・ごめん
Batファイルはファイルの移動・コピー・フォルダ一括作成・formatくらいしか使ったことなくてねorz
エクスプローラでファイル名検索→複数のBatファイルとかやってるのすら面倒になったところなんだが
堪能に使えるプログラム言語はないのでもうしょうがないかなorz
328:デフォルトの名無しさん
23/06/13 11:28:39.90 v41Gwse2.net
>>327
こんな感じでいいのでは?
:loop
set fname=%~1
shift
if not defined fname goto :eof
if "%fname:~0,2%" equ "ac" "c:\cov.exe" ~
if "%fname:~0,2%" equ "au" "c:\auro.exe" ~
timeout 1
goto :loop
又は
if "%fname:ac=%" neq "%fname%" "c:\cov.exe" ~
329:デフォルトの名無しさん
23/06/13 13:37:35.35 lkLOH6hL.net
素直にif文書くとこんなん。※インデントは全角スペース
:loop_begin
if "%~1" == "" goto loop_end
echo,%~nx1| findstr /ri /c:"co" >nul 2>nul
if not errorlevel 1 (
cov.exe "%~dpnx1"
) else (
echo,%~nx1| findstr /ri /c:"auto" >nul 2>nul
if not errorlevel 1 (
auto.exe "%~dpnx1"
) else (
echo,%~nx1| findstr /ri /c:"rec" >nul 2>nul
if not errorlevel 1 (
rec.exe "%~dpnx1"
)
)
)
shift & goto loop_begin
:loop_end
Perl知ってるなら大丈夫だと思うけど
「を含む」じゃなくて「で始まる」なら>>328か「^」を付け「/c:"^co"」とかに。
330:デフォルトの名無しさん
23/06/13 13:47:29.71 lkLOH6hL.net
「&&」と「||」使うとこう。※記述量は減るがマイナー。
echo,%~nx1| findstr /ri /c:"co" >nul 2>nul && (
cov.exe "%~dpnx1"
) || (
echo,%~nx1| findstr /ri /c:"auto" >nul 2>nul && (
auto.exe "%~dpnx1"
) || (
echo,%~nx1| findstr /ri /c:"rec" >nul 2>nul && (
rec.exe "%~dpnx1"
)
)
)
フラグ使うとこう。
set result=
for %%A in (rec auto co) do (
echo,%~nx1| findstr /ri /c:"%%A" >nul 2>nul && set result=%%A
)
if "!result!" == "co" cov.exe "%%~dpnx1"
if "!result!" == "auto" auto.exe "%%~dpnx1"
if "!result!" == "rec" rec.exe "%%~dpnx1"
複数マッチする事がない、または複数マッチして複数実行してよいなら
バッチにディレクトリパス渡してこう。(gotoのループ無し)
for %%A in ("%~1\*co*") do (cov.exe "%%~A")
for %%A in ("%~1\*auto*") do (auto.exe "%%~A")
for %%A in ("%~1\*rec*") do (rec.exe "%%~A")
331:デフォルトの名無しさん
23/06/13 16:32:40.78 3egukpPD.net
文字列に特定の文字列が含まれるかを見たいときに私なら
if not "%aaa%"=="%aaa:foo=%" (処理)
と、元の文字列の入った変数から特定の文字列を抜き取ったときに
イコールにならないことで含まれてることを判断してるんだけど
これってマイナーなのかな?
332:デフォルトの名無しさん
23/06/13 18:38:43.90 lkLOH6hL.net
>>328もその方法だし、マイナーって事はないと思う。
if文本体だとANDとかORを表現し辛くて自分はfindstrにしがち。
今回だと拡張子の条件(jpg, jpeg, webp, png?)のいずれかにマッチしたら目的の処理、
またはいずれにもマッチしなかったらgoto next_loop、みたいな場合に楽。
333:デフォルトの名無しさん
23/06/13 19:02:49.89 /Xa1+9fb.net
>>330
「&&」と「||」ってそういう書き方出来るんだ知らなかった
334:328
23/06/14 00:17:35.54 l4KAyHVD.net
>>328-332
いろんな書き方があるんですね・・・ありがとうございます。
(1)とか(2)があるとスルーされるので、また調べます。
感謝!
335:デフォルトの名無しさん
23/06/14 01:04:20.11 8vZ7BVQu.net
PowerShell を使いな
漏れは、Ruby だけど
336:デフォルトの名無しさん
23/06/15 07:11:35.58 VQiSmQhF.net
terapadなつい
テキストコピペでいいのになぜ画像
337:デフォルトの名無しさん
23/06/29 22:56:13.24 2AoYQptZ.net
あるフォルダの中のファイルにたいして定期的にプログラムを実施したいのですが、前回実行したあと追加されたファイルに実施というロジックだとどのように実装するのがリーズナブルでしょうか?
338:デフォルトの名無しさん
23/06/29 23:31:28.60 xErdDB4N.net
ぜんぜんわからん
まず質問をリーズナブルに書け
339:デフォルトの名無しさん
23/06/29 23:50:20.15 v2Nfxu0l.net
>>337
プログラムを実行したファイルを削除する。
340:デフォルトの名無しさん
23/06/29 23:59:37.76 2AoYQptZ.net
>>339
実行エラーした場合の対応が複雑になりそうで
341:デフォルトの名無しさん
23/06/29 23:59:54.09 8Orz0VrB.net
>>337
月のはじめに自分で削除
342:デフォルトの名無しさん
23/06/30 00:04:29.96 0Iq5JqfB.net
>>341
1時間間隔なので
343:デフォルトの名無しさん
23/06/30 00:26:27.50 5iDE7+iq.net
>>340
なんで?
344:デフォルトの名無しさん
23/06/30 00:35:49.00 ow+yGKXV.net
ファイルの総数によってもコードが変わってくるからいくつくらいのファイルを触りたいのか教えてくれ
345:デフォルトの名無しさん
23/06/30 07:06:37.99 y1MImIiE.net
誰かが勝手にタイムスタンプをいじったりしないって前提だけど
前回の最新タイムスタンプか、そのファイル名自体をどこかに保存しておいて
それより新しいファイルだったら処理
346:デフォルトの名無しさん
23/06/30 09:08:51.37 pv7EwXK7.net
「追加されたファイル」ってなあに?
余所にあった古いファイルをコピーしたら
更新日時は古いままだけど
347:デフォルトの名無しさん
23/06/30 10:28:33.45 u+TfOZmJ.net
実行済のファイルは別フォルダに移動が楽だろ
348:デフォルトの名無しさん
23/06/30 12:14:39.24 0Iq5JqfB.net
>>347
ですよね。
このフォルダのファイルからデータ取ってる人もいて
調整が必要で
349:デフォルトの名無しさん
23/06/30 14:03:26.68 pv7EwXK7.net
処理後にarchive属性をオフにしたら?
350:デフォルトの名無しさん
23/06/30 15:56:39.55 YeFfrwhl.net
現れたなら聞かれた質問にくらい答えろよ
351:デフォルトの名無しさん
23/07/01 00:26:35.37 xI+Y6sFQ.net
>>348
後だし情報
352:デフォルトの名無しさん
23/07/01 05:09:14.98 nMEzWNF9.net
タイムスタンプを記録しておく
初回は1970年以後で、年月日時分秒_1 以前のファイルを処理する。
次回は年月日時分秒_1 以後で、年月日時分秒_2 以前のファイルを処理する
353:デフォルトの名無しさん
23/07/01 09:52:48.59 UDkRE5jB.net
追加ファイルの性質でアトリブートもタイムスタンプも使えるかどうかわからん
質問してる人がいるが回答が無いので
354:デフォルトの名無しさん
23/07/04 17:06:41.56 LIey+Zab.net
作ってみました。行数ギリギリです。
355:デフォルトの名無しさん
23/07/04 17:08:44.07 LIey+Zab.net
@echo off
setlocal enabledelayedexpansion
set update=update.txt
set temp=temp.txt
set ignore=%update% %temp% %~nx0
set /A num=last=0
if exist %update% (
sort /R %update% > %temp%
set /P line=< %temp%
echo 前回更新日時 !line!
if "!line:~,16!"=="%date% %time:~0,5%" (
echo 更新が早すぎます しばらくお待ちください
:loop
if "!line:~11,5!"=="%time:~,5%" goto loop
)
set last=!line:~0,4!!line:~5,2!!line:~8,2!!line:~11,2!.!line:~14,2!
) else echo 初回更新です
dir /A-D /OD | findstr /R "^20[0-9][0-9]" | findstr /V "%ignore%" > %temp%
for /F "delims=" %%f in (%temp%) do (
set line=%%f
set ftime=!line:~0,4!!line:~5,2!!line:~8,2!!line:~12,2!.!line:~15,2!
if !last! lss !ftime! (
set fname=!line:~36!
echo [処理中] !fname! (処理をこの後に入れる)
set /A num+=1
))
if !num! equ 0 (
echo 更新ファイルはありません
) else (
echo %date% %time:~0,5% >> %update%
echo !num! のファイルを更新し %update% に更新日時を追記しました
)
356:デフォルトの名無しさん
23/07/04 17:38:18.81 LIey+Zab.net
ファイルのタイムスタンプが前回更新日時より後かどうかのみ見ています。
もしも、分まで同じであれば更新しません。
前回更新日時と現在日時が分まで同じなら、1分進むまで待ちます。
なんとなく、同じ日時が更新記録に残るというのが気持ち悪いからです。
357:デフォルトの名無しさん
23/07/04 20:16:07.96 dJR+6uCy.net
お疲れ
358:デフォルトの名無しさん
23/07/04 21:21:28.53 +24T6cXg.net
ファイルの取り扱いにもよるけど
タイムスタンプでの管理はあまりよくないと思う
俺は結構ちょこちょこいじっちゃうのでタイムスタンプでは新旧の区別がつかなくなることが多い
359:デフォルトの名無しさん
23/07/04 21:30:04.96 +24T6cXg.net
あとtmp,temp環境変数の書き換え
とくにフォルダとして使ってるものをファイル名にするのは危険
cmdの世界ではtmpがダメだがtempも使わないほうが良い
360:デフォルトの名無しさん
23/07/04 21:31:31.54 9emtMuJF.net
リーズナブルな実装とは何だったのか
361:デフォルトの名無しさん
23/07/04 23:34:33.25 LIey+Zab.net
temp の件は setlocal を使っているとはいえ、確かにタブーみたいなので変更しました。
タイムスタンプの件は、後でいじったファイルに対して再度作業を実行するかどうかの問題ですね。
そこら辺は、質問者が条件を書いてないので不明ですが、私はいじったファイルについても再度実行
するんじゃないかなと思ったので(それに簡単なので)そうしました。
1度実行したファイルには2度と実行しないのなら、終わったファイルはリネーム(例えば頭に _ を付加)
するとかして除外するか、終わったファイルリストを書き出してそれをチェックするとかですかね。
他のフォルダへ移動するのが最もいいと思うけど、なんだか都合が悪いみたいなので。
362:デフォルトの名無しさん
23/07/04 23:36:37.60 LIey+Zab.net
@echo off
setlocal enabledelayedexpansion
set update=update.txt
set ichiji=temp.txt
set ignore=%update% %ichiji% %~nx0
set /A num=last=0
if exist %update% (
sort /R %update% > %ichiji%
set /P line=< %ichiji%
echo 前回更新日時 !line!
set last=!line:~,4!!line:~5,2!!line:~8,2!!line:~11,2!.!line:~14,2!
if "!line:~,16!"=="!date! !time:~,5!" (
set /A sec=160-1!time:~6,2!
echo 更新が早すぎます !sec! 秒お待ちください
:loop
if "!line:~11,5!"=="!time:~,5!" goto loop
)
) else echo 初回更新です
dir /A-D /OD | findstr /R "^20[0-9][0-9]" | findstr /V "%ignore%" > %ichiji%
for /F "delims=" %%f in (%ichiji%) do (
set line=%%f
set fname=!line:~36!
set ftime=!line:~,4!!line:~5,2!!line:~8,2!!line:~12,2!.!line:~15,2!
if !last! lss !ftime! (
echo [処理中] !fname! (処理をこの後に入れる)
set /A num+=1
)
)
if !num! neq 0 (
echo %date% %time:~0,5% >> %update%
echo !num! のファイルを更新し %update% に更新日時を追記しました
) else echo 更新ファイルはありません
363:デフォルトの名無しさん
23/07/05 06:45:40.73 Ig34wRo0.net
time /t だと 06:00 なのに echo %time% だと 6:00:00.00 になる。
なんで、%time% だと頭の 0 がスペースになるんだよ。
おかげで余計なバグができちゃったじゃないか。
というわけで、バグ取りました。って誰も見てないか・・・。
364:デフォルトの名無しさん
23/07/05 06:55:43.15 Ig34wRo0.net
@echo off
setlocal enabledelayedexpansion
set dispskip=0
set update=update.txt
set ichiji=temp.txt
set ignore=%update% %ichiji% %~nx0
set /A num=last=0
if exist %update% (
sort /R %update% > %ichiji%
set /P line=< %ichiji%
echo 前回更新日時 !line!
set /A sec=160-1!time:~6,2!
if "!line:~,16!"=="!date! !time:~,5!" if sec gtr 2 echo 更新が早すぎます !sec! 秒お待ちください
:loop
if "!line:~11,5!"=="!time:~,5!" goto loop
set last=!line:~,4!!line:~5,2!!line:~8,2!.!line:~11,2!!line:~14,2!
if "!last:~9,1!"==" " set last=!last:~,9!0!last:~10!
) else echo 初回更新です
dir /A-D /OD | findstr /R "^20[0-9][0-9]" | findstr /V "%ignore%" > %ichiji%
for /F "delims=" %%f in (%ichiji%) do (
set line=%%f
set fname=!line:~36!
set ftime=!line:~,4!!line:~5,2!!line:~8,2!.!line:~12,2!!line:~15,2!
if !last! lss !ftime! (
echo [処理中] !fname! (処理をこの後に入れる)
set /A num+=1
) else if %dispskip% neq 0 echo スキップ !fname!
)
if !num! neq 0 (
echo !date! !time:~,5! >> %update%
echo !num! のファイルを更新し %update% に更新日時を追記しました
) else echo 更新ファイルはありません
365:デフォルトの名無しさん
23/07/05 12:49:58.80 Ig34wRo0.net
よく見ると ! ではさむのを忘れとるじゃないか。
if "!line:~,16!"=="!date! !time:~,5!" if sec gtr 2 echo 更新が早すぎます !sec! 秒お待ちください
これは正しくはこうですね。(2秒以下の場合でも表示されていただけ)
if "!line:~,16!"=="!date! !time:~,5!" if !sec! gtr 2 echo 更新が早すぎます !sec! 秒お待ちください
366:デフォルトの名無しさん
23/07/05 12:59:13.87 jlkBTxWV.net
powershellで書いたら1~数行だね
ふぅ
367:デフォルトの名無しさん
23/07/05 13:43:04.59 hRO8F47X.net
数行なら書いて差し上げたら
もう見ていないかも知れないけど
368:デフォルトの名無しさん
23/07/05 18:25:05.99 4rZ7+jZr.net
>>366
スレ違いとかいわないから後学のために記載して
369:デフォルトの名無しさん
23/07/05 23:14:29.51 TBtlNfRd.net
バッチファイル不具合あるあるの日付またぎの対処が見当たらないな
やり直し
370:デフォルトの名無しさん
23/07/06 00:41:50.43 X7484ET/.net
あぁ、もしかして、あれか、最後に update.txt に日付と時刻を追記する部分で、日付を取得した後、
時刻を取得する際に翌日になっているというまさに奇跡のタイミングのことを言ってるのか?
そんな時間にバッチを動かすとも思えんし、実際にその状態を発生させようと思っても起こらないだろう。
そのような超レアケースに無駄に頭と行を使うのはアホらしいが、まぁ、やってやるよ。
set date0=!date!
set time0=!time!
if not !date0!==!date! if !time0:,2! equ 0 set date0=!date!
echo !date0! !time0:~,5! >> %update%
はい、アップデート完了!
371:デフォルトの名無しさん
23/07/06 00:44:25.38 X7484ET/.net
ごめん、~ が抜けてた。
set date0=!date!
set time0=!time!
if not !date0!==!date! if !time0:~,2! equ 0 set date0=!date!
echo !date0! !time0:~,5! >> %update%
372:デフォルトの名無しさん
23/07/06 00:50:56.85 X7484ET/.net
まぁ、実際はその if 以下へたどりつくことは決してないだろうから、間違えていても同じかもな。
373:デフォルトの名無しさん
23/07/06 00:56:57.29 X7484ET/.net
よく考えたらこれでも同じか。
set date0=!date!
set time0=!time!
if !time0:~,2! equ 0 set date0=!date!
echo !date0! !time0:~,5! >> %update%
374:デフォルトの名無しさん
23/07/06 07:56:07.79 kQU1BcI/.net
考慮不要なレアケースではない。
例えば自ホストの時計がジョブスケジューラサーバ等の時計より少し遅れていると発生する。
「サンプルコードだから入れてない」なら分かる。
375:デフォルトの名無しさん
23/07/06 10:18:12.37 X7484ET/.net
そんなのバッチの中で対応するより、自動バッチ実行する時刻を 0時にしなければいい。
そもそも、同じシステム上の同じバッチの同じ行で、date を取得した後 time を取得したら
日付が変わっていましたなんて、レア中のレア。
チャンスは1日に1回しかないし、発生させようと思ってやってみても絶対に無理だろ。
逆に、万一発生したらお祝いのメッセージを表示させたいぐらいだわ。
set date0=!date!
set time0=!time!
if not !date0!==!date! if !time0:~,2! equ 0 (
set date0=!date!
echo すばらしい!奇跡的なタイミング!おめでとう!
echo 0123456789a | choice /C a > nul
)
echo !date0! !time0:~,5! >> %update%
376:デフォルトの名無しさん
23/07/06 11:06:32.28 X7484ET/.net
対策なしの 1行だった時よりも、対策して行を分けたことで、現象の発生率は上がるだろう。
それでも、実際に現象を発生させて動作検証をするのは絶対に無理だな。
まぁ、これでいいんじゃね?ただ、さすがに 10回ビープ音を鳴らすのはやりすぎたかな?
377:デフォルトの名無しさん
23/07/06 17:32:04.66 T1YQhEvz.net
簡単バッチ。初回は処理しない。
2回目からendより新しいファイルを処理。
@echo off & chcp 65001 & set "a=begin" & set "b=end" & set "c="
if not exist "%b%" copy nul "%b%" & timeout /t 1
copy nul "%a%"
for /f "delims="eol^= %%i in ('dir /a-d-s-h /b /o-d') do (
if "%%i"=="%b%" (goto x) else if "%%i"=="%a%" (set c=1) else (
if defined c hoge.exe "%%i"))
:x
del "%b%" & ren "%a%" "%b%" & pause
378:デフォルトの名無しさん
23/07/06 18:41:00.40 X7484ET/.net
それだと初回実行時より前のタイムスタンプのファイルは決して処理されないじゃん。
てか、コードページを変えたら戻しとけ。
379:デフォルトの名無しさん
23/07/06 18:47:20.96 X7484ET/.net
いや、それより、一番の問題はファイルを処理したらそのファイルのタイムスタンプ変わるから、
毎回同じファイルを処理してしまうんじゃね?これはひどい。
380:デフォルトの名無しさん
23/07/06 19:55:42.19 T1YQhEvz.net
すまん。書き直した。
@echo off & chcp 65001 & set "b=end"
for /f "delims="eol^= %%i in ('dir /a-d-s-h /b /o-d') do (
if "%%i"=="%b%" (goto x) else echo hoge.exe "%%i")
:x
copy nul "%b%" & chcp 932
これ、バッチ処理中に追加ファイルあると不味いな
381:デフォルトの名無しさん
23/07/06 22:30:39.49 X7484ET/.net
早速の修正お疲れ様。
今回のは処理後即画面消える以外問題ないようだね。
で、勝手にいじらせてもらってリスト方式に変えてみた。
hoge.exe で処理したファイルの名前を list.txt に追記。
再度処理したければ、list.txt のそのファイルの行をエディタで削除。
これだと、バッチ処理中の追加ファイル問題も起こらない。
@echo off
chcp 65001
rem skip したファイルの名前を表示するフラグ
set f=1
set t=list.txt
if not exist %t% copy nul %t% > nul
for /f "delims="eol^= %%i in ('dir /a-d-s-h /b') do (
find "/%%i/" %t% > nul
if errorlevel 1 (
echo hoge.exe "%%i"
rem このバッチ中で処理する場合はここに入れる
echo /%%i/>> %t%
) else if %f% neq 0 echo skip "%%i"
)
pause
chcp 932
ところで、コードページを変えている理由は何?
hoge.exe に渡すファイル名関係か何か?
382:デフォルトの名無しさん
23/07/06 22:32:33.96 gWNyo9yQ.net
最近はファイル名にユニコード文字を使うことも多いからなあ
383:デフォルトの名無しさん
23/07/06 22:54:45.39 T1YQhEvz.net
どうもありがとう。
コードページはコマンド出力に影響する。
932だとユニコード特有な文字は変数に正しく入らない。
for %%i in (*) だと問題ないけど日時ソートされないし。
コードページが変わると画面が一旦消えるのが厄介。
65001だとバッチファイルの文字コードに注意。
384:デフォルトの名無しさん
23/07/06 23:08:10.36 X7484ET/.net
高度なコードの解説ありがとう。
ファイル名には普通の半角文字しか使わないので知らなかった。
そういう場合については変えなくていいということかな?
385:デフォルトの名無しさん
23/07/06 23:12:39.29 T1YQhEvz.net
コマンドのリダイレクトで化けない文字なら問題ないはず
386:デフォルトの名無しさん
23/07/07 04:34:24.45 KFogdpBJ.net
おやじギャグ
387:デフォルトの名無しさん
23/07/07 07:40:59.89 T33gGQqj.net
こうやって、自分自身と list.txt を除外しておけばよかったわ。
他にも除外したいファイルがあったらファイル名の前後に / つけて list.txt に書き足せばいい。
一応、こんな風に / で区切れば、1行に複数のファイル名が書けるよ。
あ、もちろん、ワイルドカードは使用できませんので念のため。
if not exist %t% echo /%~nx0/%t%/> %t%
388:デフォルトの名無しさん
23/07/07 10:20:29.14 tybFBPle.net
誰も使わんから大丈夫だよ
389:デフォルトの名無しさん
23/07/07 10:41:17.49 EBn5GntH.net
特殊だよね
普通なら処理済のサブフォルダでも作って移動させとくよ
あと個人的に使うならattributeの属性でやるかもしれん
390:デフォルトの名無しさん
23/07/07 11:39:17.55 xjbAveHj.net
曖昧な質問にここまで労力をかけるのか
391:デフォルトの名無しさん
23/07/07 13:22:29.08 vTnbMP+F.net
アホだなーって思いながら見てたが
ファイルスタンプや日付関係はpowershellでやったら一瞬で終わるから検討しなよ
392:デフォルトの名無しさん
23/07/07 14:01:04.13 tybFBPle.net
バッチファイルが糞すぎるだけでその程度なら別にvbs(wsh)でもいいけどな
393:デフォルトの名無しさん
23/07/07 14:50:24.72 T33gGQqj.net
このスレへ書かれたわけだから、敢えてバッチファイル縛りのマゾプレイしてるけど、
何使ってもいいのなら、一番長く使ってきて慣れている C で書くよ。高速だし。
394:デフォルトの名無しさん
23/07/07 18:37:24.24 GxNDHmP5.net
俺はC++
395:デフォルトの名無しさん
23/07/07 18:42:51.15 KFogdpBJ.net
>>393
確かにマゾにピッタリだよ、バッチ
396:デフォルトの名無しさん
23/07/07 20:54:22.80 62nZLiJF.net
昔はまともなコンパイラなんて何万円もしたからな
バッチなんて使っているのはその世代だろ
397:デフォルトの名無しさん
23/07/08 00:17:19.33 7l9oEDc+.net
オプションや設定で1回のバッチでは指定ソフトが1回しか起動しないようにってできないでしょうか
398:デフォルトの名無しさん
23/07/08 01:48:11.75 8phSh46w.net
>>385
dir > con で ? 文字になるファイル名だろ
399:デフォルトの名無しさん
23/07/08 09:46:44.59 l5c+v8IK.net
バッチ書いてて一番むかつくのは、0 で始まる数字(0x 以外)は 8 進数扱いになる点。
だから、%time% から分や秒を取り出して計算に使おうとして、例えば
set /a s=60-%time:~6,2%
と書いたら、08秒と 09秒の時に「無効な数字です」と怒られるので
set /a s=160-1%time:~6,2%
とか書くことになる。8進数は滅多に使わないから、それより 2 進数に対応しろと言いたい。
%time% で時間の 10 の位が 0 の時スペースになるのは、8進数になるのを防ぐためだろう。
400:デフォルトの名無しさん
23/07/08 10:18:28.62 iRLmrC8y.net
いまさら何をいってもcmdは変わらん。署名が変わるだけ
ターミナルはwtが追加されたけど
401:デフォルトの名無しさん
23/07/08 19:09:21.78 wtJKE3gc.net
>>396
Zortech C++ 1.0持ってたけど
バッチはバッチ
使い分けてたよ
402:デフォルトの名無しさん
23/07/08 19:10:18.13 wtJKE3gc.net
mifes起動するのにいちいちspawnとか
そういうマゾプレーはしてなかった
403:デフォルトの名無しさん
23/07/09 07:40:38.97 oyETgJfu.net
自分が使っていたのは VZ Editor だったな。
バイトやってたところのシステムは CP/M (80) で WordMaster を使ってた。
404:デフォルトの名無しさん
23/07/23 13:16:59.81 zPqD9Olc.net
実現したいこと:Windowsのデバイスマネージャでデバイスの有効無効を判定した上で切り替えたい
考えたこと :devcon status [ID] で条件判定して有効無効切り替えられるのでは?
内容
devcon status [ID]
でデバイスの状態は表示される
例 有効の場合
>devcon status "USB\VID_9886&PID_0038&REV_0000&MI_00"
USB\VID_9886&PID_0038&MI_00\B&9AE5250&0&0000
Name: Astro MixAmp Pro Voice
Driver is running.
1 matching device(s) found.
例 無効の場合
devcon status "MLX4\ConnectX-3_Eth"
MLX4\CONNECTX-3_ETH\9&1A1922BF&0&01
Name: Mellanox ConnectX-3 Ethernet Adapter #2
Device is disabled.
1 matching device(s) found.
なので
Driver is running. なら devcon disable [ID] でデバイスを無効に
Device is disabled. なら devcon Enable [ID] でデバイスを有効 に切り替えたいと考えています
使い方が間違ってなければ %ERRORLEVEL% での戻り値はなさそうなので
実行した際に表示される画面等から 文字列検索かけて条件分岐みたいなことをできればいいなと思っています
別にバッチにこだわってることは無いのでもしほかに手っ取り早く実現できる方法等あったらアドバイスいただけると嬉しいです
405:デフォルトの名無しさん
23/07/23 21:05:51.47 JLqJNtpp.net
set id="~"
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "delims=" %%i IN ('devcon status !id!') DO (
set a=%%i
if "!a!" NEQ "!a:Driver is running=!" devcon disable !id! & goto :eof
if "!a!" NEQ "!a:Device is disabled=!" devcon enable !id! & goto :eof
)
管理者権限で実行
複数の matching の場合はどうなるか知らない
406:デフォルトの名無しさん
23/07/24 14:53:52.19 NSMDQXn9.net
もぉえぇよデブコン
407:デフォルトの名無しさん
23/07/24 18:12:41.71 BcRhQVe4.net
最初にデバイスマネージャを開くなら
そこで指定した方が早いんじゃね
なぜバッチ?
408:デフォルトの名無しさん
23/07/24 23:51:25.15 wZUfbAlM.net
WMI(CIM)が楽かな。
powershellでもVBScriptでもwmicでもお好きなもので。
PowerShell版:
$enabledCd = 0
$disabledCd = 22
$methodName = $null
$device = Get-CimInstance -Query 'select * from Win32_PnpEntity where Name = "Fax"'
if ($device.Status -eq 'OK' -and $device.ConfigManagerErrorCode -eq $enabledCd) {
$methodName = 'Disable'
}
elseif ($device.Status -eq 'Error' -and $device.ConfigManagerErrorCode -eq $disabledCd) {
$methodName = 'Enable'
}
if (! [string]::IsNullOrEmpty($methodName)) {
$result = Invoke-CimMethod -InputObject $device -MethodName $methodName
$result
}
ワンライナー版:
powershell -c "$d=gcim -cl Win32_PnpEntity -f 'Name=''Fax'''; $s,$c=$d.Status,$d.ConfigManagerErrorCode; if($n=if($s -eq 'OK' -and $c -eq 0){'Disable'}elseif($s -eq 'Error' -and $c -eq 22){'Enable'}){$d|icim -m $n}"
409:デフォルトの名無しさん
23/07/24 23:59:01.49 wZUfbAlM.net
「楽」って書いたけど別に楽ではないな。
devcon入ってない場合に入れなくて済むくらいか。
410:デフォルトの名無しさん
23/07/25 07:07:55.47 xE3c+p8T.net
>>409
pnputilもあるでよー
411:デフォルトの名無しさん
23/07/25 14:01:51.30 ES/uzWz0.net
vbsで動くっぽいし、それが一番軽いかな
バッチ 行解釈が遅い
PS 起動が遅い
412:デフォルトの名無しさん
23/07/26 01:41:27.08 HHyO4+3x.net
>>405 >>408
ありがとうございます
413:デフォルトの名無しさん
23/08/24 17:51:23.10 C9P8zR3M.net
copyってコピー元ファイルがない時は標準出力にコピー先のフォルダがない場合は標準エラー出力にエラーメッセージ出るのか?
何のため…
414:デフォルトの名無しさん
23/08/24 21:56:13.39 W+JHQ2GG.net
ここはコマンド七不思議を議論するスレじゃねえんだよハゲ
415:デフォルトの名無しさん
23/08/25 00:42:24.04 6hVx8Trp.net
シェルスレでは七不思議も話題にできるのに
416:デフォルトの名無しさん
23/08/25 01:13:18.62 icN/kxtu.net
ハゲじゃない人は何を議論したいのか教えて下さい
417:デフォルトの名無しさん
23/08/25 12:27:27.06 8hrP4A7s.net
場合分け出来るので、使う人にとって便利だから
418:デフォルトの名無しさん
23/08/25 12:27:29.53 8hrP4A7s.net
場合分け出来るので、使う人にとって便利だから
419:デフォルトの名無しさん
23/08/25 13:01:08.75 6hVx8Trp.net
エラーはエラーなんだから標準エラー出力に出てくれないと困る
420:デフォルトの名無しさん
23/08/25 13:11:39.69 HBsggyAu.net
バッチに書く場合は余計な出力はnulへリダイレクトするし
エラー検出するならerrorlevelしか見ない
終わり
421:デフォルトの名無しさん
23/08/25 14:15:11.86 WAOpDjEy.net
でもエラーでもERRORLEVELが0以外にならないコマンドもあるんだよね。
例えば掴まれてるファイルをdelコマンドで削除しようとした場合とか。
422:デフォルトの名無しさん
23/08/25 15:30:23.51 vih/yj+S.net
予期していないエラーはトラップ出来ない
当たり前の事
423:デフォルトの名無しさん
23/08/26 14:15:52.99 EQIr/PqP.net
del してエラー出てなくて
でもファイルはまだあるみたいな
どうやったら消せるねん
424:デフォルトの名無しさん
23/08/31 19:15:12.69 1WyUQh63.net
バッチではなくコマンドプロンプトの話なんだが、バッチを書くまでもないやってとき、
set a=
for %f in ( *.txt ) do (set a=%~nxf) & call move "%f" "%a:HOGE=HAGE%"
みたいにやるんだけど、
これやるとウィンドウタイトルが実行したcall文になってしまう
都度title cmdで戻してるけど、なんか気持ち悪いので、設定で最初からならないようにってできないだろうか
425:デフォルトの名無しさん
23/09/01 07:05:11.31 HKoCoDlN.net
ヘルプを見ると分かるように call はバッチを呼び出すコマンドなんだよ
バッチ以外のコマンドを呼び出すとタイトルにゴミが残るんだよ
426:デフォルトの名無しさん
23/09/01 11:48:43.40 v7f2MrOL.net
set a=
for %f in ( *HOGE*.txt ) do (set a=%~nxf) & cmd/c move "%f" "%a:HOGE=HAGE%"
427:デフォルトの名無しさん
23/09/01 12:03:20.71 haHsElfO.net
俺からしたら書くまでもないやを超えてる長さに見える
428:デフォルトの名無しさん
23/09/01 14:00:21.38 HKoCoDlN.net
call を cmd /c にするといいのか
429:デフォルトの名無しさん
23/09/01 14:16:49.32 8Q6o7DlX.net
cmd /k
430:デフォルトの名無しさん
23/09/19 16:40:50.05 w0AoFkn5.net
質問スレからこのスレを誘導してもらいました
誰かわかる方いたらお願いします
URLリンク(i.imgur.com)
画像の様な物を作りたいです
フォルダAとその下のa.b.cまではは既に作成されています
後から1.2.3の空フォルダ階層をまとめて追加したい状態です
コマンドプロンプトやバッチ?で簡単に作ることはできませんか?
431:デフォルトの名無しさん
23/09/19 17:51:31.66 nN7HbMfx.net
単に1.2.3のテンプレフォルダ&ファイルを用意して
対象フォルダにコピーするだけに聞こえるけど
コピー先となるフォルダが大量にあるから手動コピーが面倒とかそういう話?
432:デフォルトの名無しさん
23/09/19 18:38:51.86 /gzRoJ4w.net
>>431
はい
言われた通りに手動でやっていたんですが
仰る通りabc…の量が実際にはzで終わらない数百レベルなのです
433:デフォルトの名無しさん
23/09/19 20:18:27.57 nN7HbMfx.net
for使ってコピー先を読み込みつつxcopyでどう。
参考:URLリンク(www.javadrive.jp)
例えばAの下に下記バッチ置いて実行
for /d %%a in (*) do (
xcopy コピー元 %%a
)
関係ないフォルダとか色々混ざってるなら
文字列でフィルタするなり事前にテキストで
リスト作るなりした方がいいだろうけど。
434:デフォルトの名無しさん
23/09/19 20:19:07.60 nN7HbMfx.net
for使ってコピー先を読み込みつつxcopyでどう。
参考:URLリンク(www.javadrive.jp)
例えばAの下に下記バッチ置いて実行
リスト作るなりした方がいいだろうけど。
for /d %%a in (*) do (
xcopy コピー元 %%a
)
関係ないフォルダとか色々混ざってるなら
文字列でフィルタするなり事前にテキストでリスト作っておくなり。
435:デフォルトの名無しさん
23/09/19 20:40:00.00 +wkqTEPn.net
>>430
何がしたいのかいまいちわかってないけど空フォルダ作りたいだけならこう
フォルダAをbatにD&Dして使う
cd "%~1"
for /d %%i in (*) do (
mkdir "%%~i\1"
mkdir "%%~i\2"
mkdir "%%~i\3"
)
pause
436:デフォルトの名無しさん
23/09/19 22:27:32.71 gURMcAfl.net
うおおおおおおお!!!!
できましたありがとうございます!
お二人のおかげです!
437:デフォルトの名無しさん
23/09/20 00:13:50.00 YkzHQ7up.net
xcopy は知らない。
普通は、robocopy でしょ?
438:デフォルトの名無しさん
23/09/20 02:10:11.18 vY1uP1tv.net
そんなのMS-DOSで使えないじゃん
439:デフォルトの名無しさん
23/09/20 07:45:17.50 2uRYZGK4.net
それな
440:デフォルトの名無しさん
23/09/21 07:02:31.48 VtU3IO45.net
普通のwin10で utf8のファイルに fc を使うと派手に文字化けします
文字エンコードなどはどこで指定すればよいのでしょうか?
441:デフォルトの名無しさん
23/09/21 16:42:57.64 2fMT8T96.net
chcp 932
442:デフォルトの名無しさん
23/10/03 21:23:54.04 Z09KwkqG.net
神様教えて下さい
xcopy /D:[MM]/[DD]/[YY]
で指定した日付以降のファイルをコピーできるけど
x日前より新しいファイルのみコピーしたい時の方法はない?
443:デフォルトの名無しさん
23/10/04 11:25:24.03 Ru3hWGvF.net
Robocopy の /MAXAGE
444:デフォルトの名無しさん
23/10/04 12:20:07.48 Wr02smam.net
5chなんでこんなに重いん?いつまでこの重いの続くん?
445:デフォルトの名無しさん
23/10/04 12:29:43.90 UHUx/6V1.net
なんで俺に聞くの?
446:デフォルトの名無しさん
23/10/04 13:11:28.12 Wr02smam.net
いや、お前には聞いてない
447:デフォルトの名無しさん
23/10/06 09:10:25.11 u9U/aciQ.net
5ch攻撃してる人が飽きるまで。
448:デフォルトの名無しさん
23/10/09 15:26:51.31 gPLHWilL.net
神様教えて下さい
dir のオプションで/b /s 付けた時に
フルパス名が辞書順になるオプションってどれ?
/on /ogとかあるけど
思うようにならない
449:デフォルトの名無しさん
23/10/09 17:55:27.25 416rm9Ab.net
/q
450:デフォルトの名無しさん
23/10/10 11:13:06.14 GmlcHfbX.net
「VBScript」は非推奨に、将来のWindowsリリースで削除
URLリンク(forest.watch.impress.co.jp)
batファイルはどうなる?
451:デフォルトの名無しさん
23/10/10 11:26:18.76 cUy975D5.net
>>450
糞過ぎる
452:デフォルトの名無しさん
23/10/10 11:37:38.54 l0kLdmnh.net
JScriptというかWindowsScriptHostは生き残るのか?
453:デフォルトの名無しさん
23/10/10 18:15:49.98 dUGfQnTA.net
なんで5chこんなに重いん?この重いのいつまで続くん?
454:デフォルトの名無しさん
23/10/11 07:20:10.03 x54NWWVS.net
>>450
EdgeのIEモードが2029までだからそれまでは使えるという予想があったけど
機能の有効化で使えるならどうでもいいわ
455:デフォルトの名無しさん
23/10/11 08:26:32.52 mMAmsq6k.net
ネットは心の鏡
お前の心が重いのだ
456:デフォルトの名無しさん
23/10/11 13:00:48.19 yI6tEEU8.net
textファイル1に
a
b
c
d
が入ってて
textファイル2に
1
2
3
4
が入ってて
連結して
a1
b2
c3
d4
にしたいけど
dosコマンドだけでは無理?
457:デフォルトの名無しさん
23/10/12 15:02:33.47 DS7FO2PL.net
>>456
無理ではないがコマンドプロンプト開いて1行のコマンドで書くのはとても面倒だからバッチファイル書いたほうがいい
458:デフォルトの名無しさん
23/10/12 21:58:11.30 ZXm8+EHB.net
powershell -c "gc textファイル1, textファイル2 | group readcount | foreach{$_.group -join ''}"
a1
b2
c3
d4
459:デフォルトの名無しさん
23/10/13 11:28:13.45 eHigHg14.net
>>458
'-join' 演算子に続けて値の式を指定する必要があります。
って警告が出ます
460:デフォルトの名無しさん
23/10/13 17:19:46.92 5yGgcXlN.net
「''」と「"」を見間違えてるのでは
461:デフォルトの名無しさん
23/10/29 22:58:43.01 4fxrkRUI.net
環境変数を;区切りで改行して出力したくて
for /F "delims=;" %i in ("%PATH%") do echo %i
としたのですが最初の一つしか出力されません
何がダメなんでしょうか...
462:デフォルトの名無しさん
23/10/30 00:54:06.32 S4fhwBsv.net
ダブルクォーテーションで囲まれた"%PATH%"が1つの引数としてForに渡されて1つ目の区切り文字に達するまでを出力してるからそうなる
1つずつ取り出したいならダブルクォーテーションを消せば良いがそれだと半角スペースも区切り文字に判定されるから
簡単にやろうと思ったらまず半角スペースを別の文字に置換してからダブルクォーテーション無しで渡してその後半角スペースを元に戻すとかかな
463:デフォルトの名無しさん
23/10/30 01:46:36.18 dhg2pdyL.net
"%PATH%"が一行なのでforループも1回しか繰り返さないってだけ
464:デフォルトの名無しさん
23/10/30 02:13:56.37 dhg2pdyL.net
delimsの区切り記号指定は、
for /F "tokens=1-3 delims=;" %i in ("%PATH%") do echo %i,%j,%k
とか1行の中で複数項目に分ける場合に使う
区切り記号でループさせることは不可能
465:デフォルトの名無しさん
23/10/30 03:27:22.35 dhg2pdyL.net
興が乗ったので作ってみた
@echo off
SETLOCAL EnableDelayedExpansion
SET LF=^
SET splitted_path=%PATH:;=!LF!%
for /f "tokens=*" %%i in ("!splitted_path!") do echo,%%i
466:デフォルトの名無しさん
23/10/30 06:58:07.09 EuHHvGeq.net
バッチと関係ないけどpath変数のフォルダ名に
;文字が入ってたらwindowsの動作はどうなるんだろう
"で囲めばいいだけなのかな
467:デフォルトの名無しさん
23/10/30 13:19:36.99 dhg2pdyL.net
for文も不要だった
@echo off
setlocal EnableDelayedExpansion
for /f "delims=N" %%i in ('cmd /u /c echo 不') do set CR=%%i
set LF=^
SET splitted_path=%PATH:;=!CR!!LF!%
echo,!splitted_path!
468:デフォルトの名無しさん
23/10/30 23:23:37.40 oqTBGQIx.net
皆さんありがとうございます参考になりました。
気軽に使いたかったのでこんな感じで雑に実現しました
@echo off
for %%i in ("%PATH:;=";"%") do echo %%i
pause
毎回環境変数ウィンドウ開くの面倒だからcliで見やすく確認できないかなーと気軽に始めたのですがbatスクリプト難しいですね
遅延展開とか初めて聞きましたw
469:デフォルトの名無しさん
23/10/31 06:54:11.36 9EMrUdB9.net
遅延にしたら!が変わる
!があると^も変わる
470:デフォルトの名無しさん
23/10/31 07:18:54.11 1/1CCAX6.net
バッチは不毛すぎる
使うのは最小限に留めろ
471:デフォルトの名無しさん
23/10/31 07:44:42.03 /7M4GG46.net
頑張りすぎると無毛になる
472:デフォルトの名無しさん
23/10/31 08:59:44.07 5Lja4y81.net
おかえり
473:デフォルトの名無しさん
23/11/01 10:36:13.57 QIr7Aj5s.net
バッチファイルは縛りプレイが好きな人にしか向かないよ
474:デフォルトの名無しさん
23/11/12 10:36:55.29 8jJHTm3/.net
batファイルの処理が終わったらスマホに何らかの通知を送りたいんですが何かいい方法は無いですか?
475:デフォルトの名無しさん
23/11/12 13:00:47.64 9doZQWI1.net
SMS送信するWebAPI実行
476:デフォルトの名無しさん
23/11/12 18:58:13.28 aZ7/2ZLa.net
NET SEND
477:デフォルトの名無しさん
23/11/19 15:27:06.49 tEMsHOKq.net
>>475
>>476
どちらも難しそうだったのでPowerShellでGmailを送るやり方にしました
478:デフォルトの名無しさん
23/12/11 17:33:41.74 DuarkpA3.net
習作でlog1.txtに格納されている文字列を1行ずつlog2.txtの中に存在しているかチェックしたいのですが、
@echo off
for /f %%a in (log1.txt) do (
set line=%%a
find "%%a" log2.txt
if %errorlevel% == "0" (
echo OK >> kekka.txt
) else (
echo NG >> kekka.txt
)
)
findで返ってくる値が0に固定されてしまい、
判定を上手く行うことが出来ずにいます
稚拙な質問でお恥ずかしいのですがどのように修正すれば良いでしょうか
479:デフォルトの名無しさん
23/12/11 21:12:00.54 WKo0W+M9.net
>>478
お前がなぜレスを貰えないのかchatgptに聞いてこい
480:デフォルトの名無しさん
23/12/11 21:23:41.62 ZQU2Csd1.net
>>478
いちばん手っ取り早いのはsetlocal enabledelayedexpansionを使うこと
@echo off
setlocal enabledelayedexpansion
for /f %%a in (log1.txt) do (
find "%%a" log2.txt >nul 2>nul
if "!errorlevel!" == "0" (echo OK) else (echo NG)
)
endlocal
遅延展開で調べてみて
ただforにdelimsとかtokensの指定ないけどそれは問題ない?
481:デフォルトの名無しさん
23/12/11 22:30:44.45 TXSKL9RJ.net
for文を初めて使ったものでスレ汚し紛いな質問で申し訳ないです
setlocal enabledelayedexpansionを利用して手直しし、
希望通りの結果を出力できました。ありがとうございました
482:デフォルトの名無しさん
23/12/12 18:16:58.21 e+gu1Rew.net
こんな感じでperl起動するとして、このときwindows terminal(設定によってはコマンドプロンプト)の新しいウィンドウが開かれてperlのコードが実行されますが、既に開いているwindows terminal内で新しいタブを開いて実行できないでしょうか?
perl "aaa.txt"
exit /B
483:デフォルトの名無しさん
23/12/12 18:55:34.45 e+gu1Rew.net
書き忘れました
バッチファイルの実行はコマンドプロンプト内ではなく、バッチファイルのアイコンをダブルクリック(おそらくエクスプローラーで実行)することを前提にしてます
484:デフォルトの名無しさん
23/12/12 20:27:32.49 I4UWTUvH.net
>>482
11のターミナルのタブはバグなのか仕様なのか誰も判らんから答えようがないよ
どうして11みたいな糞を恥ずかしげもなくリリースしたのかMSに聞いてこいよ
485:デフォルトの名無しさん
23/12/17 11:53:39.09 zJzmsCBl.net
>>482
batではなくショートカット作って
プロパティのリンク先をwt perl "スクリプトのフルパス"
作業フォルダーをスクリプトのあるフォルダ
でよくない?
486:デフォルトの名無しさん
24/01/18 19:51:19.47 WajCwGEB.net
シンプルに指定のフォルダ内へ存在する、特定のフォルダとファイルをバッチで一括削除する場合、そう記述すれば良いでしょうか
C:\AAA\BBB\CCCの、CCCの中にある
フォルダ1、フォルダ2、ファイル1、ファイル2、ファイル3・・・をまとめて削除したいのです
バッチファイルでCCleaner v5.63の対象リストみたいな運用をしたく思っています
487:デフォルトの名無しさん
24/01/18 20:05:52.37 lPYOY/79.net
>シンプルに
シンプルかーよっしゃ!
>指定のフォルダ内へ存在する、特定のフォルダとファイルを
へはどっちに掛かるの?
>バッチで一括削除する
バッチスレやしな
>場合、
うん…
>そう記述すれば良いでしょうか
そうやな、
まずChatGPTにその質問内容が人間に判る文章になってるか添削してもらいな
488:デフォルトの名無しさん
24/01/18 21:24:27.19 fl7npJfZ.net
消したいファイルやフォルダを列挙するのが一番シンプル
フォルダ内を全部消したいのなら rmdir /s /q
ただし指定したフォルダも消えるので再度作る必要はある
489:デフォルトの名無しさん
24/01/18 21:50:17.22 WajCwGEB.net
>>488
早々に有難うございます
ネットにある指南もかなり事前チェックした上での投稿ですが、断片的な内容が多く、それらをコピペして調整せども上手くいかなかったものでして
ひょっとすると@echo offのあとに
del C:\AAA\BBB\CCC\ファイル1
del C:\AAA\BBB\CCC\ファイル2
del C:\AAA\BBB\CCC\ファイル3
rmdir /s /q C:\AAA\BBB\CCC\DDD
rmdir /s /q C:\AAA\BBB\CCC\EEE
rmdir /s /q C:\AAA\BBB\CCC\FFF
exit
的な箇条書きで良かったりしますか?
490:デフォルトの名無しさん
24/01/18 21:54:35.77 WajCwGEB.net
これまでよく運用してきたアットリブやサービスなどは、例を挙げると
attrib +s +h C:\Users\xxxxxx\ntuser.dat
のたった一行で完結していました
ファイルディレクトリの削除も、特別な条件を付与しない場合は上記と似たようなものでしたかね
491:デフォルトの名無しさん
24/01/18 22:00:03.62 MX5L5JEY.net
pushd C:\AAA\BBB\CCC
rd /s/q フォルダ1 フォルダ2 ファイル1 ファイル2 ファイル3・・
popd
…フォルダは消せてもファイル消せないか。じゃあ、
pushd C:\AAA\BBB\CCC
rd /s/q フォルダ1 フォルダ2 ファイル1 ファイル2 ファイル3・・
del /f フォルダ1 フォルダ2 ファイル1 ファイル2 ファイル3・・
popd
エラーは無視w
492:デフォルトの名無しさん
24/01/19 05:19:53.22 bHDC7nyS.net
>>491
望むバッチが作れました
有難うございました
493:デフォルトの名無しさん
24/01/19 06:08:19.50 xbWxkRsK.net
>>491
フォルダ1とフォルダ2を一つの命令で消すことは出来ないのでは?
494:デフォルトの名無しさん
24/01/23 21:55:09.85 ke6XWARZ.net
バッチファイルから VS Code を起動しようと start で
start ”C:\apps\VSCode\Code.exe”
のようにすると、Code.exe の終了待ちになってしまいます
実行後は普通の exe のようにプロンプトに戻ってきて欲しいのですが、
バッチファイルでどうにかできるものでしょうか?
495:デフォルトの名無しさん
24/01/23 23:07:46.88 fGdUtoWj.net
>>494
bin\code.cmdから起動するか
set ELECTRON_NO_ATTACH_CONSOLE=true
すればすぐ戻る
496:デフォルトの名無しさん
24/01/23 23:27:45.51 ke6XWARZ.net
>>495
ありがとうございました
期待通りの動作になりました
微妙に訂正 >494 は start ”” ”C:\apps\VSCode\Code.exe” と書くべきでした
497:デフォルトの名無しさん
24/02/02 14:12:59.14 /quSrI1G.net
バッチでディレクトリの中身のファイルを別のディレクトリにコピーしたい
大量にあるから更新時刻の新しいのだけコピーしたい
robocopy以外のコマンドで可能?
498:デフォルトの名無しさん
24/02/02 19:39:01.90 wG6y7v1N.net
xcopy /d
では対応できない案件?
他には
forfiles
を組み合わせるとかあるけど、そもそも robocopy を避ける理由が
分からないと勧めづらい
499:デフォルトの名無しさん
24/02/02 19:55:07.14 SlEtxLWX.net
バッチで時刻見ながら1個1個コピーとか…可能
500:デフォルトの名無しさん
24/02/02 20:29:32.82 /quSrI1G.net
>>498
感謝
robocopyとcopyしか考えてなかった
robocopyはオプション間違えると消えるのが恐くて
501:デフォルトの名無しさん
24/02/02 23:09:26.35 oSMWA/4/.net
こういうの使った方が早いかもよ
URLリンク(schinagl.priv.at)
502:デフォルトの名無しさん
24/02/03 11:35:25.52 OZed/uKu.net
NASやファイルサーバの機能の重複除去を有効にすると文字通り重複してるファイルは勝手にファイルシステム内で統合されるから気にする必要事なくなるよ
503:デフォルトの名無しさん
24/02/16 14:00:04.95 xcbCRr3h.net
>>480
%errorlevel% という環境変数モドキのないdosでも使える
if not errorlevel 1 が正解
504:デフォルトの名無しさん
24/02/16 15:31:25.08 Pal4p53G.net
フォルダがいくつかあって
フォルダの名前が年月日で
「あれYYYYMMDD」形式になています
最新の日付フォルダの中身の特定のファイルだけを
別フォルダにコピーする
バッチファイル可能ですか?
505:デフォルトの名無しさん
24/02/16 16:31:32.99 1D5G9s1W.net
>>503cmd /c exit -1
if not errorlevel 1 echo OK
506:デフォルトの名無しさん
24/02/16 16:34:14.65 1D5G9s1W.net
途中で間違って書き込んじゃった。
戻り値が負数の場合に注意が必要。
507:デフォルトの名無しさん
24/03/15 00:37:59.57 exMGzLtn.net
住人いるのか?
508:デフォルトの名無しさん
24/03/15 21:32:34.28 cEgPx2Y0.net
いないよ
509:デフォルトの名無しさん
24/03/15 21:48:31.82 8BVQzeBd.net
>504
誰か教えて
510:デフォルトの名無しさん
24/03/15 21:54:53.76 nVSr20GQ.net
>>509
まずフォルダ名からYYYYMMDDの部分を抜き出して
フォルダをしらみつぶしに大小比較していく
一番大きい数値のフォルダはこれで特定できる
その中身の特定のファイルはどういった特定なのかで実現できるかどうか分かれる
511:デフォルトの名無しさん
24/03/15 21:59:21.24 8BVQzeBd.net
>>510
特定のファイルとは
特定のファイル名です
全てのフォルダに同じファイル名のファイルが入ってる
512:デフォルトの名無しさん
24/03/15 22:58:24.97 XS7vFeOB.net
>>511
こんなかんじ?
md あれ20240313 あれ20240314 あれ20240315 あれ20240316 dest
call>あれ20240316\特定のファイル
setlocal enabledelayedexpansion
call>are_list.txt
for /f %%a in ('dir /ad /b "あれ*"') do (
set "are=%%~a"
echo !are:~-8,8!>>are_list.txt
)
endlocal
sort /r are_list.txt /o are_list.txt
set /p target=<are_list.txt
copy あれ%target%\特定のファイル dest
513:デフォルトの名無しさん
24/03/16 08:55:44.79 PUBVa+tA.net
FOR /F %%i IN ('dir /b /o-n あれ*') DO (
copy "%%i\特定のファイル" "別フォルダ" & goto :eof)
514:デフォルトの名無しさん
24/03/16 09:42:46.12 yhWVSGDf.net
for /d %%i in (あれ*) do set フォルダ=%%i
copy "%フォルダ%\特定のファイル" "別フォルダ"
515:デフォルトの名無しさん
24/04/08 22:28:43.24 tYLSO2Xj.net
※スレ違いで誘導していただきました
スレリンク(tech板:507番)
コマンドプロンプト(robocopy)について
Windows 11 Pro 23H2です
図1のように、robocopyで「フォルダA」を「フォルダB」へミラーコピーする実行ファイルを作成しました
(フォルダA)空
(フォルダB)ファイル.txtのみ
図2の削除予定?フォルダやファイルを非表示にしたいのですが、
それらしきログオプションが分かりませんでした
(図1)URLリンク(i.imgur.com)
(図2)URLリンク(i.imgur.com)
よろしくお願いいたします
516:sage
24/04/09 14:00:57.75 Ugima7Hm.net
>>515
/lじゃなくて/quitはどう?
517:デフォルトの名無しさん
24/04/09 14:46:09.52 A/PWQBtx.net
HELP ATTRIB
518:デフォルトの名無しさん
24/04/09 20:18:46.54 ad5KI3J5.net
削除予定なら削除してからコピーを実行したら表示されないんじゃね
519:デフォルトの名無しさん
24/04/09 21:46:07.89 yR8KPsJp.net
/XF ファイル.txt
520:デフォルトの名無しさん
24/04/10 19:52:48.51 sNhBgYIO.net
>>516-519
ありがとうございます
>>516さんの /quit で意図する動作ができました!
>>517さんの事前削除もいいですね
URLリンク(i.imgur.com)
ありがとうございました
521:デフォルトの名無しさん
24/04/24 02:18:02.70 K1wg6IoP.net
バッチファイルでExecutablePathにToolsを含むzebedee.exeというプロセスをkillしたいのだが、
for /f "usebackq tokens=2 delims==" %%A in (`WMIC PROCESS WHERE "Name='zebedee.exe' and ExecutablePath like '%%Tools%%'" get ProcessId /VALUE ^| find "="`) do (
taskkill /F /pid %%A
)
だと
D:\Tools\zebedee>(
taskkill /F /pid 21252
)
エラー: 無効なクエリです
となってしまう。
for /f "usebackq tokens=2 delims==" %%A in (`WMIC PROCESS WHERE "Name='zebedee.exe' and ExecutablePath like '%%Tools%%'" get ProcessId /VALUE ^| find "="`) do (
set PID=%%A
)
taskkill /F /pid %PID%
だと成功する。
forの中にtaskkillて書けないの?
「エラー: 無効なクエリです」てWMICのエラーだから、forとWMICとtaskkillの問題?
522:デフォルトの名無しさん
24/04/24 12:53:51.62 cg/GbNoZ.net
>>521
WMICはパイプを使うと改行がCR CR LFとなって、%%A に正しく設定できていないのでだめっぽい。
SETするとCRが削除されてうまくいくようです。
というわけで、いったんリダイレクトしてファイルにするとよいでしょう。
^| find "="
↓
^>T ^&^& find "=" T
523:デフォルトの名無しさん
24/04/24 19:27:30.39 zTq4mcuG.net
前にquery userってコマンドの出力を変数に入れたかったんだけど
出力に文字'>'が入っててうまく取り込めなくてその時は結局vbsだかで取り込んだ
バッチだけでやる方法ってあったのかな
524:デフォルトの名無しさん
24/04/26 01:53:35.81 WIIBP3hh.net
>>522
for /f %%A in ('wmic process where ^( Name like 'zebedee.exe' and ExecutablePath like '%%Tools%%'^) get processid') do (
taskkill /F /pid %%A
)
これで出来た。エラーするけど。
なんでMSのコマンドって不要なものを消せないのかね。
Linuxだと情報だけを表示するオプションがあるのに。
525:デフォルトの名無しさん
24/04/26 06:34:16.76 WIIBP3hh.net
>>524
forとtaskkillで頑張らなくても
wmic process where ( Name like 'zebedee.exe' and ExecutablePath like '%%Tools%%') delete
でよかったんだ。
526:デフォルトの名無しさん
24/04/28 21:55:14.93 zlR73q8o.net
スレ立てあらしスクリプト対抗age
527:デフォルトの名無しさん
24/05/15 15:54:12.87 7SsR7Bys.net
コマンドラインからスリープ状態にするやり方調べてたけど意外と面倒くさいんだな
スリープじゃなくて休止になったり管理者権限が必要だったり
528:デフォルトの名無しさん
24/05/15 16:36:20.47 7ab9f7zE.net
powershellにおまかせするのが楽みたいだね
529:デフォルトの名無しさん
24/06/12 21:35:23.01 XPCO6cU9.net
共有フォルダの特定のファイルが不定期に更新されるので
過去のファイルを残すために
別のフォルダに保存しておきたい
更新の都度=全部は無理としても毎日1回はコピーしたい
元ファイル名にコピーする日付と時刻を追加したファイル名で
数日更新しない時もあるから
更新されてなかったらコピーしたくない
そんなバッチファイル可能?
毎日1回はタスクスケジューラで設定
530:デフォルトの名無しさん
24/06/12 22:35:20.23 09UxvqoI.net
>>529
両方のファイルのタイムスタンプを比較すればいいかな
for /f "tokens=*" %%i in ("foo.txt") do echo %ti
新しいかどうかじゃなくて一致するかしないかで十分だと思う
dir /t "foo.txt"
でも更新日付は求められる
xcopy "foo.txt" backup_folder /d
でも更新されたファイルのバックアップはできるが同じファイル名となる
まあ頑張ってくれ
531:デフォルトの名無しさん
24/06/12 22:36:29.43 09UxvqoI.net
ティルダが抜けてた
for /f "tokens=*" %%i in ("foo.txt") do echo %~ti
532:デフォルトの名無しさん
24/06/12 23:08:41.34 XPCO6cU9.net
>>531
明日試します
ファイル名は日付時刻だけなら何とかなりそう
元ファイル名に連結がうまくできない
533:デフォルトの名無しさん
24/06/13 00:35:39.15 V4k66q9W.net
>>532
ファイル名の変名の一例として foo.txt → foo_yyyymmdd-hhmm.txt にするなら
for /f "tokens=*" %%i in ("foo.txt") do set d=%%~ti
set dd=%d:~0,13%%d:~-2%
set dd=%dd:/=%
set dd=%dd: =_%
for /f "tokens=*" %%i in ("foo.txt") do echo %%~ni_%dd%%%~xi
534:デフォルトの名無しさん
24/06/13 01:21:37.93 V4k66q9W.net
秒も要るなら
for /f "tokens=2,3" %%i in ('where /t "foo.txt"') do set d=%%i&set t=_%%j
set dd=%d:/=%
echo %t%|findstr _[0-9]:>nul&&set t=%t:_=_0%
set tt=%t:~1,2%%t:~4,2%%t:~-2%
echo foo_%dd%-%tt%.txt
535:デフォルトの名無しさん
24/06/15 14:56:29.48 H/tJtGX+.net
>>533 の /f "tokens=*" は不要な気がする
536:デフォルトの名無しさん
24/06/15 15:08:14.13 UQXtemWf.net
ファイル名が "メモ1 買い物リスト.txt"とか十分ありえるしなあ
537:デフォルトの名無しさん
24/06/15 15:09:50.12 UQXtemWf.net
ああ/fが要らんのか
538:デフォルトの名無しさん
24/06/15 21:58:33.69 1hp9WHhR.net
ファイルをコピーしてファイル名の変更すらわからない人間に教えなくてもいいと思うぞ
539:デフォルトの名無しさん
24/06/15 23:00:01.75 lwRcTmIT.net
超絶初心者わいがネットで拾ったバッチファイルを
自分仕様にいじってるんだけも根本的にわからない事があったので来ました
主に動画ファイルのエンコードとか処理とかです
1 複数ファイルをD&Dしてファイル作成日時の古い順から処理する
2 ファイルネームに日本語全角スペースがある場合でも読み込んで処理する
この2つの仕様をWindowsバッチファイルだけで両立可能なのでしょうか?
ChatGPTとCopilotに聞くと出来ます!こう修正してって言われてやっても
上手くいった試しがないのでそもそも両立可能なのかがわかりません
よろしくお願いします(´・ω・`)
540:デフォルトの名無しさん
24/06/15 23:26:37.72 UQXtemWf.net
D&Dは止めた方がいいね
最近の過去ログに無理やりやるのがあったと思うがまあ止めといたほうがいい
もっと運用を考えるべきだね
541:デフォルトの名無しさん
24/06/15 23:53:38.13 UQXtemWf.net
>>539
フォルダに半角空白入りの名前を付けておくのがもっとも簡単な対策
542:デフォルトの名無しさん
24/06/16 00:32:01.65 fRT17GSx.net
powershellへ移行しない理由は何?
543:デフォルトの名無しさん
24/06/16 00:49:07.80 /Fmpwzf6.net
移行できる人なら質問しないだろうよ
544:デフォルトの名無しさん
24/06/16 09:39:33.25 +73AB3cR.net
PowerShellって初回使用時すごい待たされるじゃん
普段使ってなくて毎日シャットダウンするような人は使おうと思ったとき待たされてストレス受けるんだよね
545:デフォルトの名無しさん
24/06/16 11:14:43.44 44t+YCVJ.net
毎日シャットダウンはするけど普段使ってないものとは
なぞなぞかな
546:540
24/06/16 22:03:28.94 46K9PH7S.net
>>541
ありがとう
これはAIでは出てこない答えで感心しました
基本的にはムリっぽいという感じですかね
powershellの方が良いこともわかってはいるのですが
なにぶん物覚えが悪すぎて(´・ω・`)
547:デフォルトの名無しさん
24/06/17 00:26:58.20 BTOFB8aB.net
むしろpowershellのほうがググれば沢山出てくるし書きやすいと思うけどね
548:デフォルトの名無しさん
24/06/17 09:41:03.27 4dsWgq6q.net
%20とか名前付けるか
Pathのマルチバイト問題は解決困難だなあ
549:デフォルトの名無しさん
24/06/17 15:06:14.86 NTaBtmxu.net
全角スペースがある場合は
フルパスの一部にでも半角スペースが入っていれば問題が生じないので、
別名として、当該フォルダに対して、シンボリックリンクなりジャンクションを半角スペースを入れた名前で作成し、
これを経由して運用すれば、とりあえず回避はできるよ
XPの頃にさんざん苦しんだのに、未だ根本的な解決がなされていないというのはモヤモヤする
環境によっては、"#"がフルパスに入るとだめというのもあるな
550:デフォルトの名無しさん
24/06/17 16:53:21.50 A2yJgFtn.net
D&Dやめて日付順のリストファイルを作成したらどうかね
エクスプローラーとメモ帳で簡単にできるでしょ
551:デフォルトの名無しさん
24/06/17 23:01:16.20 4L+665Jw.net
ドラッグアンドドロップなんてバッチ処理の発想じゃねえなw
552:デフォルトの名無しさん
24/06/17 23:01:56.15 4L+665Jw.net
CUIをGUIの言葉で言うのは斬新すぎる
553:デフォルトの名無しさん
24/06/19 14:55:27.29 baOC8PLn.net
Ruby で作ってみた。
Rubyでは半角空白はエラーになるけど、全角空白は正常に動く
デスクトップにショートカットを作って、
それに対して、ファイルをdrag & drop する
ショートカットのリンク先は、
C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/script.rb"
(@は取り除いて下さい)
require 'fileutils'
Sep = '-' * 40 + "\n" # separator
# ファイル作成日時の古い順から処理する。
# ただし、File.(stat.)birthtime は、Linux では使えない
ARGV.select { |full_path| File.file?( full_path ) } # ファイルのみ
.sort_by{ |full_path| File.birthtime( full_path ) }
.each do |full_path|
puts Sep + full_path
p birthtime = File.birthtime( full_path )
# ここに処理を書く
end
sleep # 出力したコマンドプロンプト画面を閉じないようにする
554:デフォルトの名無しさん
24/06/19 21:41:48.63 AL0iJITw.net
バッチファイルでちまちま文字列処理するのは
C言語でちまちま文字列処理するくらい不毛だからやめとけ
555:デフォルトの名無しさん
24/06/20 06:56:43.32 oAthcLJ7.net
私が普段使っているドラッグアンドドロップ用バッチのサンプルです
@echo off & set a="%cmdcmdline:"=%"& set "arg="
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%" & set b="%b::=" "%"
for %%i in (%b%) do set b=%%i& call :x
goto y
:x
if defined arg set arg=%arg:~0,-3%"
set arg=%arg% "%a%:%b:~1%& exit /b
:y
echo コマンド %arg%
pause & exit
556:デフォルトの名無しさん
24/06/20 14:12:10.76 6cw0yeSx.net
PowerShellて別の文字でエラーになるとか聞いたけど本当?
557:デフォルトの名無しさん
24/07/16 20:58:55.86 Ho7KhNQA.net
net session /delete の後の2回のY/N選択をコマンドで自動入力したいんだけど、どうやればいいの?
558:デフォルトの名無しさん
24/07/16 21:44:58.97 PFxavJIe.net
>>557
応答ファイル(y+CR/LF, n+CR/LF)を作ってそれを入力とするのが常套手段だが
●Y/Nが1回の場合の例
rem ***準備
mkdir 111 2>nul
echo.>109\1.txt
rem ***応答ファイル作成
echo n>n.txt
echo y>y.txt
del Z:\111\*.*<n.txt >nul 2>&1
2回とのことなので、
echo n>n_n.txt
echo n>>n_n.txt
とするといけるかも(実行してないので結果不明)
559:デフォルトの名無しさん
24/07/17 06:53:17.67 gLjbT8+P.net
ahk
560:デフォルトの名無しさん
24/08/12 12:32:10.56 om8unfFL.net
初心者質問ですみません。ffmpegで一括再エンコードしたいと思ってバッチファイルを作ってみたのですがファイルにスペースが含まれるとエラーが出るようで困っています。どのように対処すればよいか、どなたか御教示お願い出来ませんでしょうか?
@echo off
cd /d %~dp0
for %%a in (*.mp4) do (
"C:\ffmpeg\bin\ffmpeg.exe" -i %%a -b:v 500k -c:a copy %%~na_500k.mp4
)
pause
561:デフォルトの名無しさん
24/08/12 14:37:08.59 NAcZpcdu.net
>>560
引数として渡されるファイル名にスペースがある場合?
それなら引数を”で囲めば行けるんじゃね?
562:デフォルトの名無しさん
24/08/12 19:13:11.22 N4nkPpmi.net
有難うございます。引数を""で囲んだら上手くいきました。
563:デフォルトの名無しさん
24/10/03 08:38:22.80 hcouLIA5.net
別のスレでも質問させていただいているのですが、こちらの方が適切かと思い投稿させていただきます。
以下をbatファイルで動かそうとしてもうまく動かないのですが、どうしたら良いでしょうか。
batファイルをダブルクリックして、PowerShellを実行しています。
PowerShellのスクリプト部分は、PowerShellで動くことを確認済です。
ランダムパスワードを生成する感じです。
URLリンク(chatgpt.com)
564:デフォルトの名無しさん
24/10/03 08:39:33.18 hcouLIA5.net
リンクはこちらです
URLリンク(chatgpt.com)
565:デフォルトの名無しさん
24/10/03 10:24:37.73 EmzEDUtK.net
適切だと思ったらマルチポストも辞さない
566:デフォルトの名無しさん
24/10/04 07:40:33.06 BveI+02d.net
以下を消したら動くようになりました。
解決です。
Param(
[int]$Length = 16,
[switch]$IncludeUppercase,
[switch]$IncludeLowercase,
[switch]$IncludeNumbers,
[switch]$IncludeSymbols
)
567:デフォルトの名無しさん
24/10/12 02:43:46.51 fuP8Oeol.net
iris-microという便利なソフトつかって 画面明るさ色温度かえてます
バッチファイルが2種類あって この設定をきりかえつかっています
ふたつのバッチファイルを 交互に繰り返すようなスクリプト作れますか
プロセスがのこったりしてるようでもないので難しいでしょうか?
568:デフォルトの名無しさん
24/10/12 16:51:48.93 4VpnKVlz.net
バッチを順番に呼び出して先頭にgotoすれば交互になるような気がします
569:デフォルトの名無しさん
24/10/12 17:04:01.38 qxhXc26A.net
同じbatで起動するたびにサイクリックに実行する内容を切り替えるって意味じゃないかな
何か外部にフラグみたいなもの(又は実行用にbatをコピーしてそれを呼び出す)を用意するといいんじゃないかな
同時起動の排他制御とかは個人使用ならまあ不要だろう
570:デフォルトの名無しさん
24/10/12 17:39:10.70 Iy6RGAFA.net
状態を持たせたいならバッチの名前を変えるという荒業もできるね
571:デフォルトの名無しさん
24/10/12 18:07:14.49 qxhXc26A.net
自分自身の名前は変えられないので別ファイルを用意
そもそもbat名を変えたら起動の度に別bat名で起動することになり元々の2つのbatのある状態と変わらんじゃん
572:デフォルトの名無しさん
24/10/12 18:14:50.19 Iy6RGAFA.net
リネームは昔からあるハックだけどな
頭悪そう
573:デフォルトの名無しさん
24/10/12 19:31:57.02 d82xRt2j.net
echo.>stat_on
if exist stat_on
とかでチェック用ファイルで分岐するのが手っ取り早い
より汎用的にやるなら
inifile.exeみたいの作るか拾うかして状態を読み書きする
574:デフォルトの名無しさん
24/11/06 18:43:05.45 KAHjZpf+.net
winPCで
エクスプローラから
複数ファイルを
バッチファイルにドロップして
拡張子付きファイル名のみ(パスなし)を
1行1ファイル名で
list.txtに書き出したい
どの様に?
575:デフォルトの名無しさん
24/11/06 19:42:12.98 0Z0sjFnd.net
てすと.com
576:デフォルトの名無しさん
24/11/07 07:18:54.75 diE3Ipx6.net
>>574
@echo off & chcp 65001
set a="%cmdcmdline:"=" "%"
call :x > list.txt & exit
:x
set a=%a:*.bat" =%
for %%i in (%a:""=%) do set a=%%i& call :y
exit /b
:y
if "%a:~1,1%"==" " set a=%a: =" "%
for %%i in (%a:""=%) do echo %%~nxi
list.txt は UTF-8 にしてみた
バッチの拡張子は .bat
577:デフォルトの名無しさん
24/11/07 10:34:25.11 sTPvG4+T.net
初めからコマンドプロンプトでやればいいのに
578:デフォルトの名無しさん
24/11/07 10:35:43.77 sTPvG4+T.net
まずは特定のフォルダにファイルを集めるという発想がないんだろうな
579:デフォルトの名無しさん
24/11/07 11:01:23.05 5OQwBO7R.net
batファイルで=を含む置換えの時の方法教えてください。
入力は Hello World 12=34
@echo off
set /p mystringA=あいさつ:
set mystringB=%mystringA:12=34=4567%
echo %mystringB%
結果をこのようにしたい
Hello World 4567
580:デフォルトの名無しさん
24/11/07 12:14:54.61 9xnRXsv4.net
>>579
batだけでやるには大変(=の置換は無理)
変換前に1文字ずつ判定して=だったら普通使われない文字(=とか)に変えるとかしないとできない
別の方法としては別の言語でサポートしてやれば楽
@if (0)==(0) echo off
rem *** このブロックにbat内容を記述する
set s=Hello World 12=34
cscript //nologo /e:jscript "%~f0" "%s%"
rem for /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" "%s%"') do set s=%%i
rem echo %s%
goto :eof
rem ***
@end
//これ以降はjscriptの処理部
var data=WScript.Arguments(0).replace(/12=34/g,"4567");
WScript.StdOut.WriteLine(data);
581:デフォルトの名無しさん
24/11/07 12:33:40.59 5OQwBO7R.net
>>580
サイトによって特殊文字は^だったり"を使ったりで試して出来なかった
代案をわざわざありがとうございます^^
582:デフォルトの名無しさん
24/11/07 13:07:58.08 sK42d9tR.net
>>576
神様ありがとう
なんでかわからないけど動きました
list. txtを%USERPROFILE%\Desktopに作成するにはどのようにすれば?
単純に
"%USERPROFILE\Desktop\list.txt"
に変更してもダメでした
583:デフォルトの名無しさん
24/11/07 14:02:09.09 DJJuXIJX.net
エクスプローラーで「パスのコピー」あるの知ってる?
windows11 なら選択後に shift+ctrl+c
バッチとかいらんだろ
584:デフォルトの名無しさん
24/11/07 16:57:38.50 sK42d9tR.net
>>576
>582
今やったらできました
お騒がせしました
もしよろしければ
解説お願いします
585:デフォルトの名無しさん
24/11/08 02:14:23.67 NHkTpL6A.net
del /q "C:\Users\%username%\Desktop\新しいフォルダー"
これで新しいフォルダー内が消えないのですが?
586:デフォルトの名無しさん
24/11/08 03:03:23.20 NHkTpL6A.net
日本語のファルダだとダメなんですかね?
587:デフォルトの名無しさん
24/11/08 03:07:22.26 8ciHN7a8.net
文字コードが違うんじゃないですかね
588:デフォルトの名無しさん
24/11/08 03:20:42.79 NHkTpL6A.net
なるほど理解しました
589:デフォルトの名無しさん
24/11/08 03:24:29.70 NHkTpL6A.net
rdコマンドで親フォルダを削除しないようにするにはどう書けば良いのでしょうか?
590:デフォルトの名無しさん
24/11/08 03:36:30.13 NHkTpL6A.net
rdコマンドで無理なら対象のフォルダ以下にあるファイルやフォルダを全て削除するものでもかまいません。
591:デフォルトの名無しさん
24/11/08 10:30:14.55 n9fsiKUu.net
カレント移動すれば?
592:デフォルトの名無しさん
24/11/08 11:10:01.65 PSMBlcAH.net
フォルダーごと削除してから新規作成したほうが簡単じゃね
593:デフォルトの名無しさん
24/11/08 11:27:40.63 IbrHrevx.net
俺の環境だと>>585で消えるけど、/q付けないでやったらファイル削除確認メッセージが出てるか?
出てないなら中身のファイルの属性が隠しファイルになってるとか
594:デフォルトの名無しさん
24/11/08 23:02:21.70 gP+dh+BC.net
del /q "新しいフォルダー\*"
for /d %%i in ("新しいフォルダー\*") do rd /s /q "%%~i"
595:デフォルトの名無しさん
24/11/09 11:03:02.45 bVsLqwPh.net
cd "新しいフォルダー" && 2> nul rd /s /q .
596:デフォルトの名無しさん
24/11/09 11:39:56.84 L7dYAlvM.net
>>580
またつまづきました><
入力 12&encoding=se34 56=78
これで&encoding=seを削除したくて
set "s=%s:^&=%"
で&を通したんですが
'encoding'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されません。
となって出来ないです
set "s=%s:^encoding=%"
data = data.replace(/&encoding=se/g, "");
のように加えてもダメでした
どうすればいいですか?
597:デフォルトの名無しさん
24/11/09 13:08:18.35 q8k7iVH6.net
宿題は自分で考えよう
598:デフォルトの名無しさん
24/11/09 13:14:42.95 L+GgUCLJ.net
バッチでjscriptに渡す前に&が解釈されてるのかな?知らんけど
できないです、どうすればいいですかではなく
どこでエラーになってるか突き止めるのが先なのと
文字列処理したいなら違う言語例えばjscriptを覚えた方がよいかと
599:デフォルトの名無しさん
24/11/09 13:21:59.27 L+GgUCLJ.net
jscriptは>>580のようにOS標準で入ってる古いjavascript
最近の構文は一部使えないがバッチよりも動作が高速で正規表現など文字列処理にも適している
他にpowershellもある
600:デフォルトの名無しさん
24/11/09 14:09:23.50 A663IrvX.net
&はbatでの特殊記号であり、コマンドの区切りの意味がある
set a=aaaa&set b=bbb&set c=ccc
とか複数の命令を1行で書ける
他に&&,||もある
601:デフォルトの名無しさん
24/11/09 14:31:25.85 A663IrvX.net
もしかして、set /p mystringA=あいさつ:で入力したときの話か?
なら、""で括れ
set /p "mystringA=あいさつ:"
set mystringA="%mystringA:&=%"
echo "%mystringA%"
602:デフォルトの名無しさん
24/11/09 14:37:00.85 A663IrvX.net
set mystringA="%mystringA:&=%"→set "mystringA=%mystringA:&=%"
603:デフォルトの名無しさん
24/11/09 14:43:11.36 A663IrvX.net
あと>>580はデータを引数渡し("%s%")してるので、「"」をデータ内に入れることができない
ファイル渡しすれば確実だが、他に環境変数(s)で渡す場合を示しておく
data=new ActiveXObject("WScript.Shell").Environment("Process")("s").replace(/12=34/g,"4567");
604:デフォルトの名無しさん
24/11/09 15:04:16.22 A663IrvX.net
ついでに、&について
通常は使わなくても次の行に書けばいいが
閉じた環境からのデータを引渡ししたい場合などはどうしても使わなければならない
set a=1
call :sub
echo %a%
goto :eof
:sub
setlocal
set /a a+=1
endlocal&set a=%a%
goto :eof
605:デフォルトの名無しさん
24/11/09 18:43:13.91 L+GgUCLJ.net
>endlocal&set a=%a%
こんなキモい書き方した事ないな
そもそもsetlocalだかは弊害もあるから使わずに書く事を意識した方がいいね
このスレは安易に使いすぎてる
606:デフォルトの名無しさん
24/11/09 19:20:02.72 KYeqqNmx.net
ここはキモイ人ばっかりですから問題ないです笑
607:デフォルトの名無しさん
24/11/10 07:08:12.44 3mwMiYGo.net
遅延展開以外はsetlocalなんて滅多に使わんが他にどうしろと
608:デフォルトの名無しさん
24/11/10 10:11:26.77 zZSAaq07.net
setlocal enabledelayedexpansionは書く人多いけど
endlocalで閉じてる人見たこと無い
609:デフォルトの名無しさん
24/11/10 14:06:03.62 9SnRMU05.net
そりゃあ終了したら効果が無くなるんだから文法マニアくらいしか書かんだろう
610:デフォルトの名無しさん
24/11/10 18:35:44.79 i0Pkbsqf.net
サブルーチンでsetlocal enabledelayedexpansionを使ったら
endlocalを書かないと呼び出すたびに環境がコピーされていって
あっという間に正常に動作できなくなるさ
611:デフォルトの名無しさん
24/11/10 19:42:53.96 9SnRMU05.net
サブルーチンに置くというのは想定しなかったな
メインの、というかスクリプトの先頭に置く使い方しかしてないや
612:デフォルトの名無しさん
24/11/10 20:44:53.21 Hbc3IhS3.net
call先にsetlocalがあってもexit /bやgoto :eofで戻ると
変数復元されるのでendlocalは不要だが有ってもいい
やばいのはforやgotoでのループ内部にsetlocalしかないやつ
613:デフォルトの名無しさん
24/11/10 21:35:28.96 p0BF9o8N.net
>>603
ありがとう。
何時間かやってるけどうまくいかないです。
①@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 の使い方が誤っています。)
こういうのをスラスラ書ける天才たちがうらやましい。
614:デフォルトの名無しさん
24/11/10 22:06:03.40 zZSAaq07.net
forの中の"%ss%"を削除すれば?
615:デフォルトの名無しさん
24/11/10 22:08:14.92 cLh8//6O.net
うーんよく判らんけど
もう入力データはjscipt内でWScript.StdIn.ReadLine();からで拾ってきた方が早くね?とか
バッチはjsciptの呼び出し部分だけ残して全部jscriptでやった方が楽じゃね?とは思った
616:デフォルトの名無しさん
24/11/10 22:19:31.51 zZSAaq07.net
ファイル名として使っちゃダメな文字(又はデバイス名)ってのもあるので
そういうのが入力されたら別文字に変えるとか削除するとかしないとダメになるぞ
617:デフォルトの名無しさん
24/11/10 23:54:47.86 cLh8//6O.net
上で言った楽なやつね。叩き台としてどうかな
@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);
618:デフォルトの名無しさん
24/11/11 00:41:06.56 ggA4ksL2.net
"%ss%"を引数につけてると
入力に"を入れられると二週目からエラーとなる
619:デフォルトの名無しさん
24/11/11 00:55:30.51 ggA4ksL2.net
入力データから"を削除するようにしたほうがいい
ファイル名にも"は使えないから必要ないだろ
それと基本文字列を扱う場合は""で括ること
echo %ss%→echo "%ss%"
じゃないと、&|などでエラーになるし、^も消えるとかいろいろ起きる
(a^b.txtは正常なファイル名)
620:デフォルトの名無しさん
24/11/11 01:34:01.29 ggA4ksL2.net
"%ss%"でエラーになってるのはbatでの構文解釈時なのでjscriptでの対処云々以前の問題
621:デフォルトの名無しさん
24/11/11 02:13:27.56 BY3zyfqu.net
みなさんありがとう。
理想なのができたので、まず、
⑦をfor /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" ') do set ss= %%i
>>614
ありがとう。たったこれだけだったよ
>>615,617
文字制限で入力ができなかった。
でもそういうやり方もあるんだと学べたのでありがとう
>>618,619,620
このbatの後に渡されるexeの処理に””で括っておかないとexeのほうでエラーになる
ちゃんとそこを伝えれてなかったね、ごめん
回答してくれてありがとう
これWScript.StdIn.ReadLine();をchat gptで文字制限を聞いたら②のような入力方法だったよ
とはいえ、ありがとうございました><
622:デフォルトの名無しさん
24/11/11 03:53:20.62 vS/DyEQP.net
batというプログラミング初めてです。
初心者に良いサイト教えてください。
Windows 10です。
623:デフォルトの名無しさん
24/11/11 04:28:35.50 UKR+WOTm.net
>>622
www.google.co.jp
624:デフォルトの名無しさん
24/11/13 02:26:15.40 AkCTz+Wd.net
BATでこんなすごいことできるぞってのを教えてくださいハゲども
625:デフォルトの名無しさん
24/11/13 02:26:54.33 HWwn2oWP.net
>>621
すっかり忘れてたけど
"tokens=*"じゃ先頭が半角スペースやタブだと消えるし、セミコロンだとスキップされるという問題があった
バッチはクセがありすぎる
eolのデフォルトが;で、しかも"eol="だと今度は"が指定されたことになるとかウソーって言いたい
for /f delims^=^ eol^= %%i in ('cscript //nologo /e:jscript "%~f0"') do set ss=%%i
626:デフォルトの名無しさん
24/11/14 11:47:50.65 oC8TllJp.net
@echo off
set T=%tmp%\tmp.txt
type nul>%T%
for %%f in (%*) do (
>>%tmp%\tmp.txt echo %%~nxf
)
type %T% | clip
これだと正常に取得できません
正常にファイル名を取得できるようにするにはどう書けばいいでしょうか?
627:デフォルトの名無しさん
24/11/14 11:50:39.07 WvtXCkNi.net
他の「ふつう」の環境選ぶのがええよ
628:デフォルトの名無しさん
24/11/14 14:18:34.94 q/WsLCXM.net
>>626
半角空白が無くて全角空白があるファイルをドロップするとファイル名はそこで分かれる
過去ログにやり方はあるけど簡単なのは親フォルダ名のどこかに半角空白を入れておく
それ以外で正常にできないといってるのならもう少し現象を説明してもらわないと
俺達はエスパーじゃないんだから
629:627
24/11/14 15:26:47.13 oC8TllJp.net
>>628
すいません
2つのフォルダーと2つのテキストを用意し、この4つ全てを選択してコピーしたら一つしかコピーできなかったりして正常に動作しません
630:デフォルトの名無しさん
24/11/14 15:48:05.37 X91uzdxk.net
>>583 見ろ
631:デフォルトの名無しさん
24/11/14 16:15:29.07 q/WsLCXM.net
>>629
コピーって何?
一例としてエクスプローラで複数のファイルを選択反転してbatのショートカットにD&Dしたら
選択したファイルのファイル名がクリップボードに入ってるだろ
どこにコピーする操作が加わるんだ?
632:627
24/11/14 17:07:59.07 oC8TllJp.net
>>631
ファイル名のコピーです
633:デフォルトの名無しさん
24/11/14 17:19:32.22 q/WsLCXM.net
ファイル名のコピーしたならもうbatを動かすまでもなくファイル名一覧がクリップボードに入ってるじゃん
そもそもクリップボードに入ってるものを入力するようにはそのbatはできてないじゃんか
634:627
24/11/14 17:27:06.24 oC8TllJp.net
そのファイル名のコピーがうまくいかないのです
635:デフォルトの名無しさん
24/11/14 17:38:15.36 q/WsLCXM.net
何をしたいのかちゃんと説明できないのなら付きあえないよ
そのbatは、引数に列記されたファイル(パス)名を順次入力してファイル名のみにして列記した一覧をクリップボードに入れるということをやってる
【オペレーション例】
コマンドプロンプトを立ち上げて
hoge.bat "c:\aa.txt" "c:\bb.txt" "c:\cc.txt"
と入力したら
aa.txt
bb.txt
cc.txt
とクリップボードに入る
636:627
24/11/14 17:41:20.12 oC8TllJp.net
わかりました
失礼しました
637:デフォルトの名無しさん
24/12/11 20:24:09.34 y+gluRXv.net
BATだけでパスワード生成する方法を教えてください。
生成したパスワードをクリップボードにコピーする形でお願いします。
638:638
24/12/11 22:00:19.62 y+gluRXv.net
自己解決しました。
639:デフォルトの名無しさん
24/12/12 06:59:11.94 Qex7Xru+.net
パスワード生成はセキュアな乱数使った専用ツールでやれよ
640:デフォルトの名無しさん
24/12/17 20:20:11.38 0qw/aoLB.net
コンテキストメニューにregeditで追加したbatで複数のファイルを実行したら2回実行されるんだけど、これって引数2個で1回だけ実行させる方法ありますか?
641:デフォルトの名無しさん
24/12/18 07:22:31.48 alC6IUD1.net
%1 %*
みたいに書くんじゃなかったか
と超適当レス
642:デフォルトの名無しさん
24/12/19 07:22:17.49 jup1lTg9.net
BATでこんなことできるぞってのを教えてください。
643:デフォルトの名無しさん
24/12/19 08:07:25.40 i8S4J+Do.net
無限増殖.bat
@echo off
start "%~f0"
start "%~f0"
644:デフォルトの名無しさん
24/12/19 18:24:35.68 9yUs11tl.net
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
645:デフォルトの名無しさん
24/12/20 00:11:16.18 TH9BF58b.net
>>644
これでbatそのまま?(処理を抜き出したもので元々はループさせたりしてない?)
またpuaseを付けるところを見るにダブルクリックとかで実行?
コマンドプロンプトで複数回実行したりしてない?
まあ説明すると
入力でそのままエンターすると変数にヌル文字が入るわけじゃなくて変数の入力自体をしない
つまり、以前に定義されてた値があればそれがそのまま入ったままだし
未定義なら未定義のままとなる
ループさせるとかなら変数の初期化をするのがいい
set InputPath=
(これでInputPathは未定義となる)
if not defiend InputPath echo msg=空欄だよ
まあ未定義なら
if "%InputPath%"=="" (
set msg=空欄だよ
のままでちゃんと「空欄だよ」となるはずだから直す必要は無いけど
それと
set InputPath=%InputPath:"=% → set "InputPath=%InputPath:"=%"
としないと、入力に a&b などと入れられると問題となる
646:645
24/12/20 01:08:13.42 byrLY/tu.net
>>645
助言ありがとうございます
set InputPath="" を @echo off 直下に追加したところ希望通りの結果が得られました
助かりました!
ちなみにダブルクリックで1回だけ実行しループ処理は入れてません。貼った構文が全てです
647:デフォルトの名無しさん
25/01/24 11:47:15.87 zMaqlWh1.net
いつのころからか
cmdhome.lnk
みたいなcmd起動ショートカット作って
アイコン指定してもアイコンが反映されなくなってしまった
Win10なんだけどなんか改善方法ないんだろうか
味気なさ過ぎて悲しい
648:デフォルトの名無しさん
25/01/25 04:04:41.46 ZawpPmOr.net
レガシーコンソールじゃないとアイコン反映されないっぽいな
なんで退化してしまうのか
649:デフォルトの名無しさん
25/01/26 10:14:52.12 QXh9thRU.net
>>647=>>648なんだろうけど
ちょっと意味がわからんかったわ
画像付きでどうしたいのか説明してくれんかね
650:デフォルトの名無しさん
25/01/26 14:54:43.71 WMeA3DrY.net
エクスプローラー再起動で反映されない?
651:デフォルトの名無しさん
25/01/26 15:05:23.00 4xEs3XpP.net
バッチでHexからBase58へ変換したい
可能ですか?
参考
learnmeabitcoin.com/technical/keys/base58/
652:デフォルトの名無しさん
25/01/26 15:20:12.21 atsgMxQf.net
Base64ならCertUtilでできるがBase58のコマンドはない
そのリンク先にRubyのコードがあるから参考にしたら
653:デフォルトの名無しさん
25/02/06 21:17:32.84 TFp3Dqlz.net
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
654:デフォルトの名無しさん
25/02/09 22:32:47.90 7kSqL9GbI
晴れた日に道を歩くだけて゛斉藤鉄夫や自民党に殺される時代になったな、賄賂癒着してる資本家階級と共謀してカンコ‐だのと海に囲まれた
曰本でわざわざ陸域をJALΑNAテロリストどもにクソ航空機飛ばさせて莫大な温室効果ガスまき散らして気温上昇させて街路樹まで暴風に
脱水症状にと枝を弱らせて歩行者殺害、裁判では予見可能性が争われるが洪水やら含めて容易に予見できる完全な殺人
斉藤鉄夫のような憲法ガン無視公務員を殺害する権利を國民が有する社会を民主主義というが,立憲も自民と大差なし、100兆円超の税金
使っててまだ小さな政府だのほざいてる枝野幸男とか野心か゛透けて見えるしな、高度成長期か゛終わった國は小さな政府に移行すべきだか゛
公務員を最低賃金に統一して不正に死刑導入するならともかく大きな政府ほと゛國民はクソ公務員から奪い取られる比率か゛高まるものだしな
航空騒音によって根絶やしにされた研究開発や気候変動によって失われた収入を補償するためにクソ公務員による不公平性を排除した最低
所得保障と生産性のない連中の既得権破壞の解雇自由化と自民公明を殺人で起訴することを掲げた党が必要
(ref.) ttps://www.call4.jp/info.php?type=items&id=I0000062
ttΡs://haneda-projecт.jimdofreе.com/ , URLリンク(flight-rout)e.com/
ttps://n-souonhigaisosуoudan.amebaownd.com/
655:デフォルトの名無しさん
25/02/12 16:52:19.09 oMyiCtXq.net
@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