拡張子が .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
147デフォルトの名無しさん
2023/01/23(月) 18:28:05.17ID:g43oPRJS148デフォルトの名無しさん
2023/01/23(月) 18:35:51.01ID:g43oPRJS ああ、書き方を教えて欲しいのか
reg add レジストリキー /v 値の名前 /t 値の型 /d 値 /f
詳細はreg add /?
reg add レジストリキー /v 値の名前 /t 値の型 /d 値 /f
詳細はreg add /?
149デフォルトの名無しさん
2023/01/23(月) 18:40:02.27ID:0BNLAxAb ありがとうございます。調べてみます!
150デフォルトの名無しさん
2023/01/23(月) 19:15:50.55ID:0BNLAxAb あともう少しな気がします。
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations" /v "trust Documents" /t REG_DWORD /d "%userprofile%\Documents\trustdoc" /f
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations" /v "trust Documents" /t REG_DWORD /d "%userprofile%\Documents\trustdoc" /f
151デフォルトの名無しさん
2023/01/23(月) 19:31:12.28ID:0BNLAxAb これ↓でコマンドが通りましたが、
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations" /v "trust Documents" /t REG_SZ /d "%userprofile%\Documents\trustdoc" /f
レジストリエディタみるとデータが追加されていなかったでした。
これ以上素人がレジストリをいじるのは危険かと思いましたので、GUIで説明するようにいたします。
お騒がせしてすいませんでした。
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations" /v "trust Documents" /t REG_SZ /d "%userprofile%\Documents\trustdoc" /f
レジストリエディタみるとデータが追加されていなかったでした。
これ以上素人がレジストリをいじるのは危険かと思いましたので、GUIで説明するようにいたします。
お騒がせしてすいませんでした。
152デフォルトの名無しさん
2023/01/23(月) 20:08:04.41ID:dfKZHUgs オフィス(Excelなど)起動したまま変更しようとしたとか?
153デフォルトの名無しさん
2023/01/23(月) 20:18:25.17ID:0BNLAxAb いえ。エクセルを閉じてもやっぱり該当のレジストリに設定が追加されていませんでした。
環境変数のパスが悪いのかとも思って実際のパスに変えても同じでした。
レジストリの変更は注意しないといけないと言われていますので、
鳴れていないコマンドやバッチで対応する方法はあきらめようかと思います。
お騒がせしてすいませんでした。
環境変数のパスが悪いのかとも思って実際のパスに変えても同じでした。
レジストリの変更は注意しないといけないと言われていますので、
鳴れていないコマンドやバッチで対応する方法はあきらめようかと思います。
お騒がせしてすいませんでした。
154デフォルトの名無しさん
2023/01/23(月) 20:22:32.26ID:dfKZHUgs そうでしたか
適当なことを言ってすみません
適当なことを言ってすみません
155デフォルトの名無しさん
2023/01/23(月) 20:26:53.26ID:0BNLAxAb いえ。アドバイスありがとうございました。
156デフォルトの名無しさん
2023/01/23(月) 20:29:44.46ID:NaDuOShR レジストリエディタでTrusted Locationsをエクスポートした.regファイルを
余計な行が含まれてないか確認の上配布でよくね?
余計な行が含まれてないか確認の上配布でよくね?
157デフォルトの名無しさん
2023/01/23(月) 20:35:10.99ID:0BNLAxAb .regファイル!!
ちょっと調べてみます。ありがとうございます。
ちょっと調べてみます。ありがとうございます。
158デフォルトの名無しさん
2023/01/23(月) 20:55:31.79ID:0BNLAxAb エクセルアプリからの設定によるレジストリ変更は成功しました。
.regファイルを開いてみました。
----
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations\Location6]
"Path"="C:\\%userprofile%\\Documents\\trustdocs\\"
"AllowSubfolders"=dword:00000001
"Description"="Excel emotet対応"
"Date"="01/23/2023 20:44"
----
このKeyにある「Location6」というのは、たぶんユーザーごとに違う値のような予感。
「Location1」からaddで追加されてきた名前かと思います。
折角のアドバイスですが難しい気がします。
.regファイルを開いてみました。
----
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations\Location6]
"Path"="C:\\%userprofile%\\Documents\\trustdocs\\"
"AllowSubfolders"=dword:00000001
"Description"="Excel emotet対応"
"Date"="01/23/2023 20:44"
----
このKeyにある「Location6」というのは、たぶんユーザーごとに違う値のような予感。
「Location1」からaddで追加されてきた名前かと思います。
折角のアドバイスですが難しい気がします。
159デフォルトの名無しさん
2023/01/23(月) 21:07:08.10ID:0BNLAxAb あ。これでレジストリの追記ができました。
keyに新しい文字列「test」を後ろに付け足しました。
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations\test" /v "trust Documents" /t REG_SZ /d "%userprofile%\Documents\trustdocs" /f
.regなるものをみてハッとしました。
皆さんアドバイスありがとうございました。
keyに新しい文字列「test」を後ろに付け足しました。
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations\test" /v "trust Documents" /t REG_SZ /d "%userprofile%\Documents\trustdocs" /f
.regなるものをみてハッとしました。
皆さんアドバイスありがとうございました。
160デフォルトの名無しさん
2023/01/24(火) 12:55:17.67ID:emIiCzRd testとか適当でも良いのか
勉強になったわ
勉強になったわ
161デフォルトの名無しさん
2023/01/24(火) 13:53:07.93ID:9U26EPIz 動いたのならいいけど、%userprofile%ってREG_EXPAND_SZではなくてREG_SZでも有効なんだっけ?
Excel側で環境変数を展開してるんだろうか
Excel側で環境変数を展開してるんだろうか
162デフォルトの名無しさん
2023/01/24(火) 13:58:27.44ID:r0FUzBRQ 大抵のソフトは環境変数を受け付けるだろ
俺も作るときは環境変数を受け付けるように作るよ
俺も作るときは環境変数を受け付けるように作るよ
163デフォルトの名無しさん
2023/01/24(火) 14:13:23.74ID:9q3wnipD %%userprofile%%じゃないからbatの時点で展開されてる件
164デフォルトの名無しさん
2023/02/15(水) 08:54:37.01ID:SA6Um8/R for %s in (c:\windows\system32\*.*) do @echo %random%
1つのコマンドを実行中、乱数を振り直してはくれないのね・・・
1つのコマンドを実行中、乱数を振り直してはくれないのね・・・
165デフォルトの名無しさん
2023/02/15(水) 09:43:24.57ID:TE3DoOlC 遅延環境変数でも駄目?
166デフォルトの名無しさん
2023/02/15(水) 09:50:13.69ID:SA6Um8/R あかんかった
167デフォルトの名無しさん
2023/02/15(水) 12:26:54.02ID:z8T+7ef0 そんなことないやろ
!random!でばらけるで
!random!でばらけるで
168デフォルトの名無しさん
2023/02/15(水) 13:04:59.88ID:SA6Um8/R おお、ほんとだ
for %%s in (*.*) do (
setlocal ENABLEDELAYEDEXPANSION
echo !random!
endlocal
)
しかし、これはダメ
setlocal ENABLEDELAYEDEXPANSION
for %s in (c:\windows\system32\*.*) do @echo !random!
endlocal
うーみゅ??
for %%s in (*.*) do (
setlocal ENABLEDELAYEDEXPANSION
echo !random!
endlocal
)
しかし、これはダメ
setlocal ENABLEDELAYEDEXPANSION
for %s in (c:\windows\system32\*.*) do @echo !random!
endlocal
うーみゅ??
169デフォルトの名無しさん
2023/02/15(水) 13:08:20.84ID:vbXbTgUC setlocal enabledelayedexpansion
for %%f in ( *.* ) do @echo !random!
ちゃんと毎回乱数になってるぞ??
for %%f in ( *.* ) do @echo !random!
ちゃんと毎回乱数になってるぞ??
170デフォルトの名無しさん
2023/02/15(水) 13:55:25.99ID:SA6Um8/R .batファイルの中でならOK
forコマンド直打ちはNG
なのね
forコマンド直打ちはNG
なのね
171デフォルトの名無しさん
2023/02/15(水) 21:53:53.82ID:2801FI6C dir あいう!えお.txt → 確認OK
for %%i in ( dir ”*.txt” ) do (
echo ”%%~nxi” →❶
dir ”%%~nxi” →➋
)
❶→あいうえお.txt
➋→ファイル無し
この問題(for文の内部で半角!文字が含まれたファイル名で、!が消えた名前に変わってしまう)の回避方法をご教示いただければ幸いです。
(「あいう!えお.txt」のファイル有りきで…)
for %%i in ( dir ”*.txt” ) do (
echo ”%%~nxi” →❶
dir ”%%~nxi” →➋
)
❶→あいうえお.txt
➋→ファイル無し
この問題(for文の内部で半角!文字が含まれたファイル名で、!が消えた名前に変わってしまう)の回避方法をご教示いただければ幸いです。
(「あいう!えお.txt」のファイル有りきで…)
172デフォルトの名無しさん
2023/02/16(木) 11:33:08.40ID:Pi7fCiR3 引用符が全角?
173デフォルトの名無しさん
2023/02/16(木) 12:30:36.05ID:Pi7fCiR3 SETLOCAL DISABLEDELAYEDEXPANSION
for %%i in (*.txt) do (
echo "%%~nxi"
)
for %%i in (*.txt) do (
echo "%%~nxi"
)
174デフォルトの名無しさん
2023/02/16(木) 13:25:19.43ID:tOoYyZel ! が消えるって自分も前に経験して困ったことあるけど今適当に試しても消えないな
どういう書き方したら消えるんだっけか
どういう書き方したら消えるんだっけか
175デフォルトの名無しさん
2023/02/16(木) 22:08:46.71ID:tOoYyZel setlocal enabledelayedexpansionを使うと駄目なんだっけか
173のレスをコピペして試してたから再現しなかった
回避方法はこの辺読めばいいんじゃないかな>>171
https://qiita.com/yz2cm/items/4983be006116c369d08b
173のレスをコピペして試してたから再現しなかった
回避方法はこの辺読めばいいんじゃないかな>>171
https://qiita.com/yz2cm/items/4983be006116c369d08b
176デフォルトの名無しさん
2023/02/18(土) 13:12:03.68ID:S+SrMYX3 >>171
doの中身をcall使ってサブルーチンにする
サブルーチンの先でDisableDelayedExpansionを行って
一時的に遅延環境変数展開をOFFにする
ちなみにdoの括弧の中でDisableDelayedExpansionしても意味はない
コマンドが実行されるときにどこまでが1行として処理されるかよく考えてみて
doの中身をcall使ってサブルーチンにする
サブルーチンの先でDisableDelayedExpansionを行って
一時的に遅延環境変数展開をOFFにする
ちなみにdoの括弧の中でDisableDelayedExpansionしても意味はない
コマンドが実行されるときにどこまでが1行として処理されるかよく考えてみて
177デフォルトの名無しさん
2023/02/18(土) 16:15:41.68ID:nz9Z1NDi 脳死だがバッチは基本使わない対処をした方が優れている
扱う出力内容で>>171みたいな一見不可解な事が起こり易い
メモ帳で書いてUTF8で保存したり全角文字を混ぜて実行するバカもいる
こんなバッチなんて書いていられるか俺は自分の言語に戻らせてもらう
扱う出力内容で>>171みたいな一見不可解な事が起こり易い
メモ帳で書いてUTF8で保存したり全角文字を混ぜて実行するバカもいる
こんなバッチなんて書いていられるか俺は自分の言語に戻らせてもらう
178デフォルトの名無しさん
2023/02/18(土) 20:08:07.43ID:S+SrMYX3 バッチファイルのスレで何言ってるんだこいつ
179デフォルトの名無しさん
2023/02/19(日) 06:53:20.13ID:B9Nm4zxk はい、バイバーイ ノシ
二度と戻ってこないでね
二度と戻ってこないでね
180デフォルトの名無しさん
2023/02/23(木) 22:02:16.64ID:KL0E1A05181デフォルトの名無しさん
2023/02/24(金) 06:16:27.49ID:umH2oUG6 176の方法で回避?
call しても ! 文字は消えるけど
どうやって値を渡したのか、ちゃんと報告しろ
call しても ! 文字は消えるけど
どうやって値を渡したのか、ちゃんと報告しろ
182デフォルトの名無しさん
2023/02/24(金) 06:21:19.29ID:jJ3mlMsu なぜそんな上からなのか
183デフォルトの名無しさん
2023/02/24(金) 06:50:27.38ID:umH2oUG6 そうか?
報告してください。お願いします。
報告してください。お願いします。
184デフォルトの名無しさん
2023/02/24(金) 13:07:53.45ID:xAv3d2xt よろしい
185デフォルトの名無しさん
2023/02/26(日) 02:12:26.08ID:6qO2uMR0 >>183
私も単にcallにしただけではiの文字が消えたままだったけど、
setlocalを全部外したらcallした先でi文字付きで認識できるようになった。
なんでそうなったかは正直確信が持てないが、気がついた変更はそれだった。
ハッキリ答えられずすみません…
私も単にcallにしただけではiの文字が消えたままだったけど、
setlocalを全部外したらcallした先でi文字付きで認識できるようになった。
なんでそうなったかは正直確信が持てないが、気がついた変更はそれだった。
ハッキリ答えられずすみません…
186デフォルトの名無しさん
2023/02/26(日) 07:59:37.30ID:ZRUXpLmJ >>185
報告ありがとう
遅延展開での for 文の変数値に ! や ^ があると値が変わる事がある
遅延無しなら値が変わらない
call にするかどうかは別の話
ヘルプをよく読んで下さい
setlocal /?
for /?
引用符は半角にして下さい
質問文のバッチはそれだけで他人が問題点を再現できるものにして下さい
報告ありがとう
遅延展開での for 文の変数値に ! や ^ があると値が変わる事がある
遅延無しなら値が変わらない
call にするかどうかは別の話
ヘルプをよく読んで下さい
setlocal /?
for /?
引用符は半角にして下さい
質問文のバッチはそれだけで他人が問題点を再現できるものにして下さい
187デフォルトの名無しさん
2023/02/26(日) 20:35:28.85ID:gahU4Yv8 なぜそんなギスギスなのか
仕事中に仕事以外の会話のできない方か
仕事中に仕事以外の会話のできない方か
188デフォルトの名無しさん
2023/02/26(日) 23:08:44.91ID:d/RsgC9o これAIの何とかってやつが書いた文章だろ?…っての、そこら中で見るなw
189デフォルトの名無しさん
2023/02/27(月) 11:42:47.10ID:JmzEtsrD まあ好かれる人間ではないよな
たまにいる、そういう奴
たまにいる、そういう奴
190デフォルトの名無しさん
2023/02/27(月) 11:47:26.81ID:MWG0Dnko まあ対面では絶対そんな言葉使いはしないよね
191デフォルトの名無しさん
2023/02/27(月) 14:46:21.47ID:+mdXvmJb 変数値が変わるわけないだろ
展開した値が元と違うだけ
展開した値が元と違うだけ
192デフォルトの名無しさん
2023/03/01(水) 12:26:47.31ID:fuKOGN7X すいません
超初心者的な質問なんですが、
バッチファイルって、サブルーチンを設定する時に、一度実行されてしまうんですよね?
超初心者的な質問なんですが、
バッチファイルって、サブルーチンを設定する時に、一度実行されてしまうんですよね?
193デフォルトの名無しさん
2023/03/01(水) 13:18:49.01ID:p0dowhw3 call先で一行ずつ実行するだけ
サブルーチンの設定て何だろ
サブルーチンの設定て何だろ
194デフォルトの名無しさん
2023/03/01(水) 13:49:19.87ID:Co0n2HTo 質問が不明瞭すぎる
195デフォルトの名無しさん
2023/03/01(水) 15:49:02.20ID:tZuIfIoC >>192
バッチファイルにサブルーチンなんて無い
サブルーチン的な事したければラベル書いてそこにジャンプする
当然ジャンプじゃなくて上から来た場合も普通に実行される
それが嫌ならラベルの直前に exit/b でも書いとけ
バッチファイルにサブルーチンなんて無い
サブルーチン的な事したければラベル書いてそこにジャンプする
当然ジャンプじゃなくて上から来た場合も普通に実行される
それが嫌ならラベルの直前に exit/b でも書いとけ
196デフォルトの名無しさん
2023/03/01(水) 17:52:18.10ID:fuKOGN7X すいません
具体的に書きます!!
@echo off
call :set_errorlevel
:set_errorlevel
echo aaaaa
exit /b
こういうのがあったとして
C:\Users\■■■>■:\1112.bat
aaaaa
aaaaa
↑なぜ二つ実行されるのか?って意味です。
具体的に書きます!!
@echo off
call :set_errorlevel
:set_errorlevel
echo aaaaa
exit /b
こういうのがあったとして
C:\Users\■■■>■:\1112.bat
aaaaa
aaaaa
↑なぜ二つ実行されるのか?って意味です。
197デフォルトの名無しさん
2023/03/01(水) 17:54:05.48ID:68s28u+f 1回目がcallで実行
2回目がそのままの流れで実行されてる
2回目がそのままの流れで実行されてる
198デフォルトの名無しさん
2023/03/01(水) 18:36:49.49ID:GaouMb9c 1行ずつ逐次実行していくから
call文でラベルに飛んで実行し戻って来る
ステップが次の行に移行してcall文の次の文を実行しようとする
そこにはラベル以下があったわけだ
call文から戻ってきた所で実行を止めたければ
goto :eof
をcall文の次に書いておくといい
call文でラベルに飛んで実行し戻って来る
ステップが次の行に移行してcall文の次の文を実行しようとする
そこにはラベル以下があったわけだ
call文から戻ってきた所で実行を止めたければ
goto :eof
をcall文の次に書いておくといい
199デフォルトの名無しさん
2023/03/01(水) 18:59:16.83ID:fuKOGN7X201デフォルトの名無しさん
2023/03/01(水) 19:04:20.16ID:fuKOGN7X なるほど
ただラベルをつけてよびだしているだけなんですね
バッチにmethodやサブルーチンって概念はないんですね!
勉強になりました1
ただラベルをつけてよびだしているだけなんですね
バッチにmethodやサブルーチンって概念はないんですね!
勉強になりました1
202デフォルトの名無しさん
2023/03/01(水) 19:05:12.08ID:fuKOGN7X ていうことは、うまく調整しないと、2回同じ実行することになりますね!
早めに気が付いてよかったです!
早めに気が付いてよかったです!
203デフォルトの名無しさん
2023/03/01(水) 22:53:45.68ID:6i7MYFqO コマンドプロンプトから
start chrome "D:/test.html?a=001"
としたのですが
D:/test.html
が開かれました。
ローカルのhtmlにクエリを付けて開く方法があればご教示頂きたいです。
start chrome "D:/test.html?a=001"
としたのですが
D:/test.html
が開かれました。
ローカルのhtmlにクエリを付けて開く方法があればご教示頂きたいです。
204デフォルトの名無しさん
2023/03/01(水) 23:15:54.48ID:8kmkGnGP それはchromeのお話ですねえ
開発元のgoogleに聞くのが早いのでは
開発元のgoogleに聞くのが早いのでは
205デフォルトの名無しさん
2023/03/02(木) 07:45:52.86ID:X0Akc+Oj 起動するとネットワークプリンタでファイルを出力できるバッチファイルて作れますか?
206デフォルトの名無しさん
2023/03/02(木) 10:15:53.52ID:rYHGX+R7 ネットワークプリンタで出力されるものは印刷物です
ファイルではありません
ファイルではありません
207デフォルトの名無しさん
2023/03/02(木) 10:50:24.75ID:h3FhlPC5208デフォルトの名無しさん
2023/03/02(木) 11:39:56.39ID:5LS4jA2t >>203
"file:///D:/test.html?a=001"は?
"D:/test.html?a=001"だとD:/test.html%3Fa=001を開こうとしてERR_FILE_NOT_FOUNDになるなぁ
"file:///D:/test.html?a=001"は?
"D:/test.html?a=001"だとD:/test.html%3Fa=001を開こうとしてERR_FILE_NOT_FOUNDになるなぁ
209デフォルトの名無しさん
2023/03/02(木) 12:44:28.71ID:RvyObGoZ210デフォルトの名無しさん
2023/03/02(木) 14:02:39.40ID:RvyObGoZ211デフォルトの名無しさん
2023/03/03(金) 14:20:26.65ID:cfdc5Bpc あぐえ
212デフォルトの名無しさん
2023/03/03(金) 14:22:08.63ID:cfdc5Bpc ぼうけ
213デフォルトの名無しさん
2023/03/07(火) 15:36:52.13ID:aaO7s6EJ 「作成日時が30日以上前」を条件としてフォルダ内のファイルを削除したいのですが、方法はありますか?
forfiles だと更新日時が条件となってしまいます、、、
forfiles だと更新日時が条件となってしまいます、、、
214デフォルトの名無しさん
2023/03/07(火) 16:49:23.24ID:/8dYORgk 作成日時は頑張れば取得できるけどコマンドプロンプトでは時間計算ができないから
PowerShellのスクリプトを書いたほうがいいと思う
PowerShellのスクリプトを書いたほうがいいと思う
215デフォルトの名無しさん
2023/03/07(火) 17:27:20.76ID:GAVJiBto @echo off
for /f "usebackq" %%i in (`powershell -c "([datetime](get-date)).AddDays(-30).tostring('yyyyMMdd')"`) do set now=%%i
for /f "tokens=1-5* skip=4 delims=/ " %%i in ('dir /tc /od /a-d') do (
if %%i%%j%%k gtr %now% goto:eof
if "%%n" neq "" echo delete --- %%n
)
for /f "usebackq" %%i in (`powershell -c "([datetime](get-date)).AddDays(-30).tostring('yyyyMMdd')"`) do set now=%%i
for /f "tokens=1-5* skip=4 delims=/ " %%i in ('dir /tc /od /a-d') do (
if %%i%%j%%k gtr %now% goto:eof
if "%%n" neq "" echo delete --- %%n
)
216デフォルトの名無しさん
2023/03/07(火) 18:08:36.87ID:aaO7s6EJ217デフォルトの名無しさん
2023/03/07(火) 19:20:35.55ID:UPk4pcGD 自分でexe作るよろし
218デフォルトの名無しさん
2023/03/07(火) 19:39:11.17ID:trxvq/2q 前月の同日以前にしたら
219デフォルトの名無しさん
2023/03/08(水) 05:54:33.72ID:AsCwI7z1 Ruby なら、glob, birthtime を使う。
ただし、DryRun なので実際には削除されません
require 'fileutils'
require 'date'
Prev_day_30 = Date.today - 30 # 今日の30日前
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/test/*"
Dir.glob( glob_pattern ).select do |full_path|
stat = File.stat full_path
date = stat.birthtime.to_date # 作成日付
# ファイルで、作成日付が今日の30日前以前のものだけ。30日前も含む
stat.file? && date <= Prev_day_30
end
.each { |full_path| FileUtils::DryRun.rm( full_path ) } # ファイルを削除
ただし、DryRun なので実際には削除されません
require 'fileutils'
require 'date'
Prev_day_30 = Date.today - 30 # 今日の30日前
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/test/*"
Dir.glob( glob_pattern ).select do |full_path|
stat = File.stat full_path
date = stat.birthtime.to_date # 作成日付
# ファイルで、作成日付が今日の30日前以前のものだけ。30日前も含む
stat.file? && date <= Prev_day_30
end
.each { |full_path| FileUtils::DryRun.rm( full_path ) } # ファイルを削除
220デフォルトの名無しさん
2023/03/09(木) 08:57:37.30ID:12Ly5Xlm コマンドラインで置換するスクリプトを拾って改造したけど半角スペースや!が混ざるとうまくいかない
chcp 65001
@echo off
echo "第1引数はパス「%1」です。"
echo "第2引数は置換前「%2」です。"
echo "第3引数は置換後「%3」です。"
echo "第4引数はファイル名「%4」です。"
cd /D %1
rem "もし「file_replaced.txt」ファイルが既に存在している場合、削除しておく"
if exist backup_%4 del backup_%4
rem "元ファイルをリネームする"
rename %4 backup_%4
rem "以下の「for」ループ内で変数を変化させるための宣言"
setlocal ENABLEDELAYEDEXPANSION
rem "「for」ループで「file.txt」ファイルの内容を1行ずつ取得し、"
rem "「woman」を「girl」に置換する"
for /f "delims=" %%a in (backup_%4) do (
rem "変数「line」にファイル内容を一行ずつ代入する"
set line=%%a
rem "変数「line」内の「woman」を「girl」に置換し、"
rem "「file_replaced.txt」ファイルに書き込む"
echo !line:%2=%3!>>%4
)
endlocal
chcp 65001
@echo off
echo "第1引数はパス「%1」です。"
echo "第2引数は置換前「%2」です。"
echo "第3引数は置換後「%3」です。"
echo "第4引数はファイル名「%4」です。"
cd /D %1
rem "もし「file_replaced.txt」ファイルが既に存在している場合、削除しておく"
if exist backup_%4 del backup_%4
rem "元ファイルをリネームする"
rename %4 backup_%4
rem "以下の「for」ループ内で変数を変化させるための宣言"
setlocal ENABLEDELAYEDEXPANSION
rem "「for」ループで「file.txt」ファイルの内容を1行ずつ取得し、"
rem "「woman」を「girl」に置換する"
for /f "delims=" %%a in (backup_%4) do (
rem "変数「line」にファイル内容を一行ずつ代入する"
set line=%%a
rem "変数「line」内の「woman」を「girl」に置換し、"
rem "「file_replaced.txt」ファイルに書き込む"
echo !line:%2=%3!>>%4
)
endlocal
221デフォルトの名無しさん
2023/03/09(木) 09:46:40.82ID:H0Wzj8XM 強いて言うなら、変数は ”” でくくる、”%%~a”、”%~1” みたいに
使うほうがトラブルが少ない、
! だけじゃなくて ^ や % などもケアする必要があるので面倒くさい、
になってくる
なので、バッチファイルでやる縛りがあるなら仕方ないかもだけど、
さすがに置換のできる何かを、使うor使えるようにした方が良くない?
今どきの PC なら PowerShell 使えるだろうからせめてそっちにするとか
使うほうがトラブルが少ない、
! だけじゃなくて ^ や % などもケアする必要があるので面倒くさい、
になってくる
なので、バッチファイルでやる縛りがあるなら仕方ないかもだけど、
さすがに置換のできる何かを、使うor使えるようにした方が良くない?
今どきの PC なら PowerShell 使えるだろうからせめてそっちにするとか
222デフォルトの名無しさん
2023/03/09(木) 19:15:35.15ID:eHaHoipW 外部コマンドで置換できるツールがフォーカスを奪う仕様で操作できなくなるから
VMで実行したら数時間たっても終わらなくて
別の方法を探したらこれに至った
専用ソフトが見つかり無事終わった
VMで実行したら数時間たっても終わらなくて
別の方法を探したらこれに至った
専用ソフトが見つかり無事終わった
223デフォルトの名無しさん
2023/03/10(金) 02:47:18.98ID:5g8/KHh8 Ruby なら、
re = /あい/
text = <<'EOT'
xあいxあい
yあ
いy
あい
EOT
puts dest = text.gsub( re, 'そら' )
出力
xそらxそら
yあ
いy
そら
re = /あい/
text = <<'EOT'
xあいxあい
yあ
いy
あい
EOT
puts dest = text.gsub( re, 'そら' )
出力
xそらxそら
yあ
いy
そら
224デフォルトの名無しさん
2023/03/10(金) 03:09:52.26ID:dbCMTPvQ チラシの裏で
225デフォルトの名無しさん
2023/03/10(金) 17:32:01.38ID:eGLVllnw 散々コマンドリファレンスを読んだりググったけど分からないことを教えてください。
type data.txt | hoge.bat
みたいな事がしたいのですが、バッチスクリプトで、
・bash での read line
・VBScript での WScript.StdIn.ReadLine
のように、1行ずつ標準入力を読むことは可能でしょうか?やっぱり駄目でしょうか?
type data.txt | hoge.bat
みたいな事がしたいのですが、バッチスクリプトで、
・bash での read line
・VBScript での WScript.StdIn.ReadLine
のように、1行ずつ標準入力を読むことは可能でしょうか?やっぱり駄目でしょうか?
226デフォルトの名無しさん
2023/03/10(金) 18:36:07.72ID:3mB0yP28 for /F
227デフォルトの名無しさん
2023/03/10(金) 18:44:37.57ID:KiwyNmEo 何がやっぱりなのかわからん
もっとちゃんとググれ
もっとちゃんとググれ
228デフォルトの名無しさん
2023/03/10(金) 19:12:34.24ID:eGLVllnw229デフォルトの名無しさん
2023/03/10(金) 19:31:43.62ID:hNo+M64i 要するに見ての通り他のコマンドからパイプで渡された標準入力をバッチファイルで受け取りたいと言う事でしょ
無理なんじゃね
無理なんじゃね
230デフォルトの名無しさん
2023/03/10(金) 19:46:29.11ID:vz26ACYY やっぱり(予想通り・諦め・失望)
231デフォルトの名無しさん
2023/03/10(金) 20:58:45.48ID:c3BQ1P8m こんなのでもいいかな?
@echo off
set lines=0
for /f "tokens=*" %%i in ('more') do (
set data=%%i
call :sub
)
goto :eof
:sub
set /a lines+=1
echo %lines% - %data%
@echo off
set lines=0
for /f "tokens=*" %%i in ('more') do (
set data=%%i
call :sub
)
goto :eof
:sub
set /a lines+=1
echo %lines% - %data%
232デフォルトの名無しさん
2023/03/10(金) 21:03:30.78ID:c3BQ1P8m もちろん
forループの特性上、空白行はスキップされたりいろいろするので
finsdtrと組み合わせたり色々しないといけないけど
過去ログにその話はあったかと
forループの特性上、空白行はスキップされたりいろいろするので
finsdtrと組み合わせたり色々しないといけないけど
過去ログにその話はあったかと
233デフォルトの名無しさん
2023/03/10(金) 21:21:55.47ID:c3BQ1P8m 一応表示は""で括ったほうがいいかな
データ内容次第ではエラーとか色々起きるんで
データ内容次第ではエラーとか色々起きるんで
234デフォルトの名無しさん
2023/03/10(金) 21:27:21.03ID:c3BQ1P8m バッチの入力データ次第という奴はどうしようもないことは以前から何度もレスされてる
""で括ってもダメで遅延環境変数で出力するのが一番まともかも
完全ではないだろうけど
""で括ってもダメで遅延環境変数で出力するのが一番まともかも
完全ではないだろうけど
235デフォルトの名無しさん
2023/03/18(土) 01:36:02.39ID:iEi+ABmN フォーいーちないのか?
236デフォルトの名無しさん
2023/04/13(木) 18:51:07.20ID:dCQIGdp/ >>225を
bing のチャットAIに丸投げしてみた
バッチスクリプトで標準入力を1行ずつ読む方法については、以下のような方法があります¹⁴。
- `for /f %%[アルファベット1文字] in ([ファイル名]) do ([処理])` を使う方法
- `set /p 変数名=` を使う方法
例えば、以下のようなバッチスクリプトで、data.txt の内容を hoge.bat に渡すことができます。
```
@echo off
for /f %%a in (data.txt) do (
echo %%a | hoge.bat
)
```
上記の例では、data.txt の内容を1行ずつ読み込み、hoge.bat に渡しています。¹
bing のチャットAIに丸投げしてみた
バッチスクリプトで標準入力を1行ずつ読む方法については、以下のような方法があります¹⁴。
- `for /f %%[アルファベット1文字] in ([ファイル名]) do ([処理])` を使う方法
- `set /p 変数名=` を使う方法
例えば、以下のようなバッチスクリプトで、data.txt の内容を hoge.bat に渡すことができます。
```
@echo off
for /f %%a in (data.txt) do (
echo %%a | hoge.bat
)
```
上記の例では、data.txt の内容を1行ずつ読み込み、hoge.bat に渡しています。¹
237デフォルトの名無しさん
2023/04/14(金) 12:47:02.76ID:ITYRpePX 質問は受け側のバッチの内容だろ
送り側でfor文にする意味不明
送り側でfor文にする意味不明
238デフォルトの名無しさん
2023/04/14(金) 13:02:44.39ID:twidN+O+ 処理対象がconioだった名残がたまたま残ってただけで
バッチ自体に標準入力という概念は無さそう
バッチ自体に標準入力という概念は無さそう
239デフォルトの名無しさん
2023/04/16(日) 15:03:53.79ID:OSGOKcik ループ処理やif分でもカッコ内の変数スコープがおかしくなるのはどういう原理なんです?
240デフォルトの名無しさん
2023/04/16(日) 15:21:04.10ID:j/ssGNNl 実行する行の解釈の後に実行されるから
この行の解釈は(から)までは1行として一気に解釈される
つまり括弧の中の代入文があったとしても実行前の解釈の時点で(その時点の値で)展開されてしまう
この行の解釈は(から)までは1行として一気に解釈される
つまり括弧の中の代入文があったとしても実行前の解釈の時点で(その時点の値で)展開されてしまう
241デフォルトの名無しさん
2023/04/16(日) 15:36:27.49ID:j/ssGNNl242デフォルトの名無しさん
2023/04/16(日) 16:30:15.10ID:zYIf7I3E なにをやってスコープがおかしくなったのか具体例を上げてくれないとなんとも言えないな
243デフォルトの名無しさん
2023/04/16(日) 16:43:43.01ID:j/ssGNNl いやだからスコープなんて高級な概念は存在しないんだけど
244デフォルトの名無しさん
2023/04/16(日) 16:45:17.05ID:Dywad+WI バッチファイルの言語仕様はウンコすぎるから
if ... call :foo "%~1"
for ... call :foo "%%~i"
とかやっといた方がミスが少ない
if ... call :foo "%~1"
for ... call :foo "%%~i"
とかやっといた方がミスが少ない
245デフォルトの名無しさん
2023/04/16(日) 16:45:38.04ID:j/ssGNNl いやsetlocalがあったか
でもそれを使ってるんならまず自分のやってることは認識してるはずなんだが
でもそれを使ってるんならまず自分のやってることは認識してるはずなんだが
246デフォルトの名無しさん
2023/04/18(火) 09:44:21.06ID:N1MfEhNS ファイルディスクリプタの1(標準出力)と3を同時にリダイレクトすると
以降プロンプトや標準出力が表示されなくなるのはなぜでしょう?
ハング等ではなく表示されないだけで、cmdとの対話モードは続いているようです。
C:\> dir >nul 3>nul
dir ←表示されない
dir >&2 ←表示される
winver ←起動する
以降プロンプトや標準出力が表示されなくなるのはなぜでしょう?
ハング等ではなく表示されないだけで、cmdとの対話モードは続いているようです。
C:\> dir >nul 3>nul
dir ←表示されない
dir >&2 ←表示される
winver ←起動する
レスを投稿する
