拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう
過去スレ
%14 https://mevius.5ch.net/test/read.cgi/tech/1597442426/
%13 https://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 https://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 https://echo.2ch.net/test/read.cgi/tech/1424858999/
%10 https://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 https://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 https://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 https://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 https://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 https://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 https://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 https://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 https://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
https://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
https://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
https://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
https://pc5.2ch.net/test/read.cgi/tech/1040614686/
探検
【.cmd】 バッチファイルスクリプト %15 【.bat】
2022/09/14(水) 20:04:01.36ID:XL8H98jz
626デフォルトの名無しさん
2024/11/13(水) 02:26:54.33ID:HWwn2oWP >>622
すっかり忘れてたけど
"tokens=*"じゃ先頭が半角スペースやタブだと消えるし、セミコロンだとスキップされるという問題があった
バッチはクセがありすぎる
eolのデフォルトが;で、しかも"eol="だと今度は"が指定されたことになるとかウソーって言いたい
for /f delims^=^ eol^= %%i in ('cscript //nologo /e:jscript "%~f0"') do set ss=%%i
すっかり忘れてたけど
"tokens=*"じゃ先頭が半角スペースやタブだと消えるし、セミコロンだとスキップされるという問題があった
バッチはクセがありすぎる
eolのデフォルトが;で、しかも"eol="だと今度は"が指定されたことになるとかウソーって言いたい
for /f delims^=^ eol^= %%i in ('cscript //nologo /e:jscript "%~f0"') do set ss=%%i
627デフォルトの名無しさん
2024/11/14(木) 11:47:50.65ID:oC8TllJp @echo off
set T=%tmp%\tmp.txt
type nul>%T%
for %%f in (%*) do (
>>%tmp%\tmp.txt echo %%~nxf
)
type %T% | clip
これだと正常に取得できません
正常にファイル名を取得できるようにするにはどう書けばいいでしょうか?
set T=%tmp%\tmp.txt
type nul>%T%
for %%f in (%*) do (
>>%tmp%\tmp.txt echo %%~nxf
)
type %T% | clip
これだと正常に取得できません
正常にファイル名を取得できるようにするにはどう書けばいいでしょうか?
628デフォルトの名無しさん
2024/11/14(木) 11:50:39.07ID:WvtXCkNi 他の「ふつう」の環境選ぶのがええよ
629デフォルトの名無しさん
2024/11/14(木) 14:18:34.94ID:q/WsLCXM >>627
半角空白が無くて全角空白があるファイルをドロップするとファイル名はそこで分かれる
過去ログにやり方はあるけど簡単なのは親フォルダ名のどこかに半角空白を入れておく
それ以外で正常にできないといってるのならもう少し現象を説明してもらわないと
俺達はエスパーじゃないんだから
半角空白が無くて全角空白があるファイルをドロップするとファイル名はそこで分かれる
過去ログにやり方はあるけど簡単なのは親フォルダ名のどこかに半角空白を入れておく
それ以外で正常にできないといってるのならもう少し現象を説明してもらわないと
俺達はエスパーじゃないんだから
630627
2024/11/14(木) 15:26:47.13ID:oC8TllJp631デフォルトの名無しさん
2024/11/14(木) 15:48:05.37ID:X91uzdxk >>584 見ろ
632デフォルトの名無しさん
2024/11/14(木) 16:15:29.07ID:q/WsLCXM >>630
コピーって何?
一例としてエクスプローラで複数のファイルを選択反転してbatのショートカットにD&Dしたら
選択したファイルのファイル名がクリップボードに入ってるだろ
どこにコピーする操作が加わるんだ?
コピーって何?
一例としてエクスプローラで複数のファイルを選択反転してbatのショートカットにD&Dしたら
選択したファイルのファイル名がクリップボードに入ってるだろ
どこにコピーする操作が加わるんだ?
633627
2024/11/14(木) 17:07:59.07ID:oC8TllJp >>632
ファイル名のコピーです
ファイル名のコピーです
634デフォルトの名無しさん
2024/11/14(木) 17:19:32.22ID:q/WsLCXM ファイル名のコピーしたならもうbatを動かすまでもなくファイル名一覧がクリップボードに入ってるじゃん
そもそもクリップボードに入ってるものを入力するようにはそのbatはできてないじゃんか
そもそもクリップボードに入ってるものを入力するようにはそのbatはできてないじゃんか
635627
2024/11/14(木) 17:27:06.24ID:oC8TllJp そのファイル名のコピーがうまくいかないのです
636デフォルトの名無しさん
2024/11/14(木) 17:38:15.36ID:q/WsLCXM 何をしたいのかちゃんと説明できないのなら付きあえないよ
そのbatは、引数に列記されたファイル(パス)名を順次入力してファイル名のみにして列記した一覧をクリップボードに入れるということをやってる
【オペレーション例】
コマンドプロンプトを立ち上げて
hoge.bat "c:\aa.txt" "c:\bb.txt" "c:\cc.txt"
と入力したら
aa.txt
bb.txt
cc.txt
とクリップボードに入る
そのbatは、引数に列記されたファイル(パス)名を順次入力してファイル名のみにして列記した一覧をクリップボードに入れるということをやってる
【オペレーション例】
コマンドプロンプトを立ち上げて
hoge.bat "c:\aa.txt" "c:\bb.txt" "c:\cc.txt"
と入力したら
aa.txt
bb.txt
cc.txt
とクリップボードに入る
637627
2024/11/14(木) 17:41:20.12ID:oC8TllJp わかりました
失礼しました
失礼しました
638デフォルトの名無しさん
2024/12/11(水) 20:24:09.34ID:y+gluRXv BATだけでパスワード生成する方法を教えてください。
生成したパスワードをクリップボードにコピーする形でお願いします。
生成したパスワードをクリップボードにコピーする形でお願いします。
639638
2024/12/11(水) 22:00:19.62ID:y+gluRXv 自己解決しました。
640デフォルトの名無しさん
2024/12/12(木) 06:59:11.94ID:Qex7Xru+ パスワード生成はセキュアな乱数使った専用ツールでやれよ
641デフォルトの名無しさん
2024/12/17(火) 20:20:11.38ID:0qw/aoLB コンテキストメニューにregeditで追加したbatで複数のファイルを実行したら2回実行されるんだけど、これって引数2個で1回だけ実行させる方法ありますか?
642デフォルトの名無しさん
2024/12/18(水) 07:22:31.48ID:alC6IUD1 %1 %*
みたいに書くんじゃなかったか
と超適当レス
みたいに書くんじゃなかったか
と超適当レス
643デフォルトの名無しさん
2024/12/19(木) 07:22:17.49ID:jup1lTg9 BATでこんなことできるぞってのを教えてください。
644デフォルトの名無しさん
2024/12/19(木) 08:07:25.40ID:i8S4J+Do 無限増殖.bat
@echo off
start "%~f0"
start "%~f0"
@echo off
start "%~f0"
start "%~f0"
645デフォルトの名無しさん
2024/12/19(木) 18:24:35.68ID:9yUs11tl 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
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デフォルトの名無しさん
2024/12/20(金) 00:11:16.18ID:TH9BF58b >>645
これでbatそのまま?(処理を抜き出したもので元々はループさせたりしてない?)
またpuaseを付けるところを見るにダブルクリックとかで実行?
コマンドプロンプトで複数回実行したりしてない?
まあ説明すると
入力でそのままエンターすると変数にヌル文字が入るわけじゃなくて変数の入力自体をしない
つまり、以前に定義されてた値があればそれがそのまま入ったままだし
未定義なら未定義のままとなる
ループさせるとかなら変数の初期化をするのがいい
set InputPath=
(これでInputPathは未定義となる)
if not defiend InputPath echo msg=空欄だよ
まあ未定義なら
if "%InputPath%"=="" (
set msg=空欄だよ
のままでちゃんと「空欄だよ」となるはずだから直す必要は無いけど
それと
set InputPath=%InputPath:"=% → set "InputPath=%InputPath:"=%"
としないと、入力に a&b などと入れられると問題となる
これでbatそのまま?(処理を抜き出したもので元々はループさせたりしてない?)
またpuaseを付けるところを見るにダブルクリックとかで実行?
コマンドプロンプトで複数回実行したりしてない?
まあ説明すると
入力でそのままエンターすると変数にヌル文字が入るわけじゃなくて変数の入力自体をしない
つまり、以前に定義されてた値があればそれがそのまま入ったままだし
未定義なら未定義のままとなる
ループさせるとかなら変数の初期化をするのがいい
set InputPath=
(これでInputPathは未定義となる)
if not defiend InputPath echo msg=空欄だよ
まあ未定義なら
if "%InputPath%"=="" (
set msg=空欄だよ
のままでちゃんと「空欄だよ」となるはずだから直す必要は無いけど
それと
set InputPath=%InputPath:"=% → set "InputPath=%InputPath:"=%"
としないと、入力に a&b などと入れられると問題となる
647645
2024/12/20(金) 01:08:13.42ID:byrLY/tu >>646
助言ありがとうございます
set InputPath="" を @echo off 直下に追加したところ希望通りの結果が得られました
助かりました!
ちなみにダブルクリックで1回だけ実行しループ処理は入れてません。貼った構文が全てです
助言ありがとうございます
set InputPath="" を @echo off 直下に追加したところ希望通りの結果が得られました
助かりました!
ちなみにダブルクリックで1回だけ実行しループ処理は入れてません。貼った構文が全てです
648デフォルトの名無しさん
2025/01/24(金) 11:47:15.87ID:zMaqlWh1 いつのころからか
cmdhome.lnk
みたいなcmd起動ショートカット作って
アイコン指定してもアイコンが反映されなくなってしまった
Win10なんだけどなんか改善方法ないんだろうか
味気なさ過ぎて悲しい
cmdhome.lnk
みたいなcmd起動ショートカット作って
アイコン指定してもアイコンが反映されなくなってしまった
Win10なんだけどなんか改善方法ないんだろうか
味気なさ過ぎて悲しい
649デフォルトの名無しさん
2025/01/25(土) 04:04:41.46ID:ZawpPmOr レガシーコンソールじゃないとアイコン反映されないっぽいな
なんで退化してしまうのか
なんで退化してしまうのか
650デフォルトの名無しさん
2025/01/26(日) 10:14:52.12ID:QXh9thRU651デフォルトの名無しさん
2025/01/26(日) 14:54:43.71ID:WMeA3DrY エクスプローラー再起動で反映されない?
652デフォルトの名無しさん
2025/01/26(日) 15:05:23.00ID:4xEs3XpP バッチでHexからBase58へ変換したい
可能ですか?
参考
learnmeabitcoin.com/technical/keys/base58/
可能ですか?
参考
learnmeabitcoin.com/technical/keys/base58/
653デフォルトの名無しさん
2025/01/26(日) 15:20:12.21ID:atsgMxQf Base64ならCertUtilでできるがBase58のコマンドはない
そのリンク先にRubyのコードがあるから参考にしたら
そのリンク先にRubyのコードがあるから参考にしたら
654デフォルトの名無しさん
2025/02/06(木) 21:17:32.84ID:TFp3Dqlz 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
これさえマスターすればどんな複雑な処理も書ける
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デフォルトの名無しさん
2025/02/12(水) 16:52:19.09ID:oMyiCtXq @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
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デフォルトの名無しさん
2025/02/16(日) 04:09:02.74ID:Nn6kjJ7X set
foo.exe
set
としたときにfoo.exe内で書き換えた環境変数を
呼び出し側が取り込むことってできないの?
バッチ同士ならcallで行けるけどそんな感じで
foo.exe
set
としたときにfoo.exe内で書き換えた環境変数を
呼び出し側が取り込むことってできないの?
バッチ同士ならcallで行けるけどそんな感じで
657デフォルトの名無しさん
2025/02/16(日) 06:41:06.81ID:51aCbtwK 俺もよく分かってないけど、
環境変数って大本はレジストリに入ってる
で普通は各々のプロセスで環境変数のインスタンスが生成されてそれを弄ることになる
サブプロセスを生成した場合は親の環境がコピーされていてそれを弄ることになる
そうならサブプロセスが終了した後ではもう残っていないことになる
サブプロセス(foo.exe)がどこの環境変数を弄るかによる
それともレジストリを書き換えたのか?
環境変数って大本はレジストリに入ってる
で普通は各々のプロセスで環境変数のインスタンスが生成されてそれを弄ることになる
サブプロセスを生成した場合は親の環境がコピーされていてそれを弄ることになる
そうならサブプロセスが終了した後ではもう残っていないことになる
サブプロセス(foo.exe)がどこの環境変数を弄るかによる
それともレジストリを書き換えたのか?
658デフォルトの名無しさん
2025/02/16(日) 08:16:27.56ID:nK83B1eq プロセス終了後に弄った環境変数を取得?
そんなの簡単にできたらセキュリティーホールになりそう
そんなの簡単にできたらセキュリティーホールになりそう
659デフォルトの名無しさん
2025/02/16(日) 11:25:20.82ID:51aCbtwK すごいシステムの下層レベルだと出来る方法があるのかも知れないけど
通常はプロセスは各々独立してて他プロセスのメモリ空間は共有されない
通常はプロセスは各々独立してて他プロセスのメモリ空間は共有されない
660デフォルトの名無しさん
2025/02/16(日) 14:24:06.62ID:51aCbtwK Linuxだと子プロセスから親プロセスに引き継ぐことができるらしい
(親プロセスが子プロセス生成時に親プロセス側でsourceコマンドを実行)
が、やっぱりWindowsでは無いみたい
https://learn.microsoft.com/ja-jp/windows/win32/procthread/changing-environment-variables
>既定では、子プロセスは親プロセスの環境ブロックのコピーを継承します
>プロセスの作成時に子プロセスの環境変数を変更することは、1 つのプロセスが別のプロセスの環境変数を直接変更できる唯一の方法です。 プロセスは、そのプロセスの子ではない別のプロセスの環境変数を直接変更することはできません。
(親プロセスが子プロセス生成時に親プロセス側でsourceコマンドを実行)
が、やっぱりWindowsでは無いみたい
https://learn.microsoft.com/ja-jp/windows/win32/procthread/changing-environment-variables
>既定では、子プロセスは親プロセスの環境ブロックのコピーを継承します
>プロセスの作成時に子プロセスの環境変数を変更することは、1 つのプロセスが別のプロセスの環境変数を直接変更できる唯一の方法です。 プロセスは、そのプロセスの子ではない別のプロセスの環境変数を直接変更することはできません。
661デフォルトの名無しさん
2025/02/16(日) 14:29:31.27ID:51aCbtwK なので現実的な方法としては
foo.exeで渡したい情報はファイルか標準出力で親プロセスに渡せばいいと思う
foo.exeで渡したい情報はファイルか標準出力で親プロセスに渡せばいいと思う
662デフォルトの名無しさん
2025/02/17(月) 08:27:15.30ID:oRb3RUoY 無理なのか
何が何でもという事もないので
受け渡し用tempファイルでやることにするよ
サンクス
何が何でもという事もないので
受け渡し用tempファイルでやることにするよ
サンクス
663デフォルトの名無しさん
2025/02/17(月) 23:32:14.20ID:l9ByBUai for %%A in(*.xlsx *.xls)←ループ処理する時に、
*.xlsと*.xlsxを指定したら.xlsxは2回実行されてしまう。
*.xlsだけ指定すると1回だけ実行される。
含むではなくて、*.xlsで終わるか*.xlsxで終わるものを指定する検索はどうしたら出来ますか?
*.xlsと*.xlsxを指定したら.xlsxは2回実行されてしまう。
*.xlsだけ指定すると1回だけ実行される。
含むではなくて、*.xlsで終わるか*.xlsxで終わるものを指定する検索はどうしたら出来ますか?
664デフォルトの名無しさん
2025/02/18(火) 00:40:03.94ID:iDsz3WKD findstrで自己解決しそう、ありがとう兄妹ノシ
665デフォルトの名無しさん
2025/02/18(火) 17:36:17.24ID:GcWP7NNv for %%A in (*.xls?) じゃダメなの?
.xlsaとか.xlsbなんてファイル普通ないでしょ
.xlsaとか.xlsbなんてファイル普通ないでしょ
666デフォルトの名無しさん
2025/02/18(火) 17:39:49.38ID:IbEo812m667デフォルトの名無しさん
2025/02/18(火) 18:45:22.20ID:TLR0SIQr dir /b|findstrよりももしかしたら遅いかもしれんが
for /f "tokens=* delims=" %%i in ('forfiles /m *.xls') do @echo %%~i
for /f "tokens=* delims=" %%i in ('forfiles /m *.xls') do @echo %%~i
668デフォルトの名無しさん
2025/02/18(火) 19:16:46.03ID:naPa9y/a ?は付けとけ
環境に依存する
環境に依存する
669デフォルトの名無しさん
2025/02/18(火) 19:20:25.10ID:TLR0SIQr 要件とは別に.xlsと.xlsxとを区別するものを上げただけ
あとはよろしく
あとはよろしく
670デフォルトの名無しさん
2025/02/20(木) 00:56:47.67ID:OIbQhS2Y671デフォルトの名無しさん
2025/02/24(月) 09:10:00.84ID:c2/p8Qwq フォルダの中に
ファイル名にシングルクォートが入ってるファイルが複数あって
シングルクォートだけ一気に削除する簡単な方法ない?
ファイルの削除じゃなくて
ファイル名にシングルクォートが入ってるファイルが複数あって
シングルクォートだけ一気に削除する簡単な方法ない?
ファイルの削除じゃなくて
672デフォルトの名無しさん
2025/02/24(月) 09:14:41.39ID:K9TE8hB9 powerqueryかな
673デフォルトの名無しさん
2025/02/26(水) 03:08:05.14ID:Lge+mbBz いろいろ調べて、ファイル名の頭に更新日時を付けるバッチファイルを作りました
@ECHO OFF
:LOOP
IF "%~1" EQU "" GOTO :EOF
FOR %%F IN (%1) DO (
FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tF") DO (
REN "%~1" "%%A.%%B.%%C %%~nxF"
)
)
SHIFT
GOTO LOOP
このbatファイルにmp4動画をまとめてD&Dで
2025.02.26 動画3.mp4
2025.02.24 動画2.mp4
2025.02.15 動画1.mp4
こんな感じで動画ファイルの頭に更新日時が付くようになったのですが、
動画ファイルによっては名前が変更されず 61個中31個 が変更されませんでした。
ものによって更新日時が取り出せないのか、もしくはコードが悪いのか分かる方はいませんか?
バッチファイルを Windows10のテキストで作成して、文字コード ANSIの形式で保存しています。
@ECHO OFF
:LOOP
IF "%~1" EQU "" GOTO :EOF
FOR %%F IN (%1) DO (
FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tF") DO (
REN "%~1" "%%A.%%B.%%C %%~nxF"
)
)
SHIFT
GOTO LOOP
このbatファイルにmp4動画をまとめてD&Dで
2025.02.26 動画3.mp4
2025.02.24 動画2.mp4
2025.02.15 動画1.mp4
こんな感じで動画ファイルの頭に更新日時が付くようになったのですが、
動画ファイルによっては名前が変更されず 61個中31個 が変更されませんでした。
ものによって更新日時が取り出せないのか、もしくはコードが悪いのか分かる方はいませんか?
バッチファイルを Windows10のテキストで作成して、文字コード ANSIの形式で保存しています。
674デフォルトの名無しさん
2025/02/26(水) 03:14:30.37ID:dl6vXEdA echo on
675デフォルトの名無しさん
2025/02/26(水) 06:53:35.41ID:u15kjvGd ファイル名に点とかスペース入れる奴は絶滅した方が良いと思うの
676デフォルトの名無しさん
2025/02/26(水) 06:58:53.12ID:E5xeTX8Z バッチファイルってD&Dでけるの?
良いこと聞いちゃった㌧
一部ループするのが不思議。
良いこと聞いちゃった㌧
一部ループするのが不思議。
677673
2025/02/26(水) 13:01:30.47ID:Lge+mbBz 動画とバッチファイルを置いてある場所に日本語のパスが入っていたことが名前変更が出来なかった原因でした。
点とスペースを入れても大丈夫みたいでした。
上記のコードは更新日時なのですが、作成日時にしたい場合はどのような記述に変更すればいいでしょうか?
点とスペースを入れても大丈夫みたいでした。
上記のコードは更新日時なのですが、作成日時にしたい場合はどのような記述に変更すればいいでしょうか?
678デフォルトの名無しさん
2025/02/26(水) 14:07:44.67ID:FzkkoRDx dir /tc
for /f のskip=指定
for /f のskip=指定
679673
2025/02/26(水) 16:08:26.35ID:Lge+mbBz >>678どうもありがとうございます。
@echo off
setlocal enabledelayedexpansion
rem ドラッグ&ドロップしたファイルを1つずつ処理
for %%i in (%*) do (
for /f %%a in ('dir /TC ^| findstr "%%~nxi"') do (
set datetime=%%a
)
set y=!datetime:~0,4!
set m=!datetime:~5,2!
set d=!datetime:~8,2!
set setdate=!y!.!m!.!d!_
ren "%%~nxi" "!setdate!%%~nxi"
echo 新しいファイル名 → "!setdate!%%~nxi"
)
endlocal
pause
新しく作り直したバッチファイルなのですが、不具合が出ました。
バッチファイルで作成日時を加えた動画名 実際の作成日時
2023.09.08_動画1.mp4 2022/06/01
2023.09.09_動画2.mp4 2022/06/02
2023.08.19_動画3.mp4 2022/04/10
こんな感じで、実際の日時と違いが出てしまいました。どこが間違っているか分かる人教えてください。
@echo off
setlocal enabledelayedexpansion
rem ドラッグ&ドロップしたファイルを1つずつ処理
for %%i in (%*) do (
for /f %%a in ('dir /TC ^| findstr "%%~nxi"') do (
set datetime=%%a
)
set y=!datetime:~0,4!
set m=!datetime:~5,2!
set d=!datetime:~8,2!
set setdate=!y!.!m!.!d!_
ren "%%~nxi" "!setdate!%%~nxi"
echo 新しいファイル名 → "!setdate!%%~nxi"
)
endlocal
pause
新しく作り直したバッチファイルなのですが、不具合が出ました。
バッチファイルで作成日時を加えた動画名 実際の作成日時
2023.09.08_動画1.mp4 2022/06/01
2023.09.09_動画2.mp4 2022/06/02
2023.08.19_動画3.mp4 2022/04/10
こんな感じで、実際の日時と違いが出てしまいました。どこが間違っているか分かる人教えてください。
680デフォルトの名無しさん
2025/02/26(水) 16:27:38.12ID:FzkkoRDx どうして未完成中にecho offするの?
echo offは完成後にしろよ
多分findstrで複数の同名のファイルにマッチしてるんだろう
つまり別のファイルの日付を拾ってる
echo offは完成後にしろよ
多分findstrで複数の同名のファイルにマッチしてるんだろう
つまり別のファイルの日付を拾ってる
681デフォルトの名無しさん
2025/02/26(水) 16:34:20.93ID:FzkkoRDx 又はどれにもマッチしてなくてdatetimeが以前の値を保持してるか
あと
dir /tc "%%~i"
あと
dir /tc "%%~i"
682デフォルトの名無しさん
2025/02/26(水) 16:47:49.35ID:FzkkoRDx あとD&Dでファイルの受け渡しは完全じゃないのに注意
半角空白をパスに含まないかつ全角空白を含む
c:\data\あ い.txt
こういうのだと「c:\data\あ」と「い」の2つに分かれる
半角空白をパスに含まないかつ全角空白を含む
c:\data\あ い.txt
こういうのだと「c:\data\あ」と「い」の2つに分かれる
683デフォルトの名無しさん
2025/02/26(水) 17:22:40.52ID:Lge+mbBz ネットにあるサンプルコードの一部分を少し変えて試してるだけなので
アドバイスを頂いているのですが全く理解できません。
今のところ 更新日時 = 作成日時 っぽいので
@ECHO ON
:LOOP
IF "%~1" EQU "" GOTO :EOF
FOR %%F IN (%1) DO (
FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tF") DO (
REN "%~1" "%%A.%%B.%%C %%~nxF"
)
)
SHIFT
GOTO LOOP
更新日時を付けてくれるこれに頼ります。
679に書いたコードが初心者にも理解しやすいサンプルコードっぽかったのですが
ここで聞いたら欠陥だらけ見たいなのでやめときます
半角空白や全角空白や日本語パスの問題は一時的に動画ファイルを移動させて解決させます。
アドバイスを頂いているのですが全く理解できません。
今のところ 更新日時 = 作成日時 っぽいので
@ECHO ON
:LOOP
IF "%~1" EQU "" GOTO :EOF
FOR %%F IN (%1) DO (
FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tF") DO (
REN "%~1" "%%A.%%B.%%C %%~nxF"
)
)
SHIFT
GOTO LOOP
更新日時を付けてくれるこれに頼ります。
679に書いたコードが初心者にも理解しやすいサンプルコードっぽかったのですが
ここで聞いたら欠陥だらけ見たいなのでやめときます
半角空白や全角空白や日本語パスの問題は一時的に動画ファイルを移動させて解決させます。
684デフォルトの名無しさん
2025/03/07(金) 21:09:01.97ID:VgDCtbBb バッチとは関係ないけど
たまにエクスプローラーで見ると更新日時のないファイルがあるけど
あれは何なんだろう
右クリックでプロパティを見てもないんだ
たまにエクスプローラーで見ると更新日時のないファイルがあるけど
あれは何なんだろう
右クリックでプロパティを見てもないんだ
685デフォルトの名無しさん
2025/03/07(金) 21:12:50.49ID:sd+opADM686デフォルトの名無しさん
2025/03/07(金) 23:48:55.40ID:qVctmwDB タイムスタンプが1980/01/01 8:59:59より前だと表示されないだけ
687デフォルトの名無しさん
2025/03/07(金) 23:56:21.18ID:qVctmwDB より前→以前だった
要するに、1980/01/01 9:00:00以降でないと、エクスプローラーで表示されない
要するに、1980/01/01 9:00:00以降でないと、エクスプローラーで表示されない
688デフォルトの名無しさん
2025/03/08(土) 17:00:59.96ID:oOL+XIfI >>686が正解
689デフォルトの名無しさん
2025/03/08(土) 17:01:04.22ID:oOL+XIfI >>686が正解
690デフォルトの名無しさん
2025/03/08(土) 17:05:24.27ID:oOL+XIfI すまん連投した
1980/1/1 0:0:1以降はプロパティ表示
1980/1/1 0:0:1以降はプロパティ表示
691デフォルトの名無しさん
2025/03/17(月) 15:46:18.20ID:HZpHcb9U oh my posh for cmdなんてあるんだな
さすがにwtじゃないと駄目っぽいが
さすがにwtじゃないと駄目っぽいが
692デフォルトの名無しさん
2025/04/19(土) 00:45:06.61ID:pkdgLcU5 set str=aaa "dd d"
echo echo1 %str%
echo echo2 "%str%"
call :callecho "%str%"
pause
goto :EOF
:callecho
echo echo3 %1
echo echo4 %~1
echo echo5 %2
echo echo6 %~2
exit /b
二重引用符括ったものを入れ子の構造と認識していない様子
"%str%"で一つの引数とするためには、どのようにエスケープすればいい?
echo echo1 %str%
echo echo2 "%str%"
call :callecho "%str%"
pause
goto :EOF
:callecho
echo echo3 %1
echo echo4 %~1
echo echo5 %2
echo echo6 %~2
exit /b
二重引用符括ったものを入れ子の構造と認識していない様子
"%str%"で一つの引数とするためには、どのようにエスケープすればいい?
693デフォルトの名無しさん
2025/04/19(土) 08:10:38.43ID:738SS3ZO 誰か助けて
今度会社でBOXを採用して共有フォルダを廃止するらしい
batファイルで大量のファイルの移動とかコピーとかしてたけど
ブラウザではめんどくさすぎる
batファイル風に操作する方法ありますか?
今度会社でBOXを採用して共有フォルダを廃止するらしい
batファイルで大量のファイルの移動とかコピーとかしてたけど
ブラウザではめんどくさすぎる
batファイル風に操作する方法ありますか?
694デフォルトの名無しさん
2025/04/19(土) 08:17:30.95ID:pYJssLIc >>693
社内で孤立してたりするの?
社内で孤立してたりするの?
695デフォルトの名無しさん
2025/04/19(土) 11:32:28.15ID:1418i819 >>692
引数の解釈で分離するから無理
参考までに
set str=aaa "dd d"
echo echo1 %str%
echo echo2 "%str%"
call :callecho str
call :callecho "%%%%str%%%%"
goto :EOF
:callecho
echo echo3 %1
call echo echo4 %%%1%%
echo echo5 %1
call echo echo6 %1
引数の解釈で分離するから無理
参考までに
set str=aaa "dd d"
echo echo1 %str%
echo echo2 "%str%"
call :callecho str
call :callecho "%%%%str%%%%"
goto :EOF
:callecho
echo echo3 %1
call echo echo4 %%%1%%
echo echo5 %1
call echo echo6 %1
696デフォルトの名無しさん
2025/04/19(土) 12:17:01.61ID:1418i819 >>692
絶対使わない文字列に一旦変換するのが良いのかも
call :callecho "%str:"=<”>%"
goto :EOF
:callecho
set arg1=%~1
set arg1=%arg1:<”>="%
echo echo3 %arg1%
絶対使わない文字列に一旦変換するのが良いのかも
call :callecho "%str:"=<”>%"
goto :EOF
:callecho
set arg1=%~1
set arg1=%arg1:<”>="%
echo echo3 %arg1%
697デフォルトの名無しさん
2025/04/19(土) 12:35:34.33ID:738SS3ZO >>694
はい
はい
699デフォルトの名無しさん
2025/04/28(月) 22:55:03.86ID:HidpH75d コマンドプロンプト初心者です。
新部署では毎日他業者と画像やpdfのやり取りを行うのですが、そのやり取りした記録の保存を任されることになりました。
保存するデータの命名規則が「YYYYMMDD-(2桁連番)-元ファイル名.拡張子」なんですが、毎日データが数十個あって連番を手で振る作業がそろそろしんどいです。
コマンドプロンプトは使えてもbatは使えない特殊環境で、何とかforfilesとrenameを使って「元ファイル名.拡張子」を「YYYYMMDD-元ファイル名.拡張子」に一括改名するまではできるようになりました。
更に連番を振るようにするにはどうすればいいでしょうか?
なお、「元ファイル名.拡張子」の部分には法則性はまるでありません。
新部署では毎日他業者と画像やpdfのやり取りを行うのですが、そのやり取りした記録の保存を任されることになりました。
保存するデータの命名規則が「YYYYMMDD-(2桁連番)-元ファイル名.拡張子」なんですが、毎日データが数十個あって連番を手で振る作業がそろそろしんどいです。
コマンドプロンプトは使えてもbatは使えない特殊環境で、何とかforfilesとrenameを使って「元ファイル名.拡張子」を「YYYYMMDD-元ファイル名.拡張子」に一括改名するまではできるようになりました。
更に連番を振るようにするにはどうすればいいでしょうか?
なお、「元ファイル名.拡張子」の部分には法則性はまるでありません。
700デフォルトの名無しさん
2025/04/28(月) 23:02:44.23ID:CiQ2PPMB >693
誰か教えて
誰か教えて
701デフォルトの名無しさん
2025/04/29(火) 11:54:34.55ID:zLDT8DZ5702デフォルトの名無しさん
2025/04/29(火) 12:50:47.28ID:wEK97Pj7 >>701
自動化したいです
自動化したいです
703デフォルトの名無しさん
2025/04/29(火) 13:37:02.10ID:eO8jJ9R+ batがダメならpowershellやwshもダメなのか
フリーソフトは?
フリーソフトは?
704デフォルトの名無しさん
2025/04/29(火) 13:38:48.90ID:ED8v3/1I WSHで頑張れ
705デフォルトの名無しさん
2025/04/29(火) 13:44:20.04ID:eO8jJ9R+ フリーソフトがいけるならFlexible Renamerとか
706デフォルトの名無しさん
2025/04/29(火) 14:23:38.79ID:PdB4bn8v JavaScriptでもいいけど他のスクリプトが何か一つでも使えるなら
dir /b | clipでファイルリストをコピーして
ren foo.txt 00-foo.txt
ren bar.txt 01-bar.txt
...
みたいなコマンド群を生成してクリップボードにコピーして
コマンドプロンプトに右クリで張り付けて一括実行することはできる
それにしても日本のアイテー業界は絶望的に頭悪いな…
dir /b | clipでファイルリストをコピーして
ren foo.txt 00-foo.txt
ren bar.txt 01-bar.txt
...
みたいなコマンド群を生成してクリップボードにコピーして
コマンドプロンプトに右クリで張り付けて一括実行することはできる
それにしても日本のアイテー業界は絶望的に頭悪いな…
707デフォルトの名無しさん
2025/04/29(火) 14:43:58.50ID:6pTzs1wL >>699,705
「Flexible Renamer」https://www.vector.co.jp/soft/winnt/util/se131133.html を使って
「YYYYMMDD-(2桁連番)-元ファイル名.拡張子」(※拡張子は小文字のみ統一)へ一括改名するなら、
「高度なリネーム」チェックボックスをONにしてから
置換パターン文字列として「\Y\m\d-??-\1.\L\2\E」を指定すればいいと思う。
「Flexible Renamer」https://www.vector.co.jp/soft/winnt/util/se131133.html を使って
「YYYYMMDD-(2桁連番)-元ファイル名.拡張子」(※拡張子は小文字のみ統一)へ一括改名するなら、
「高度なリネーム」チェックボックスをONにしてから
置換パターン文字列として「\Y\m\d-??-\1.\L\2\E」を指定すればいいと思う。
708デフォルトの名無しさん
2025/05/14(水) 22:42:19.83ID:TaiA0yJC 退職日に“ファイル削除プログラム”起動──データを削除した退職者 vs. 半導体企業の裁判例 その行方は?
ttps://asahi.5ch.net/test/read.cgi/newsplus/1747188175/
すげーこんな事も出来るんだ(・∀・)
ttps://asahi.5ch.net/test/read.cgi/newsplus/1747188175/
すげーこんな事も出来るんだ(・∀・)
709>>652
2025/05/18(日) 11:16:50.22ID:tgr6qv73710デフォルトの名無しさん
2025/05/18(日) 22:43:16.16ID:r2764k2P bitcoin?
711デフォルトの名無しさん
2025/05/19(月) 09:59:39.06ID:WO8NIavg @rem 金が絡むなら自己責任でどうぞ
@echo off & setlocal enabledelayedexpansion & set "b=" & set "h="
set "a=123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
set /p "b=Base58=" & set "z=%a:~0,1%" & set /a "n=1,d=0,e=58"
set "c=!b!-" & set "b=%z%!b!" & set "f=0123456789abcdef"
:1
for /L %%i in (0,1,57) do if "!a:~%%i,1!"=="!b:~-1!" set /a e=%%i
if %e%==58 (exit /b) else set /a "g%n%=e" & set "b=!b:~0,-1!"
if defined b set /a "n+=1,e=58" & goto 1
:2
set /a "b=0,e=0" & for /L %%i in (%n%,-1,1) do (
set /a "g%%i+=b*58,b=g%%i%%16,e|=g%%i/=16")
set "h=!f:~%b%,1!%h%" & set /a "d=(d+1)%%2" & if %e% neq 0 goto 2
if "%h%"=="0" (set "h=") else if %d%==1 set "h=0%h%"
:3
if "%c:~0,1%"=="%z%" set "h=00%h%" & set "c=%c:~1%" & goto 3
if defined h echo Hex=%h% & pause
@echo off & setlocal enabledelayedexpansion & set "b=" & set "h="
set "a=123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
set /p "b=Base58=" & set "z=%a:~0,1%" & set /a "n=1,d=0,e=58"
set "c=!b!-" & set "b=%z%!b!" & set "f=0123456789abcdef"
:1
for /L %%i in (0,1,57) do if "!a:~%%i,1!"=="!b:~-1!" set /a e=%%i
if %e%==58 (exit /b) else set /a "g%n%=e" & set "b=!b:~0,-1!"
if defined b set /a "n+=1,e=58" & goto 1
:2
set /a "b=0,e=0" & for /L %%i in (%n%,-1,1) do (
set /a "g%%i+=b*58,b=g%%i%%16,e|=g%%i/=16")
set "h=!f:~%b%,1!%h%" & set /a "d=(d+1)%%2" & if %e% neq 0 goto 2
if "%h%"=="0" (set "h=") else if %d%==1 set "h=0%h%"
:3
if "%c:~0,1%"=="%z%" set "h=00%h%" & set "c=%c:~1%" & goto 3
if defined h echo Hex=%h% & pause
712デフォルトの名無しさん
2025/05/20(火) 08:07:11.86ID:U563OTYa >>709 ここはネット切断しても変換できるぞ
ttps://appdevtools.com/base58-encoder-decoder
ttps://appdevtools.com/base58-encoder-decoder
714デフォルトの名無しさん
2025/05/26(月) 00:46:53.22ID:sddMzjz1715デフォルトの名無しさん
2025/05/26(月) 08:47:40.30ID:iONSO6k9 >>714
それでもいいけど最近シンプルなのに書き換えたので参考にどうぞ
ドラッグアンドドロップ用バッチのサンプル
@echo off & set arg=& set a="%cmdcmdline:"=" "%"
set a=%a:""=%& call :x %%a:*%~x0" =%%
echo コマンド %arg%
pause & exit
:x
set a=%1& if not defined a exit /b
if "%a:~1,1%"==" " set a=%a: =" "%
set arg=%arg% %a:""=%& shift & goto x
それでもいいけど最近シンプルなのに書き換えたので参考にどうぞ
ドラッグアンドドロップ用バッチのサンプル
@echo off & set arg=& set a="%cmdcmdline:"=" "%"
set a=%a:""=%& call :x %%a:*%~x0" =%%
echo コマンド %arg%
pause & exit
:x
set a=%1& if not defined a exit /b
if "%a:~1,1%"==" " set a=%a: =" "%
set arg=%arg% %a:""=%& shift & goto x
716デフォルトの名無しさん
2025/05/26(月) 20:59:12.78ID:mOG76bz3 >>715
何かわからんけど横からありがとう(・∀・)
何かわからんけど横からありがとう(・∀・)
717デフォルトの名無しさん
2025/05/26(月) 23:38:19.16ID:sddMzjz1718714
2025/06/09(月) 23:42:00.02ID:XIEmLRR3 >>556,715
2つを参考にして作ってみました
ドラッグ アンド ドロップ用
@echo off & set a="%cmdcmdline:"=%"
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%"
call :x "%a%:%%b: %a%:=" "%a%:%%"
:x
echo コマンド %*
pause & exit
2つを参考にして作ってみました
ドラッグ アンド ドロップ用
@echo off & set a="%cmdcmdline:"=%"
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%"
call :x "%a%:%%b: %a%:=" "%a%:%%"
:x
echo コマンド %*
pause & exit
719デフォルトの名無しさん
2025/06/10(火) 16:46:13.85ID:HbVriPvf UNCパスに:は無い
おれの環境では試せないけど
どうなのかな
おれの環境では試せないけど
どうなのかな
720714
2025/06/11(水) 23:47:01.12ID:h2Pmz4k5 UNCパスというのはネットワーク上のパスということですか
詳しくないのでよくわからないですけど
それがこのバッチに関係があるのでしょうか
詳しくないのでよくわからないですけど
それがこのバッチに関係があるのでしょうか
721デフォルトの名無しさん
2025/06/12(木) 06:01:52.53ID:KDNtxLme722714
2025/06/12(木) 23:37:30.69ID:3VNaC5iR723デフォルトの名無しさん
2025/06/13(金) 01:33:18.10ID:QWIL1FR+ もう
@echo コマンド %1 %2 %3 %4 %5 %6 %7 %8 %9
@pause
で手を打とうよ。あとは運用。
@echo コマンド %1 %2 %3 %4 %5 %6 %7 %8 %9
@pause
で手を打とうよ。あとは運用。
724デフォルトの名無しさん
2025/06/13(金) 01:41:39.04ID:Vx46a8qY >>715 で問題無いようだが
725デフォルトの名無しさん
2025/06/13(金) 11:27:20.00ID:QWIL1FR+ 通りすがりで正直なにしてるのかわからんけど、もしかしてやりたいのはこゆこと?
@echo off
setlocal
set ARGS=
set ORIG_ARGS=%*
call :main %ORIG_ARGS: =[全角空白]%
goto :eof
:main
if x%1 == x goto :sort
set ARG=%1
set ARG=%ARG:[全角空白]= %
if not %ARG:~0,1%%ARG:~0,1% == "" set ARG="%ARG%"
set ARGS=%ARGS% %ARG%
shift
goto :main
:sort
for /F "delims=" %%F in ('dir /S/B/OD %ARGS%') do echo コマンド "%%F"
pause
@echo off
setlocal
set ARGS=
set ORIG_ARGS=%*
call :main %ORIG_ARGS: =[全角空白]%
goto :eof
:main
if x%1 == x goto :sort
set ARG=%1
set ARG=%ARG:[全角空白]= %
if not %ARG:~0,1%%ARG:~0,1% == "" set ARG="%ARG%"
set ARGS=%ARGS% %ARG%
shift
goto :main
:sort
for /F "delims=" %%F in ('dir /S/B/OD %ARGS%') do echo コマンド "%%F"
pause
726デフォルトの名無しさん
2025/06/13(金) 17:53:07.75ID:u+rmpblt もういいからそれ
レスを投稿する
ニュース
