【.cmd】 バッチファイルスクリプト %14 【.bat】

■ このスレッドは過去ログ倉庫に格納されています
2020/08/15(土) 07:00:26.64ID:f3kW5kCx
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう

過去スレ
%13 http://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 http://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 http://echo.2ch.net/test/read.cgi/tech/1424858999/
%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://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
http://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
http://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
http://pc5.2ch.net/test/read.cgi/tech/1040614686/
2021/12/10(金) 12:54:10.13ID:4x3UzFuB
chromeをdefault browserにする気は無かったのか?
2021/12/10(金) 13:46:43.89ID:xm+AV3Ci
これかー
https://github.com/MicrosoftDocs/windowsserverdocs/issues/4784

However the fact you need a Window Name is very annoying.

Typically we have used:
start /w "c:\path_name_here\filename.ext"
But all this does now is open another cmd prompt window with "c:\path_name_here\filename.ext" as it's title.

As a minimum, what is now required is this:
start "" /w "c:\path_name_here\filename.ext"

Why did this change??

まだopen question?闇深
2021/12/10(金) 13:58:58.96ID:bi0x6bK+
いちいちcdとかせんでもこれでよくね?
set chrome="フルパス\chrome.exe"
start "" %chrome% "http://〇〇/〇〇" "http://△△/△△"
タブに追加するだけならurlは羅列でいいはず
2021/12/10(金) 14:41:04.55ID:xm+AV3Ci
/オプション無しのオプショナル引数を先頭に持ってくるという設計は完全に腐ってるから、[<title>]から<title>への変更はグッジョブ

しかしアンドキュメンテッドはやめーや
2021/12/13(月) 10:32:27.87ID:iAh3rPLr
cmdの作業効率が8%向上する裏技

prompt $E[92;40m$P$_$G$S$E[0m
2021/12/13(月) 14:12:22.20ID:MDj1w4qb
ドキュメントしてしまうと公認してしまうから
2021/12/14(火) 01:14:44.64ID:74yCYCRP
>>567
行毎に一括でパラメタ展開はモジュール化に役立つよ
:: main
call :subtract %1 %2
call :add %1 %2
goto:eof

:subtract
setlocal
set a=%1
set b=%1
endlocal & set /a ret=%a%+%b%
exit /b

:: note that
:: "endlocal & set /a ret=a-b" wont work: no expansion at line-parsing
:: also
:: "endlocal"
:: "set /a a=%a%+%b%"
:: because local vars already popped.

:add
setlocal
set a=%1
set b=%2
endlocal & set /a ret=%a%-%b%
exit /b

ノーテストなんでなんか変だったらごめん
スマホアプリですぐ試せられればいいんだけど、プロプライエタリだからなあ…
2021/12/14(火) 01:20:33.98ID:74yCYCRP
大事なとこぬけてた
call :subr arg1 arg2
@echo %ret%
みたいに返り値得てます
2021/12/14(火) 13:12:42.88ID:0TpC/TXA
%time%で取得できる13:11:12.99を13111299に変換したい場合、変数を使って%time::=%、%_time:.=%として変換しています。
この文字列置換を複数条件設定するなど1行でスマートに置換させる方法はありませんか?
2021/12/14(火) 14:26:07.33ID:g9YcY7nV
>>589
>>538じゃ駄目なの?
2021/12/14(火) 15:16:40.00ID:0TpC/TXA
>>590
できました。ありがとうございます。
2021/12/15(水) 10:47:19.32ID:EP1qj6y9
>>538
すばらしい、一行でできるんだ、曲芸飛行
時間だけで5行かけていた
2021/12/15(水) 21:34:23.51ID:Ttj+NiJr
>>540の問題で痛い目を見るから俺は%date%%time%は使わない
2021/12/15(水) 22:26:24.88ID:EYSEHsUE
>>593
そこまで気にするなら、時刻が 0:00:00.xxの時は日付を取得し直すとかすればいいかな
又は一旦ダミーファイルを作成してそのタイムスタンプを見るとか
ちょっと具体的には思いつかないが日付時刻の付いた結果が出るシステム情報や結果ログ出力系のコマンドから貰うとか
bat中で別言語(WSH,PowerShell)で取得するとか(new Date();やget-date)
どういうのを使うと良いと言ってくれれば最高なレスになったのに
2021/12/16(木) 00:00:44.73ID:7XMchLit
通ぶりたいだけでしょw
2021/12/16(木) 21:17:59.55ID:/gSQ5d+p
これで満足かな
for /f "usebackq" %%a in (`powershell -nop "get-date -format 'yyyyMMddHHmmss'"`) do set now=%%a
2021/12/17(金) 14:42:24.69ID:BDVQn7Pa
:: タイムスタンプ取得。秒未満無し
copy nul $.txt
:: tokens はシステム設定の日付形式に依存。環境毎に要調整
for /f "tokens=2-4,6-8 delims=/: " %%a in ('where /t $.txt') do set "dt=%%a%%b%%c%%d%%e%%f"
del $.txt
set "dt=%dt: =0%"
echo %dt%
pause &exit /b

:: 怪しい時間帯(23:59:59-00:00:01)なら再取得。センチ秒(1/100)有り
:GET_DT
for /f "tokens=1-7 delims=/:." %%a in ("%date:~0,10%/%time: =0%") do set /a "d=%%a%%b%%c, t=1%%d%%e%%f%%g"
if %t% GTR 123595900 timeout /t 2 /nobreak >nul &goto :GET_DT
if %t% LSS 100000100 goto :GET_DT
echo %d%_%t:~1,-2%_%t:~-2%
pause &exit /b

別々に取得してるならまだしも同時に取得してそんな事故起こり得るの?都市伝説じゃね?
ところで"20211217143411"みたいな年月日時分秒を区切り文字無しの数字のみで表した形式って名前あるなら教えて欲しい
2021/12/17(金) 14:50:54.89ID:YK+z10uu
dateもtimeも参照する度に計算して返してるからありえなくはないはず
んなこと気にしだしたらやってらんないからまあ気にすんな
2021/12/17(金) 15:15:49.48ID:hTLZR6Rv
怪しい時間はスリープしてしまうのも手
決済の日付なんか微妙なの下手に振り分けたら揉めるしな、23:59で〆切でヨシ

そんなのbatでやってる人居るかはしらんが
2021/12/17(金) 17:15:52.28ID:U9ZWMMsm
>>597
日時ってデータとしては埋もれて目立たないから軽視されがちだけど
バッチでログ吐かせてY軸時間でグラフ出すような時にアッレッ!?ってなる
2021/12/17(金) 19:18:20.51ID:b/qKwgTk
:loop
set d=%date%
set t=%time%
if not %d%==%date% goto loop
2021/12/17(金) 20:24:45.70ID:HfuHDFo+
>>601
これだと、time取得した後で日付が変わる可能性がごくわずか考えられる
やっぱり時刻が0秒台かどうかで判定したほうがいいと思う
2021/12/17(金) 20:26:39.18ID:HfuHDFo+
いや別に変わっても大丈夫だな
2021/12/17(金) 21:03:18.69ID:BDVQn7Pa
>>601
あー同時に参照することばかり固執してたわ
敢えて順に取得して2度目との比較でTIMEの同日を保証出来るね
その方がシンプルで良いな
2021/12/18(土) 01:12:16.03ID:CB++7SQf
8ビットマイコンで16ビットタイマーの値を読むときなんかに使ったっけ
もちろんタイマー側にラッチ機能があって、そういう気遣いのいらないものもあったが
2021/12/21(火) 06:09:00.92ID:LxI3AD9t
ラッチがいるならつければええやん
607デフォルトの名無しさん
垢版 |
2021/12/24(金) 11:39:23.31ID:etjYYPj+
イベントログ保存したくて
wevtutil epl system xxx.evtx /q:"条件"

wevtutil al xxx.evtx /l:ja
でディレクトリ名が無効ですって出るんだが理由わかる?
608デフォルトの名無しさん
垢版 |
2021/12/24(金) 11:43:38.16ID:etjYYPj+
自己解決しました
管理者で実行したら行けた
2021/12/24(金) 20:51:05.94ID:wuqNqn+2
>>606
タイマーとかのラッチってペリフェラルの補助機能でしょ
ソフトでそんなもんないから>>601なわけで
2022/01/02(日) 19:41:59.70ID:llzVm8Ys
Windowsでバッチファイルの%1とかに
今クリップボードに入ってるテキストを渡して起動したいけど
なんか方法ある?
2022/01/02(日) 20:13:43.31ID:Wx5RR6tp
とりあえず何も追加する必要ないので PowerShell がお手軽

例えばクリップボードの内容を tmp.txt に出すならバッチファイルやコマンドプロンプトで
>powershell -NoProfile -ExecutionPolicy Unrestricted -Command Get-Clipboard > tmp.txt

先に
>chcp 65001
しておくと UTF8 での出力もいけるっぽい
2022/01/03(月) 02:27:56.29ID:/1+Dp4vp
for /f "delims=" %%a in ('powershell -c "get-clipboard"') do hoge.bat "%%~a"
2022/01/03(月) 07:54:20.63ID:yGzP40SI
>>611-612
powershellの1行呼び出しに-c or -Commandって必要ある?
いつもpowershell -nop "コマンド"てやってるわ
2022/01/03(月) 09:26:29.55ID:BdaWP45p
漏れは下のような、Ruby スクリプト内で、powershell コマンドを呼んで、
クリップボード内の文字列を処理している

# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
2022/01/03(月) 10:45:31.38ID:CWfpiD5B
>>613
この場合なら最低限で書くと
for /f "delims=" %%a in ('powershell get-clipboard') do
で良い
2022/01/03(月) 13:18:16.70ID:0LszXjQc
環境変数名に一部記号も使えることを発見
#で始まれば一時変数、$で始まればバッチ間共通など、少しわかりやすくできる
617デフォルトの名無しさん
垢版 |
2022/01/04(火) 00:14:37.12ID:a2P6Hn/H
塩野義製薬が週休3日制導入へ 来年4月、副業も解禁

塩野義製薬が「週休3日」選択可能に 給与は『週休2日の8割』副業や学び直しを支援

【フォーカス】サタケ/週休3日制 通年導入めざし夏季のみ試行中 交代制で水曜を休日に

旅館なのに週休3日!?陣屋・若女将の常識を覆した組織改革

“時代錯誤”から残業ゼロ、週休3日に! 鳥取の不動産会社が
レガシー企業からDX先進企業になれたワケ

ネクスウェイ、週休4日制・1日3時間勤務選択できる勤務体系を導入

日本初「週休4日制度」で、優秀な人材を採用するしくみとは? ?
ナレッジソサエティ久田社長に聞いてみた
2022/01/06(木) 07:53:54.89ID:JIskJ1L9
ファイルのリネームと
ファイルの移動
フォルダ自動作成
これだけで普段の作業の手間がほんとうに省ける
逆に何ができると便利だろう
2022/01/06(木) 08:04:00.41ID:JIskJ1L9
環境変数って
普通の変数とは違うの?
バッチファイル特有の言い回し?
%1
%i
%hoge
だっけ?
2022/01/06(木) 13:18:17.45ID:nDo7QbOD
アプリケーションプログラムの環境という意味
例えば一時作業フォルダを TEMP に指定するとアプリが参照して使ってくれる(事がある)
dirコマンドのデフォルトオプションはdircmd変数に設定出来る

いわゆる環境設定と呼ばれるね

そしてバッチファイル内でプログラミング言語の変数としても使える
2022/01/06(木) 13:23:22.58ID:nDo7QbOD
ちなみに %1 %%i は環境変数じゃないね
shift /? や for /? を読もう

環境変数はsetコマンドでセットして参照は%変数名%
set /? を読もう
2022/01/20(木) 04:31:27.84ID:a6a8bxfJ
最低限
for /f "delims=" %a in ('powershell clipboard') do echo %a
2022/01/25(火) 21:13:49.45ID:aASmTB60
dir /b の結果を explorerの名前順(昇順|降順)にソートする簡単な方法無い?
数字を数値と見做してソート
バッチから利用出来るならOK。ps全く分からんけど powershellとかで出来ないかな?
カレントディレクトリの dir /b 相当なら dirで無くてもいい
for /f "delims=" %%a in ('dir /b ^| numsort.exe') do
みたいな感じで外部ソートツール導入でもOK。むしろ理想形
ファイル数は2000未満くらい。万単位とか考慮しなくていい
なるべくなら余計なインストールは避けたいけど自前でパースとソート作るのはハードル高過ぎなので何か方法があれば教えて欲しい
最悪逆順にするだけなら自前でも出来そうなのでせめて(昇順|降順)どちらかだけでも出来れば
2022/01/25(火) 21:22:10.78ID:s4YEdFZn
>>623
dir /b の結果とexplorerの名前順(昇順|降順)って違うん?
もし同じなら、単に dir /b > uuu.txt でリダイレクト
2022/01/25(火) 21:28:36.67ID:OaU1XWUD
半角数字だけでいいなら GnuWin の sort.exe を gsort.exe にリネームして使ってる
http://gnuwin32.sourceforge.net/packages/coreutils.htm
の Binaries の zip に入ってるやつ


>dir /b *.txt | gsort -n
11.txt
0123.txt
2222.txt
3333.txt
11111.txt

>dir /b *.txt
0123.txt
11.txt
11111.txt
2222.txt
3333.txt

こんな具合
漢数字とかは知らないので日本語(漢数字・全角)に対応したの
あれば知りたい……
2022/01/25(火) 21:53:08.80ID:aASmTB60
>>625
ありがとう試してみます
2022/01/25(火) 21:59:16.95ID:s4YEdFZn
>>626
あんた数字を数値と見做すて言うたやん?
11.txt
11111.txt
2222.txt
になっていいわけ?
2022/01/25(火) 22:26:05.82ID:aASmTB60
>>625
教えてもらったようにgsort.exeにリネームして使ってみたら
libintl3.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。
とアラート出て使えなかった。win10
libintl3.dllをググったらjp.dll-files.comてとこ検索出て落とせるようなんだけどこれ入れて大丈夫?
2022/01/25(火) 22:30:15.41ID:OaU1XWUD
>>627
落ち着いて
そこは比較のために出した素の 「dir /b 」 の結果ですよ

>>628
ごめんなさい
上のページの Binaries の下の Dependencies も要るんだった
2022/01/25(火) 23:14:16.23ID:aASmTB60
>>629
ありがとう
libをシステムにコピーして使えました
でもコレ
dir /b *.ext | gsort -n
1.txt
2.txt

9.txt
10.txt
と、数字.ext なら数値順にソート出来ましたけど
文字列+数字.ext だと無理なようです
xxx1.txt
xxx10.txt
xxx2.txt
xxx20.txt
みたいになります
xxx_1.txt と文字列と数字の間に区切り記号入れても駄目
エクスプローラーのようには並ばないみたいですね

win32api使うかvbかpowershellかで出来るような事を以前どこかで読んだ気がするのですがそのソースが見付けられない。。
2022/01/26(水) 01:07:47.03ID:td9ayUMw
普通に見つかったけど、本当に探した?
@echo off
echo class P{[System.Runtime.InteropServices.DllImport("shlwapi.dll", >SortLogical.cs
echo CharSet = System.Runtime.InteropServices.CharSet.Unicode, ExactSpelling = true)] >>SortLogical.cs
echo public static extern int StrCmpLogicalW(string str1, string str2); >>SortLogical.cs
echo static void Main(){ string[] lines = System.Console.In.ReadToEnd().Split >>SortLogical.cs
echo (new string[] { "\r\n" }, System.StringSplitOptions.RemoveEmptyEntries); >>SortLogical.cs
echo System.Array.Sort(lines, StrCmpLogicalW); >>SortLogical.cs
echo System.Console.Out.WriteLine(string.Join("\r\n",lines));}} >>SortLogical.cs
for /f %%i in ('dir /s /b "%windir%\Microsoft.NET\csc.exe"') do set csc="%%i"
%csc% /nologo SortLogical.cs
dir /b | SortLogical
2022/01/26(水) 04:18:02.04ID:aOgfZBdB
>>631
すげぇ。生成されたexeで希望するソートが出来るようになりました
マジ感謝です
ありがとう

> 本当に探した?
検索語すら分からず「バッチ dir エクスプローラー並び順」とか他にも結構色々試して探しては見たのですが。。
StrCmpLogicalW が分かった今でもその方法を見付けられていません
2022/01/26(水) 06:51:01.88ID:fC9okRVc
エクスプローラーの並び順って
辞書順か数字順か
レジストリで変更可能だよね
2022/01/26(水) 08:10:19.47ID:JawhZMcA
何のために並び順を揃えるの?
2022/01/26(水) 08:34:25.15ID:e2k0MxNT
なるほど、数字の部分だけは数値に変換してから、小さい順に並べるのか

このアルゴリズムを考えるのは、難しい
2022/01/26(水) 09:10:13.24ID:TX0OTodc
俺なら必要な桁分0パディングするなあ
連番ファイルをエクスプローラーで直接使うなんてことはないし
2022/01/26(水) 09:20:50.79ID:JawhZMcA
エクスプローラーで選択してパスのコピーでいいやん
2022/01/26(水) 11:52:52.47ID:+BcwC06P
>>635
スクリプトでやるなら正規表現などで数字部分を置換11→0000000011してからソートかな?
小数点以下ってどうなってたっけ?
でも記号 _ の並びまで違うから鬱陶しい
631のAPIはWin7には無いっぽいから需要はあるかもよ
2022/01/26(水) 12:06:15.68ID:+BcwC06P
あれ?XPから使えるのか…
あの外人許さん
2022/01/26(水) 12:08:29.20ID:JawhZMcA
A01BとA001Bが同じ評価になって順番どうするのとか思う
2022/01/26(水) 20:44:37.41ID:rJwWcbPl
>>631をスイッチで逆順に出来ない?
2022/01/26(水) 22:43:54.21ID:2NoDFTFY
>>631
おおーっ、いいなコレ


>>630
今更感が強いけど、文字列やセパレータがはっきりしてるならこんな事も

>dir /b *.txt | gsort -g --key=4 --field-separator=x
xxx11.txt
xxx0123.txt
xxx2222.txt
xxx3333.txt
xxx11111.txt

>dir /b *.txt | gsort -n --key=2 --field-separator=-
xxx-01-23.txt
xxx-1-1.txt
xxx-2-222.txt
xxx-33-33.txt
xxx-111-11.txt

>dir /b *.txt | gsort -n --key=3 --field-separator=-
xxx-1-1.txt
xxx-111-11.txt
xxx-01-23.txt
xxx-33-33.txt
xxx-2-222.txt

ひとつ目はちょっと無理やりw
2022/01/26(水) 22:54:09.19ID:e2k0MxNT
11
011
0011

のソート順が分からない
2022/01/27(木) 00:04:18.32ID:L9fnubfL
>>641
もちろんできる
下記をSortの後に追加
if "%1"=="/R" echo System.Array.Reverse(lines); >>SortLogical.cs
2022/02/05(土) 23:16:58.61ID:ICS6MdcL
・画像ファイルが縦長か横長か?
・画像ファイルの拡張子判別
上記2点をバッチから行いたい
縦横に関してはimageMagickで出来そう
identify -format "%[fx:h>w?1:2]" "ファイルパス"
拡張子判別も同様に %m でファイルタイプからやれそうではあるのですが
何か更に良い方法やコマンドラインアプリなどがあったらアドバイス欲しいです
2022/02/06(日) 04:23:41.63ID:D8jWL7f3
画像のサイズはOS標準の方法としてシェルネームスペースからファイルのプロパティの詳細タブの値を拾ってくるやつがあったと思う
COMが使えるスクリプトで取ってくる必要がある
拡張子はバッチファイル 拡張子 取得でぐぐったら出てくるんじゃないの
2022/02/06(日) 05:53:39.32ID:ZVoj0wBD
Param([Parameter(mandatory=$true)][String]$inputFile)
Add-Type -AssemblyName "System.Drawing"
try{
$img = [System.Drawing.Image]::FromFile($inputFile)
if ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Jpeg)) {
$mimetype = 'image/jpeg'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Png)) {
$mimetype = 'image/png'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Bmp)) {
$mimetype = 'image/bmp'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Gif)) {
$mimetype = 'image/gif'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Icon)) {
$mimetype = 'image/icon'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Tiff)) {
$mimetype = 'image/tiff'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Wmf)) {
$mimetype = 'image/wmf'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Exif)) {
$mimetype = 'image/exif'
} else {
$mimetype = 'image/unknown'
}
$w = $img.Width
$h = $img.Height
$img.Dispose()
}
catch{ $mimetype='unknown' }
echo "$mimetype`t$w`t$h"
2022/02/06(日) 05:54:07.77ID:ZVoj0wBD

getDetailsOfでプロパティを取ってくる以外の方法
jpg/png/gifぐらいだけど

powershell ./test.ps1 "画像ファイルのパス"

プロパティだと拡張子に関連付けられたものになる
中身がjpgなのにファイル拡張子が.pngの場合とかある?

なお、batに埋め込みたいならググれば方法は出てくる
2022/02/06(日) 09:33:19.21ID:T20/oaZi
>>647-648
ありがとうございます
最初、実行ポリシーが云々でエラーになったものの、ググって
powershell -NoProfile -ExecutionPolicy Unrestricted .\test.ps1 '%~1'
としたら動きました
シングルクォートにしないとスペースを含むパスでエラーになりました

> 中身がjpgなのにファイル拡張子が.pngの場合とかある?
バッチでリネームついでにそういった間違っている拡張子を正しいものに直したいと思いまして
image/jpeg とかを .jpg に変えたら面倒も無くそのまま使えそうです

powershell凄いですね。外部アプリ使わずに判別出来ちゃうんですね
WINEX32.DLL
https://www.vector.co.jp/soft/win95/prog/se478825.html
こういうのが必要なのかと思ってました
ただファイル一つ一つをバッチからpsを起動してたら遅いのだけが難点ですね
速さは重要ではないので構わないのですが
いっそ全部psで書けるスキルがあれば良いんですけどねー
バッチですら四苦八苦してる身としてはさくっと書ける人が羨ましいです
650デフォルトの名無しさん
垢版 |
2022/02/16(水) 16:36:49.58ID:w27+Spzi
初心者過ぎて分からないんだが

コマンド >nul 2>&1
if "!ERRORLEVEL!" == "0" 〜
ってちゃんと意味ある?

出力捨てるのは成功するから毎回リターンコード0になったりする?
2022/02/16(水) 17:40:22.47ID:SGx0nl/1
正常時に出力の無いコマンドはリダイレクトできないからエラーになるんじゃね。
異常時にコマンドがエラー出してもエラーになるから
結局、区別がつかない。
652デフォルトの名無しさん
垢版 |
2022/02/16(水) 18:08:47.78ID:5G/Gik2e
>>651
辞めといた方がいいか

前の処理が正常終了したら次に進むベストプラクティスってなんだろう
2022/02/16(水) 18:18:47.77ID:t0Nu4cH6
コマンドの復帰コードと標準(エラー)出力のリダイレクトとは無関係なので
ちゃんとコマンドが復帰コードを返していたら問題ないはず
errorlevel環境変数を見るのはちょっとリスクがあるけどわかっているなら問題はない
if errorlevel 1 〜
なら確実
2022/02/16(水) 18:26:54.82ID:lGeZIdOq
コマンド
if not errorlevel 1 echo ok

コマンド >nul 2>&1 && echo ok || echo fail
655デフォルトの名無しさん
垢版 |
2022/02/16(水) 18:31:31.49ID:5G/Gik2e
ifのパラメーターにerrorlevelがあったのね
確かに環境変数使うより良さそう

PC起動時に毎回開きたいアプリを順番(前後関係あり)に開いてくだけだから基本startコマンドなのよね
656デフォルトの名無しさん
垢版 |
2022/02/16(水) 18:32:09.18ID:5G/Gik2e
おーありがてえ
2022/02/16(水) 18:39:35.08ID:IpLn/l6Q
>>651
> 正常時に出力の無いコマンドはリダイレクトできないからエラーになるんじゃね。
どこからこんなアホな知識を仕入れたのか知らんが、そんな知識を開陳する度胸に感心したわ
2022/02/16(水) 18:44:42.98ID:91qDUo1j
>>655
if errorlevelは 以上 だから気をつけろよ

DOS時代の使い勝手重視だ
2022/02/16(水) 18:50:49.88ID:t0Nu4cH6
>>658
DOSだと、gotoしか書けなかったね
660デフォルトの名無しさん
垢版 |
2022/02/16(水) 22:29:00.93ID:5G/Gik2e
>>658
以上なのか…
勘違いしそうだったわ気を付けよ…
2022/02/20(日) 02:07:07.44ID:UpXKcN5y
これなんでこうなるの?

echo abc 行末|findstr "^abc"
一致
(echo abc 行末)|findstr "^abc"
一致
echo abc 行末|findstr "行末$"
一致
(echo abc 行末)|findstr "行末$"
不一致
echo abc 行末| findstr /r /c:"^abc 行末$"
一致
(echo abc 行末)| findstr /r /c:"^abc 行末$"
不一致

元はこういう感じでハマっててやっと原因突き止めたんだけど理由が分からん
(for /L %%j in (1,1,%i%) do for /f "delims=/" %%a in ('echo "%%B_%%j%%"') do echo %%~a
)|findstr "^001a\.txt$" || echo ok
因みに /x オプションも駄目だった

('echo "%%B_%%j%%"') の部分も元は ("!B_%%j!") で単独では展開されてたのにパイプ繋ぐと展開されずハマってた
パイプ繋いだら遅延展開無効化されるん?
2022/02/20(日) 02:58:56.00ID:WlVIdNMt
(echo abc 行末)|findstr "行末 $"
は一致する
スペースが入るみたいだね
2022/02/20(日) 03:21:58.43ID:j5UZdGyh
>>662
それだと、空白は文字列のOR扱いで、"行末"と"$"のどっちかってことになる
が、まあそういうことだね
echo onの状態で実行してみりゃわかる
2022/02/20(日) 03:38:00.04ID:UpXKcN5y
ありがとう
(echo abc 行末)|findstr /r /c:"^abc 行末 $"
これで一致したから半角スペース入ってしまってるで間違いないみたい
2022/02/20(日) 03:42:58.59ID:j5UZdGyh
echo onでどう展開されるかみればどうしてそうなったのかわかるよ
2022/02/20(日) 05:28:05.67ID:UpXKcN5y
>>665
当然echo onでも確認してる
例えばこんなの
for %a in (a b c) do (echo %a|findstr "b$")
echo onでの表示では %a | とパイプとの間にスペース入るけどechoの末尾にゴミなんて付かないのよ

元のバッチやコマンドプロンプトの入力で以下のようにスペース入ってれば末尾にスペース入るけど上記のように詰めて書けば入らない
for %a in (a b c) do (echo %a |findstr "b$")
2022/02/20(日) 05:50:10.39ID:WlVIdNMt
>>663
ん?
空白区切りってダブルクォートを無視するの?
"行末(sp)(sp)$" で不一致になるから "行末(sp)$" に一致してるんだと思ったけど
2022/02/21(月) 23:05:19.75ID:J9914B5I
>>661
http://scripting.cocolog-nifty.com/blog/2007/03/call_echo_offse_6ea2.html
2022/02/25(金) 18:44:29.79ID:xURWaPVP
同じアプリのファイルを複数起動していて
コマンドラインが同じになっているとき
閉じたいものだけ閉じる方法ってありますか?
2022/02/25(金) 18:45:11.42ID:xURWaPVP
すいません、コマンドラインでなくプロセス名でした
2022/02/25(金) 20:06:56.37ID:zbdaU1gm
>>670
全く同じexeを複数起動してるんなら、プロセスID指定しかないけど
プロセスID見たってどっちが消したいexeなのか判別できる?
・リスト表示
tasklist /fi "IMAGENAME eq xxx.exe"
・削除
taskkill /pid 9999

パスが違うとかならパス情報を見るとかでプロセスIDを特定できる
wmic process list full format:csv|findstr "C:\foo\bar\baz.exe"
2022/02/25(金) 20:12:59.55ID:xURWaPVP
>>671
ありがとうございます
パスは違うので、その方法でやってます
助かりました
2022/02/25(金) 22:00:00.64ID:zbdaU1gm
>>672
もう出来たとは思うけど、上のだとfindstrも一緒に検出されるので出した責任として訂正しとく
for /f "tokens=6 delims=," %%i in ('wmic process list full /format:csv^|findstr "C:\bin\INET\Jane"^|findstr /v findstr') do set pid=%%i
tasklist /fi "pid eq %pid%"
2022/02/26(土) 12:26:06.99ID:2NOKllqN
>>673
ありがとうございます!
頂いたコードもとても参考になります
2022/02/26(土) 16:12:21.37ID:XLKEJl76
アクティブウィンドウ名がわかればいいんだね
vbaでできるらしいが
2022/03/10(木) 14:32:21.94ID:53waehJr
あるフォルダROOTの配下にフォルダ001〜フォルダ999があり、その中にはAAA,BBB,CCCという3ファイルがあるとします。
フォルダ001から999配下の全てのAAAをZZZにコピーするために
コマンドプロンプトでROOTフォルダで「for /r %i in (AAA) do copy %i %~pi\ZZZ」としたら求める結果になりましたが
これをバッチファイルに書くと構文エラーみたいなエラーがでます。

バッチファイルに書く場合どうしたらいいでしょうか。
2022/03/10(木) 15:13:37.97ID:jqA3dRQ6
魔空空間では
%i in (AAA) do copy % という名前の環境変数に展開されて消えてしまうのだ!
すべての%を%%に書き換えて対抗しよう!
なおコマンドラインでも環境変数が定義されていたら展開されてしまうぞ
こちらは対処不能だキヲツケロぉ
2022/03/10(木) 15:28:31.03ID:23a2YeOc
>>676
コピーするファイル数が膨大でなければバッチより2画面ファイラーの方が便利
ファイル検索して、反対側窓のフォルダーにコピー、移動する
dynaやafx
2022/03/10(木) 15:52:45.58ID:53waehJr
>>677
ありがとうございます。うまくいきました!
理由まで教えていただきありがとうございました。


>>678
ファイラ、懐かしいです。からこれ20年くらい前??FDとか使っていたことがありますが、、、、また使ってみようかと思います。
2022/03/12(土) 02:42:22.51ID:1/likOkq
家の光回線をIPv4 over IPv6に変えたら、「VPN931でしょ?」ERRORが出て書き込めなくなった

試行錯誤の後、携帯回線を無線子機経由、テザリングで繋いでおき
「ネットワークアダプター」のページからイーサネット(有線)を無効にして書き込み、
書き込みが終わったら再び光回線を有効にするようにした

しかし、つい携帯回線に切り換えたのを忘れたまま動画を観てしまうようなことが何度もあり、
1回で月無料分のギガを使い切ってしまい、有料になったり速度制限がかかったりして不便&勿体ないので
なんとかバッチ処理出来ないかと思い、
「有線LAN 無効化 バッチ」で検索して見つけた下記のページを参考にしてバッチファイルを作ってみた

https://mseeeen.msen.jp/switch-network-adapter-enabled-in-windows-with-batch-file/

----------

@ECHO OFF
netsh interface set interface "イーサネット" disabled
ECHO 一時的に光回線(有線・イーサネット)をOFFにしました

timeout 30
netsh interface set interface "イーサネット" enabled
if ERRORLEVEL = 1 PAUSE

----------
上記を拡張子batで保存し、参考URL同様にショートカット経由で管理者権限で起動するようにしました。
※メモ帳で編集したとき、デフォルトでUTF-8→ANSIにすることを知らずに文字化けして上手く動かなかったのはお約束。

これで、書き込む直前にショートカットで起動すれば
30秒だけ光回線が切れ、wifi=携帯回線で書き込める
その後は自動復帰するので繋ぎ忘れが無くなった

もしもっと良い方法があれば教えてくださいm(_ _)m
2022/03/12(土) 10:55:59.83ID:i3Z8TR4r
ネットワークの有効無効を変える必要はなくて、単にどっちがデフォルトゲートウェイになるかを制御するだけで十分だよ
スマホ側にプロキシたてて、専ブラ(だよね?)からそのプロキシを使うように設定すれば常時5chだけスマホ側に流すこともできる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況