拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1424858999/
【.cmd】 バッチファイルスクリプト %12 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1489207631/
それ以前の過去スレ
%10 http://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 http://pc12.2ch.net/test/read.cgi/tech/1197881068/
%1 http://pc11.2ch.net/test/read.cgi/tech/1178281991/
探検
【.cmd】 バッチファイルスクリプト %13 【.bat】
■ このスレッドは過去ログ倉庫に格納されています
2018/11/21(水) 14:52:07.84ID:v84I4o+L
142デフォルトの名無しさん
2019/03/12(火) 20:57:10.17ID:kFHhQjU8 んでもそんな高度な事がしたいならVCあたりで作っちゃいかんの?
143デフォルトの名無しさん
2019/03/14(木) 00:11:57.06ID:MfJOghkN -- A.bat --
:loop
if "%~1" == "" goto end
call B.bat "%~1"
shift
goto loop
:end
-- B.bat --
--
if exist "%~dpn1_hoge.txt" (
set XXX=--option "%~dpn1_hoge.txt"
)
--
A.batに複数ファイルをD&DしたときにB.batのif existで指定したファイルがA.batに入力したファイルに1つでも存在すれば他の入力ファイルにも同じ処理が実行されてしまいます
これを回避するにはどうすればいいでしょうか?
:loop
if "%~1" == "" goto end
call B.bat "%~1"
shift
goto loop
:end
-- B.bat --
--
if exist "%~dpn1_hoge.txt" (
set XXX=--option "%~dpn1_hoge.txt"
)
--
A.batに複数ファイルをD&DしたときにB.batのif existで指定したファイルがA.batに入力したファイルに1つでも存在すれば他の入力ファイルにも同じ処理が実行されてしまいます
これを回避するにはどうすればいいでしょうか?
144デフォルトの名無しさん
2019/03/14(木) 00:20:05.87ID:Gms0hgp4 毎回リセットしとけば?
b.batの先頭でset xxx=を書くとかb.batをsetlocal〜endlocalするとか
b.batの先頭でset xxx=を書くとかb.batをsetlocal〜endlocalするとか
145デフォルトの名無しさん
2019/03/14(木) 00:26:03.45ID:Gms0hgp4 すまん良く読んでなかった
ファイルね
b.batで生成するのかな?
削除しちゃっても問題ないのならa.batの先頭でdelしちゃえば?
ファイルね
b.batで生成するのかな?
削除しちゃっても問題ないのならa.batの先頭でdelしちゃえば?
146デフォルトの名無しさん
2019/03/14(木) 00:37:26.49ID:MfJOghkN B.batは動画のエンコードに使っているバッチファイルの中身の一部で %~dpn1_hoge.txt があった場合はツールに追加のオプションを指定するようにしている感じです
147デフォルトの名無しさん
2019/03/19(火) 11:54:10.54ID:hD2ftWP/ set day=3/19(火)
if 1==1 (
echo %day%
)
すみませんどなたか教えてください。
曜日の半角括弧のせいでif文が閉じられてしまうんだけど
どうやってエスケープすればいいんでしょうか?
if 1==1 (
echo %day%
)
すみませんどなたか教えてください。
曜日の半角括弧のせいでif文が閉じられてしまうんだけど
どうやってエスケープすればいいんでしょうか?
148デフォルトの名無しさん
2019/03/19(火) 12:02:29.16ID:9bBZVsPM ^)
バッチ エスケープで検索すりゃすぐわかるだろ
バッチ エスケープで検索すりゃすぐわかるだろ
149デフォルトの名無しさん
2019/03/19(火) 12:50:21.44ID:Juttg7oZ 括弧はpsのワンライナーでも嵌まる箇所
150デフォルトの名無しさん
2019/03/19(火) 12:57:54.34ID:dDtGuicR >>147
こういう方法もある
変数dayの中に、二重引用符がなければ
set day=3/19(火)
if 1==1 (
for /f delims^=^ eol^= %%i in ("%day%") do echo %%i
)
これだとdayに & | > < ^ ( ) 等やばそうな文字が入っても大丈夫
こういう方法もある
変数dayの中に、二重引用符がなければ
set day=3/19(火)
if 1==1 (
for /f delims^=^ eol^= %%i in ("%day%") do echo %%i
)
これだとdayに & | > < ^ ( ) 等やばそうな文字が入っても大丈夫
151デフォルトの名無しさん
2019/03/19(火) 13:01:36.48ID:dDtGuicR echo.%%i
にしたらもっといいかも
にしたらもっといいかも
152147
2019/03/19(火) 13:11:02.99ID:hD2ftWP/153デフォルトの名無しさん
2019/03/19(火) 13:19:49.65ID:dDtGuicR 最後の % は要らんぞ
154デフォルトの名無しさん
2019/03/19(火) 20:28:12.65ID:xvBmkr0d >>147
echo出力だけなら環境変数を ""でくくった上で遅延展開する方法もある。
これだとほとんどすべての記号がそのまま出力される。例外として「!」は「^!」で、「%」は「%%」で、「^」「^^」などは要エスケープ。
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set "day=3/19(火)"
if 1==1 (
echo !day!
)
echo出力だけなら環境変数を ""でくくった上で遅延展開する方法もある。
これだとほとんどすべての記号がそのまま出力される。例外として「!」は「^!」で、「%」は「%%」で、「^」「^^」などは要エスケープ。
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set "day=3/19(火)"
if 1==1 (
echo !day!
)
155デフォルトの名無しさん
2019/03/19(火) 22:00:01.63ID:dDtGuicR ! とか ^ があると
setlocalの前に変数代入した方が楽だな
setlocalの前に変数代入した方が楽だな
156デフォルトの名無しさん
2019/03/20(水) 22:34:42.36ID:/eguYGP5 一番厄介なのって [ ] だっけ?
157デフォルトの名無しさん
2019/03/21(木) 01:32:50.66ID:3Vd/nBOR 個人的には全角スペースと()
158デフォルトの名無しさん
2019/03/21(木) 21:56:31.90ID:HPyHK69o day=off だと echo されない
159デフォルトの名無しさん
2019/03/21(木) 23:03:18.28ID:HPyHK69o 遅延モードでのエスケープの動作が面白い
setlocal enabledelayedexpansion
set "a=^x ^^ ^!"
set "b=^x ^^ ^y"
set "c=^x ^^ ^y" !
echo a=!a!
echo b=!b!
echo c=!c!
a=x ^ !
b=^x ^^ ^y
c=x ^ y
setlocal enabledelayedexpansion
set "a=^x ^^ ^!"
set "b=^x ^^ ^y"
set "c=^x ^^ ^y" !
echo a=!a!
echo b=!b!
echo c=!c!
a=x ^ !
b=^x ^^ ^y
c=x ^ y
160デフォルトの名無しさん
2019/04/10(水) 22:17:03.83ID:dRPi9Fbo コマンドプロンプトで以下のpowershellコマンドを実行すると曜日が英語で表示されるのですが、
ここで表示された"Wednesday"を呼び出し元であるコマンドプロンプト側の変数に取得するのは難しいでしょうか?
曜日の判定に使いたいのです。
C:\>powershell "(get-date).DayOfWeek"
Wednesday
ここで表示された"Wednesday"を呼び出し元であるコマンドプロンプト側の変数に取得するのは難しいでしょうか?
曜日の判定に使いたいのです。
C:\>powershell "(get-date).DayOfWeek"
Wednesday
161デフォルトの名無しさん
2019/04/10(水) 22:22:48.75ID:kh6Z72O0 >>160
for /f "delims=" %%i in ('powershell "(get-date).DayOfWeek"') do set "hoge=%%i"
for /f "delims=" %%i in ('powershell "(get-date).DayOfWeek"') do set "hoge=%%i"
162デフォルトの名無しさん
2019/04/10(水) 23:46:13.28ID:dRPi9Fbo163デフォルトの名無しさん
2019/04/17(水) 14:41:43.82ID:SVkPhkuc 読み取り専用属性付加と解除についてお願いします
ATTRIB +R hoge.txt
この場合hoge.txtをバッチファイルにドロップしたときhoge.txtの属性が読み取り専用になりますが
ATTRIB +R *.txt
とすると一つのファイルをドロップしただけでディレクトリ内の全てのテキストファイルの属性が変わってしまいます
バッチファイルへドロップしたファイルのみ属性を変えたいのですがこういうことは可能でしょうか?
ATTRIB +R hoge.txt
この場合hoge.txtをバッチファイルにドロップしたときhoge.txtの属性が読み取り専用になりますが
ATTRIB +R *.txt
とすると一つのファイルをドロップしただけでディレクトリ内の全てのテキストファイルの属性が変わってしまいます
バッチファイルへドロップしたファイルのみ属性を変えたいのですがこういうことは可能でしょうか?
164デフォルトの名無しさん
2019/04/17(水) 15:11:44.94ID:SVkPhkuc165デフォルトの名無しさん
2019/04/17(水) 15:30:16.10ID:Tk94P2Iw >>163
"*.txt "が邪魔
"*.txt "が邪魔
166デフォルトの名無しさん
2019/04/17(水) 15:59:23.64ID:SVkPhkuc167デフォルトの名無しさん
2019/04/17(水) 16:34:46.90ID:HAjihGMm168デフォルトの名無しさん
2019/04/17(水) 17:06:43.84ID:SVkPhkuc169デフォルトの名無しさん
2019/04/17(水) 17:54:55.66ID:DeBFB2/b ATTRIB +R %*
とすると複数ファイル可
とすると複数ファイル可
170デフォルトの名無しさん
2019/04/17(水) 18:03:53.01ID:mAjziF7r バッチファイルの図形プログラミング作ったら広告収入入ると思いますか?
171デフォルトの名無しさん
2019/04/17(水) 18:18:21.55ID:QABBLuNd172デフォルトの名無しさん
2019/04/17(水) 19:24:10.99ID:SVkPhkuc173デフォルトの名無しさん
2019/04/17(水) 21:07:05.52ID:3cAVwUGz 複数ファイルドロップするなら shift でループが簡単だと思うけど何か落とし穴ある?
174デフォルトの名無しさん
2019/04/18(木) 19:59:48.99ID:pUSpmyse ファイルドロップで落とし穴があるとしたら >>45 みたいな引数の時
>>48 を参考にすると
@echo off
set "a=%cmdcmdline:"=*%"
set "a=%a:~0,-1%" & set "e="
set "c=" & for /f "tokens=2* delims=*" %%i in ("%a%") do set "c=%%j"
:x
set "a=" & for /f "tokens=*" %%i in ("%c%") do set "a=%%i"
if "%a:~0,1%"=="*" (set "d=*") else set "d= "
set "b=" & set "c="
for /f "tokens=1* delims=%d%" %%i in ("%a%") do set "b=%%i" & set "c=%%j"
if defined b set e=%e% "%b%" & goto x
for %%i in (%e%) do attrib +r %%i
でもこれファイルドロップでしか使えない
>>48 を参考にすると
@echo off
set "a=%cmdcmdline:"=*%"
set "a=%a:~0,-1%" & set "e="
set "c=" & for /f "tokens=2* delims=*" %%i in ("%a%") do set "c=%%j"
:x
set "a=" & for /f "tokens=*" %%i in ("%c%") do set "a=%%i"
if "%a:~0,1%"=="*" (set "d=*") else set "d= "
set "b=" & set "c="
for /f "tokens=1* delims=%d%" %%i in ("%a%") do set "b=%%i" & set "c=%%j"
if defined b set e=%e% "%b%" & goto x
for %%i in (%e%) do attrib +r %%i
でもこれファイルドロップでしか使えない
175デフォルトの名無しさん
2019/04/19(金) 16:41:41.89ID:nzBF9sby batのコマンドのタイトルバーに
「管理者: 」
の表示を消すこと出来ないのでしょうか?
「管理者: 」
の表示を消すこと出来ないのでしょうか?
176デフォルトの名無しさん
2019/04/19(金) 17:41:11.03ID:HG96JCXu muiファイルいじるしかなかったような
177デフォルトの名無しさん
2019/04/19(金) 18:58:50.77ID:FmrBk+Vp スレチと怒られそうだが
--- change_wnd_title.uws ------
DEF_DLL SetWindowTextA(HWND, STRING):BOOL:user32.DLL
DIM old_title = PARAM_STR[0]
DIM new_title = PARAM_STR[1]
DIM idwnd = GETID(old_title)
IFB -1<idwnd THEN
SetWindowTextA(IDTOHND(idwnd), new_title)
ENDIF
---------
C:\UWSC\UWSC.exe C:\TEST\change_wnd_title.uws "管理者: test" "ABC"
を管理者権限で実行
「管理者:」 と「test」 の間にスペースが2つある点に注意
べつにWin32apiが使えればほかのスクリプトでもいいが
すでに配布が終了している(?)UWSCをすすめるのは
とてもにコンパクトで気軽に試しやすいため
以下のレスにあるDL先は公式リンク
使うのはFree版でよい
http://egg.2ch.net/test/read.cgi/software/1533818531/3
--- change_wnd_title.uws ------
DEF_DLL SetWindowTextA(HWND, STRING):BOOL:user32.DLL
DIM old_title = PARAM_STR[0]
DIM new_title = PARAM_STR[1]
DIM idwnd = GETID(old_title)
IFB -1<idwnd THEN
SetWindowTextA(IDTOHND(idwnd), new_title)
ENDIF
---------
C:\UWSC\UWSC.exe C:\TEST\change_wnd_title.uws "管理者: test" "ABC"
を管理者権限で実行
「管理者:」 と「test」 の間にスペースが2つある点に注意
べつにWin32apiが使えればほかのスクリプトでもいいが
すでに配布が終了している(?)UWSCをすすめるのは
とてもにコンパクトで気軽に試しやすいため
以下のレスにあるDL先は公式リンク
使うのはFree版でよい
http://egg.2ch.net/test/read.cgi/software/1533818531/3
178デフォルトの名無しさん
2019/04/19(金) 21:14:57.50ID:5yrPogsy >>175
例えば d:\hoge\a.bat を実行するなら
ショートカットの新規作成でコマンドは
cmd /c start "ABC" /d "d:\hoge" a.bat
ショートカットのプロパティで
実行時の大きさは「最小化」
詳細設定で「管理者として実行」
このショートカットを実行すると
a.bat が管理者として実行されて
タイトルは ABC のみになる
例えば d:\hoge\a.bat を実行するなら
ショートカットの新規作成でコマンドは
cmd /c start "ABC" /d "d:\hoge" a.bat
ショートカットのプロパティで
実行時の大きさは「最小化」
詳細設定で「管理者として実行」
このショートカットを実行すると
a.bat が管理者として実行されて
タイトルは ABC のみになる
179デフォルトの名無しさん
2019/04/19(金) 21:49:09.78ID:5yrPogsy180デフォルトの名無しさん
2019/04/19(金) 23:47:56.76ID:UTkV4PFm あのさ
もう設計書はあるからバッチ作ってって言われて設計書見たんだが
「%0\..\xxx\yyy.batをコールする」とか書かれてて腰折れそうなんだけど…
もう設計書はあるからバッチ作ってって言われて設計書見たんだが
「%0\..\xxx\yyy.batをコールする」とか書かれてて腰折れそうなんだけど…
181デフォルトの名無しさん
2019/04/20(土) 00:03:36.64ID:oEi+Bse9 やりたい事が書いてあるかどうかだな
設計書作る手間で自分でかけとも思うけど
外注なら設計書から作りましょうねと諭して工数確保だな
設計書作る手間で自分でかけとも思うけど
外注なら設計書から作りましょうねと諭して工数確保だな
182デフォルトの名無しさん
2019/04/20(土) 00:08:13.21ID:vpsjY4OY183デフォルトの名無しさん
2019/04/20(土) 03:49:52.33ID:C+CxU9Uj >>175
隠しておかないと、悪いことしてるのがばれちゃうもんな
隠しておかないと、悪いことしてるのがばれちゃうもんな
185デフォルトの名無しさん
2019/04/21(日) 00:17:28.92ID:Aqd0ZKZB forfilesは遅いこと
フォルダのファイル数が多いと極端に遅くなる
フォルダのファイル数が多いと極端に遅くなる
186デフォルトの名無しさん
2019/04/27(土) 20:18:12.49ID:SEUESNkj >>174
exit で終了しないと不味いな…
exit で終了しないと不味いな…
187デフォルトの名無しさん
2019/05/07(火) 09:53:38.49ID:3q/iti6Z バッチとは違うけど、Microsoftさまの新しいターミナルアプリ「Windows Terminal」
https://forest.watch.impress.co.jp/docs/news/1183011.html
期待しても良いのかしら
https://forest.watch.impress.co.jp/docs/news/1183011.html
期待しても良いのかしら
188デフォルトの名無しさん
2019/05/08(水) 22:44:07.08ID:6yW2addd >>187
windows10のみだと俺は使えないや
windows10のみだと俺は使えないや
189デフォルトの名無しさん
2019/05/08(水) 22:45:41.01ID:o7I87B0d >>188
そりゃMacやLinuxでも使えるようにする性格のアプリではないだろ
そりゃMacやLinuxでも使えるようにする性格のアプリではないだろ
190デフォルトの名無しさん
2019/05/08(水) 23:18:47.67ID:6yW2addd191デフォルトの名無しさん
2019/05/08(水) 23:59:34.57ID:PAJNmCOy >>190
MacやLinuxで使えないから嫌だってお前は言ってるんだよ
MacやLinuxで使えないから嫌だってお前は言ってるんだよ
192デフォルトの名無しさん
2019/05/09(木) 00:09:50.10ID:Q5GOiLDw build 10.0.18362.0以上でVS2017必要みたいね
Win8とかじゃ使えない
Win8とかじゃ使えない
193デフォルトの名無しさん
2019/05/09(木) 00:35:06.30ID:e/QFUb7b win7/8.1は切捨てか
さすがMS
さすがMS
194デフォルトの名無しさん
2019/05/09(木) 00:47:39.20ID:W7EsCFlC >>193
サポート終了って言ってるんだから当たり前じゃね?
サポート終了って言ってるんだから当たり前じゃね?
195デフォルトの名無しさん
2019/05/18(土) 02:08:44.94ID:5JVQU2Kx スレチかもなのですが、「コアを吐く」ってどういう意味なのでしょうか?
196デフォルトの名無しさん
2019/05/18(土) 02:12:53.15ID:ChT5ZnKi コアダンプのことじゃね
197デフォルトの名無しさん
2019/05/19(日) 00:27:10.87ID:p20+5ZYI Win10で、.(ドット)から始まる4文字以上のフォルダを再帰的に削除したいのですがうまくいきません
for /d /r %%d in (.????*) do rmdir /s /q "%%d"
フォルダ名をスペースおきに書くと削除できますがワイルドカードを使って処理できないものでしょうか
for /d /r %%d in (.????*) do rmdir /s /q "%%d"
フォルダ名をスペースおきに書くと削除できますがワイルドカードを使って処理できないものでしょうか
198デフォルトの名無しさん
2019/05/19(日) 11:10:45.58ID:TZwQ5fCi for /f %%d in ('dir /s /b ^| findstr \\\.....') do rmdir /s /q "%%d"
とか?
とか?
199デフォルトの名無しさん
2019/05/19(日) 11:21:46.43ID:TZwQ5fCi >>198
dir /s /b /ad だった
dir /s /b /ad だった
200デフォルトの名無しさん
2019/05/19(日) 11:40:23.60ID:C4jenAHt >>197
for /d /r %%i in (.*) do set "a=%%~fi" & call :x "%%a%%"
pause & goto :eof
:x
set "b=%~nx1"
if not "%b:~4,1%"=="" rd /s /q %1
for /d /r %%i in (.*) do set "a=%%~fi" & call :x "%%a%%"
pause & goto :eof
:x
set "b=%~nx1"
if not "%b:~4,1%"=="" rd /s /q %1
201197
2019/05/19(日) 12:35:02.55ID:p20+5ZYI202デフォルトの名無しさん
2019/05/19(日) 13:00:03.54ID:C4jenAHt203デフォルトの名無しさん
2019/05/19(日) 13:23:52.91ID:C4jenAHt 分かった
隠し属性かよ
隠し属性かよ
204デフォルトの名無しさん
2019/05/20(月) 07:05:59.13ID:/nt8UTBS for /f "delims=" %%i in ('dir/adh/s/b .*') do (
set "a=%%~nxi" & call set "a=%%a:~4,1%%"
if defined a if exist "%%i" rd/s/q "%%i")
set "a=%%~nxi" & call set "a=%%a:~4,1%%"
if defined a if exist "%%i" rd/s/q "%%i")
205デフォルトの名無しさん
2019/05/26(日) 10:45:56.66ID:nyCVecKy 7-Zipスレからこちらに誘導されてきました
バッチファイルを実行して
指定したフォルダを7z圧縮し別の指定した場所へ保存する方法教えてください
バッチファイルを実行して
指定したフォルダを7z圧縮し別の指定した場所へ保存する方法教えてください
206デフォルトの名無しさん
2019/05/26(日) 10:55:25.50ID:QHGhwB6i >>205
7-zipのコマンドラインオプションみましたか?
7-zipのコマンドラインオプションみましたか?
207デフォルトの名無しさん
2019/05/26(日) 11:03:44.74ID:nyCVecKy >>206
見ていません
見ていません
208デフォルトの名無しさん
2019/05/26(日) 11:10:19.45ID:nyCVecKy >>206
今見ています
今見ています
209デフォルトの名無しさん
2019/05/26(日) 17:24:55.92ID:iePtiDR/ >>205
7-Zip のパスは自分の環境に合わせる
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files (x86)\7-zip;%path%
set /p i=圧縮するフォルダのフルパス=
set "i=%i:"=%"
set /p o=書庫を作成するフォルダのフルパス=
set "o=%o:"=%"
set /p n=書庫名(拡張子なし)=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
7-Zip のパスは自分の環境に合わせる
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files (x86)\7-zip;%path%
set /p i=圧縮するフォルダのフルパス=
set "i=%i:"=%"
set /p o=書庫を作成するフォルダのフルパス=
set "o=%o:"=%"
set /p n=書庫名(拡張子なし)=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
210デフォルトの名無しさん
2019/05/26(日) 18:42:28.21ID:nyCVecKy >>209
ありがとうございます
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files\7-Zip;%path%
set /p i=Z:\TE=
set "i=%i:"=%"
set /p o=Z:\zz=
set "o=%o:"=%"
set /p n=a=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
7-Zip のパス
C:\Program Files\7-Zip
ZドライブTEフォルダを圧縮
Zドライブzzフォルダに作成
書庫名aにしてみましたが動作しませんでした
誤った箇所ありますでしょうか
ありがとうございます
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files\7-Zip;%path%
set /p i=Z:\TE=
set "i=%i:"=%"
set /p o=Z:\zz=
set "o=%o:"=%"
set /p n=a=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
7-Zip のパス
C:\Program Files\7-Zip
ZドライブTEフォルダを圧縮
Zドライブzzフォルダに作成
書庫名aにしてみましたが動作しませんでした
誤った箇所ありますでしょうか
211デフォルトの名無しさん
2019/05/26(日) 19:22:25.25ID:4n4gfKEy >>210
書き換えないといけないのは7zipのパスのところだけであとのところはいじっちゃだめ
なので↓をメモ帳に貼り付けて適当な名前のbatファイルに保存が正解
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files\7-Zip;%path%
set /p i=圧縮するフォルダのフルパス=
set "i=%i:"=%"
set /p o=書庫を作成するフォルダのフルパス=
set "o=%o:"=%"
set /p n=書庫名(拡張子なし)=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
書き換えないといけないのは7zipのパスのところだけであとのところはいじっちゃだめ
なので↓をメモ帳に貼り付けて適当な名前のbatファイルに保存が正解
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files\7-Zip;%path%
set /p i=圧縮するフォルダのフルパス=
set "i=%i:"=%"
set /p o=書庫を作成するフォルダのフルパス=
set "o=%o:"=%"
set /p n=書庫名(拡張子なし)=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
212デフォルトの名無しさん
2019/05/26(日) 19:28:03.67ID:iePtiDR/213デフォルトの名無しさん
2019/05/26(日) 19:35:30.91ID:nyCVecKy214デフォルトの名無しさん
2019/05/30(木) 23:24:33.44ID:D3n586fF CMDの画面でこういうのを入力して実行したら
FOR /L %I IN (1,1,20) DO @CALL ECHO %I
画面の上のタイトルに文字が
うじゃうじゃ出て来るのはなぜ?
FOR /L %I IN (1,1,20) DO @CALL ECHO %I
画面の上のタイトルに文字が
うじゃうじゃ出て来るのはなぜ?
215デフォルトの名無しさん
2019/06/01(土) 22:51:37.17ID:cR7U/Ve2 最近の発見
remの前に空白をおける
: でラベルを示すが、:の前後に複数の空白、タブ、全角空白があってもよい
: タブ abc
またラベルの後の空白以降の文字列は無視するのでコメントを書ける
: abc エラーの場合
まあ、あまり使うところないけど
remの前に空白をおける
: でラベルを示すが、:の前後に複数の空白、タブ、全角空白があってもよい
: タブ abc
またラベルの後の空白以降の文字列は無視するのでコメントを書ける
: abc エラーの場合
まあ、あまり使うところないけど
216デフォルトの名無しさん
2019/06/02(日) 00:30:45.28ID:0ZBCelud 最後のは割と便利そうだけど
現場だとコメントはREM使えっていうコーディング規約に阻まれそうだw
現場だとコメントはREM使えっていうコーディング規約に阻まれそうだw
217デフォルトの名無しさん
2019/06/02(日) 03:07:05.57ID:rFF/uYB6 >>214
そもそも call の引数はバッチファイル名かラベルだ。
それ以外の、内部コマンドや外部コマンドじゃない。
そんな使い方、help のどこにも書いてない。
一見、正常に動作している様に見えるが、
内部では子プロセスが異常終了している。
だからタイトル名に子プロセスの残骸が残る。
call set なども動作はするが邪道。
そもそも call の引数はバッチファイル名かラベルだ。
それ以外の、内部コマンドや外部コマンドじゃない。
そんな使い方、help のどこにも書いてない。
一見、正常に動作している様に見えるが、
内部では子プロセスが異常終了している。
だからタイトル名に子プロセスの残骸が残る。
call set なども動作はするが邪道。
218デフォルトの名無しさん
2019/06/04(火) 23:08:45.76ID:YyzuHNes >>215
REM は「コマンド」だから前に空白が置ける。それは当然として。
ラベルをコメント代わりに使うのは止めとけ。
for や if コマンドの中で「インテンドを使って」コメントに使おうとすると弾かれる。
大人はバッチのコメントは REM で書くものだ。
Intel のドライバーインストーラーのバッチは奇麗だと思うぞ。
REM は「コマンド」だから前に空白が置ける。それは当然として。
ラベルをコメント代わりに使うのは止めとけ。
for や if コマンドの中で「インテンドを使って」コメントに使おうとすると弾かれる。
大人はバッチのコメントは REM で書くものだ。
Intel のドライバーインストーラーのバッチは奇麗だと思うぞ。
219デフォルトの名無しさん
2019/06/09(日) 19:33:03.04ID:ESLww06V 変数のサイズの最大値って何バイトなんだろう
@echo off
setlocal enabledelayedexpansion
set "a=x"
for /L %%i in (1,1,12) do set "a=!a!!a!"
set "b=x"
for /L %%i in (1,1,13) do set "b=!b!!b!"
if !a!==!b! (echo "a=b") else echo "a<b"
pause
結果は
"a=b"
@echo off
setlocal enabledelayedexpansion
set "a=x"
for /L %%i in (1,1,12) do set "a=!a!!a!"
set "b=x"
for /L %%i in (1,1,13) do set "b=!b!!b!"
if !a!==!b! (echo "a=b") else echo "a<b"
pause
結果は
"a=b"
220デフォルトの名無しさん
2019/06/09(日) 20:37:25.93ID:ESLww06V221デフォルトの名無しさん
2019/06/10(月) 07:14:20.96ID:24zpPZFc https://www.atmarkit.co.jp/ait/articles/1510/30/news041.html
内部的には1つの変数当たり最大32767文字
コマンドプロンプトの入力行は最大で8190文字
システム環境変数やユーザー環境変数の最大値は約2000文字(setxコマンドでは最大1024文字)
@echo off &setlocal
set a=x
set b=x
set /a i=2
:LOOP
set a=%a%x
echo %i%
if not %a%==%b% (
set b=%a%
set /a i+=1
goto :LOOP
)
pause
速くて正確ではないけど4093くらいで落ちた
コマンドの制限に掛かるみたいやね
内部的には1つの変数当たり最大32767文字
コマンドプロンプトの入力行は最大で8190文字
システム環境変数やユーザー環境変数の最大値は約2000文字(setxコマンドでは最大1024文字)
@echo off &setlocal
set a=x
set b=x
set /a i=2
:LOOP
set a=%a%x
echo %i%
if not %a%==%b% (
set b=%a%
set /a i+=1
goto :LOOP
)
pause
速くて正確ではないけど4093くらいで落ちた
コマンドの制限に掛かるみたいやね
222デフォルトの名無しさん
2019/06/10(月) 07:46:35.61ID:acT05/Jv223デフォルトの名無しさん
2019/06/10(月) 15:28:36.17ID:q9TwxOtc >>221
こういうのって統一して何バイトって決めないとやばくないのかな
windowsバージョン、英語、日本語、ヒンズー語など言語で微妙に変化すると、
おかしなことがおきたり、ウィルスの侵入口に利用される
こういうのって統一して何バイトって決めないとやばくないのかな
windowsバージョン、英語、日本語、ヒンズー語など言語で微妙に変化すると、
おかしなことがおきたり、ウィルスの侵入口に利用される
224デフォルトの名無しさん
2019/06/10(月) 18:52:33.54ID:acT05/Jv 遅延展開では変数名1文字なら値は8189文字まで。半角全角は無関係。
変数名が1文字増えると値の最大値は1文字減る
set "a=!b!" の様に二重引用符で囲むと最大値は2文字減る
遅延じゃないと a=%b% 以外のコマンドラインの文字数分が更に減る
変数 a が5000文字の場合
if %a%==%a% echo ng は落ちるが
if !a!==!a! echo ok は落ちない
変数名が1文字増えると値の最大値は1文字減る
set "a=!b!" の様に二重引用符で囲むと最大値は2文字減る
遅延じゃないと a=%b% 以外のコマンドラインの文字数分が更に減る
変数 a が5000文字の場合
if %a%==%a% echo ng は落ちるが
if !a!==!a! echo ok は落ちない
225デフォルトの名無しさん
2019/06/10(月) 18:58:22.71ID:OlE51f/u226デフォルトの名無しさん
2019/06/10(月) 19:19:36.75ID:acT05/Jv cmdは既に穴だらけなんで
227デフォルトの名無しさん
2019/06/10(月) 20:08:18.95ID:8z0TGIdq 穴だらけなのかもしれないが、外部に開いた穴は無いんで
悪用されるにはその前に侵入を許してしまってる必用がある
まあ侵入されたあとにコマンドプロンプトを使うようなウィルスはあるかは知らないけど
悪用されるにはその前に侵入を許してしまってる必用がある
まあ侵入されたあとにコマンドプロンプトを使うようなウィルスはあるかは知らないけど
228デフォルトの名無しさん
2019/06/11(火) 05:43:03.21ID:mwwG6pNT ワンラインで8kか
フルパス200文字位のファイルを40個D&Dしたらもうパンクか
ヘタレ過ぎる
フルパス200文字位のファイルを40個D&Dしたらもうパンクか
ヘタレ過ぎる
229デフォルトの名無しさん
2019/06/11(火) 16:08:50.98ID:AKGG1UAL 初心者故説明不足でしたらご指摘ください。
調べてもわからなく、ご教示いただけないでしょうか。
やりたいこと
Windowsアップデートのインストール一覧のうち
2019年分のみ抽出したい。
やったこと
一覧を取得するコマンドで情報をテキストファイルに出力。
その後findstrで2019分のみを抽出しようとしたけど
抽出出来なかった。
実行コマンド
Windowsアップデート一覧取得
wmic qfe get InstalledOn,HotFixID > aaa.txt
抽出コマンド
findstr "2019" aaa.txt
抽出コマンド実行後、結果が帰って来ませんでした。
なぜ結果が帰って来ないのかが全くわかりません。
どうか、対処法をご教示いただけないでしょうか。
調べてもわからなく、ご教示いただけないでしょうか。
やりたいこと
Windowsアップデートのインストール一覧のうち
2019年分のみ抽出したい。
やったこと
一覧を取得するコマンドで情報をテキストファイルに出力。
その後findstrで2019分のみを抽出しようとしたけど
抽出出来なかった。
実行コマンド
Windowsアップデート一覧取得
wmic qfe get InstalledOn,HotFixID > aaa.txt
抽出コマンド
findstr "2019" aaa.txt
抽出コマンド実行後、結果が帰って来ませんでした。
なぜ結果が帰って来ないのかが全くわかりません。
どうか、対処法をご教示いただけないでしょうか。
230デフォルトの名無しさん
2019/06/11(火) 16:21:50.48ID:mwwG6pNT ユニコードだからじゃない?
type aaa.txt > aaa1.txt
aaa1.txt でやってみろ
type aaa.txt > aaa1.txt
aaa1.txt でやってみろ
231デフォルトの名無しさん
2019/06/11(火) 16:30:25.48ID:SBjduyI+ wmicはリダイレクトするとUTF16LEになるから
230みたいに文字コード変換するか、パイプで
wmic qfe get InstalledOn,HotFixID | findstr /n "2019"
230みたいに文字コード変換するか、パイプで
wmic qfe get InstalledOn,HotFixID | findstr /n "2019"
232デフォルトの名無しさん
2019/06/11(火) 16:31:56.22ID:SBjduyI+ あ、/n付けちゃったけどまぁいいか
233デフォルトの名無しさん
2019/06/11(火) 16:53:09.70ID:AKGG1UAL234デフォルトの名無しさん
2019/06/13(木) 10:13:44.37ID:P3O2UGUp Explorerから「送る」SendTo で使うバッチの中の pushd "%~dp1" が失敗するケースて有り得る?
送るから使うって事はアクセス出来てるはずなので失敗する事はないと思うんだけど
pushd "%~dp1"||exit とか失敗した場合の処理書いといた方が良いのかな
送るから使うって事はアクセス出来てるはずなので失敗する事はないと思うんだけど
pushd "%~dp1"||exit とか失敗した場合の処理書いといた方が良いのかな
235デフォルトの名無しさん
2019/06/13(木) 12:37:34.91ID:qazE1A0w >>234
パスの中に全角スペースが入っていて半角スペースが入ってない場合なんかは失敗するんじゃないかな
パスの中に全角スペースが入っていて半角スペースが入ってない場合なんかは失敗するんじゃないかな
236デフォルトの名無しさん
2019/06/13(木) 14:43:51.05ID:rRFcU9uI237デフォルトの名無しさん
2019/06/13(木) 14:50:46.43ID:P3O2UGUp >>235
その問題、失念してた。ありがとう
パスに半角スペースが無くて、全角sp" "、コロン","、セミコロン";"、ハット"^"、イコール"=" の何れかが有る時だね
半角sp有る無し関係なく引数全部""括るようにすれば良いのにまだこの問題残ってたんだね
意図しない動作ではあるものの最初にデリミタ文字を含むフォルダの親フォルダにカレント移動して pushd 自体は成功する
pushd が失敗する事例を知っていたら教えて欲しい
この問題は対応面倒なのでパスに半角スペースを含めるようにして対処するよ
その問題、失念してた。ありがとう
パスに半角スペースが無くて、全角sp" "、コロン","、セミコロン";"、ハット"^"、イコール"=" の何れかが有る時だね
半角sp有る無し関係なく引数全部""括るようにすれば良いのにまだこの問題残ってたんだね
意図しない動作ではあるものの最初にデリミタ文字を含むフォルダの親フォルダにカレント移動して pushd 自体は成功する
pushd が失敗する事例を知っていたら教えて欲しい
この問題は対応面倒なのでパスに半角スペースを含めるようにして対処するよ
238デフォルトの名無しさん
2019/06/13(木) 15:04:31.95ID:rRFcU9uI239234
2019/06/13(木) 16:36:42.36ID:P3O2UGUp 送るから使う前提で
pushd "%~dp1"||エラー処理
のエラー処理を書く意味あるかな?てのが聞きたかった事なんだ
まあおまじない的にpause&exitしとくよ。ありがとう
pushd "%~dp1"||エラー処理
のエラー処理を書く意味あるかな?てのが聞きたかった事なんだ
まあおまじない的にpause&exitしとくよ。ありがとう
240デフォルトの名無しさん
2019/06/13(木) 17:10:58.72ID:rRFcU9uI 引数全部で
if "%~dp1"=="%~dp2"
if "%~dp1"=="%~dp3"
if "%~dp1"=="%~dp4"
とか確認すりゃ問題ない
if "%~dp1"=="%~dp2"
if "%~dp1"=="%~dp3"
if "%~dp1"=="%~dp4"
とか確認すりゃ問題ない
241デフォルトの名無しさん
2019/06/13(木) 17:24:03.99ID:rRFcU9uI >>240
でもファイル名使うとダメだな
でもファイル名使うとダメだな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- 20代の3割が「テレビ見ない」現実…そして静かに広がる「究極のテレビ離れ」とは [muffin★]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- んなっしょい🍬禁止🈲のお🏡
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 高市早苗「……なんて言ってみたw」中国「なんだ、言ってみただけかw」👈これで全部元通りになるという事実 [782460143]
- 【悲報】ガラパゴス島国ジャップ、自分達の容姿が優れてると錯覚してしまう [383063292]
