拡張子が .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/
探検
【.cmd】 バッチファイルスクリプト %14 【.bat】
レス数が950を超えています。1000を超えると書き込みができなくなります。
2020/08/15(土) 07:00:26.64ID:f3kW5kCx
858デフォルトの名無しさん
2022/06/03(金) 14:54:57.72ID:oCwyAce/ ごめんあんまり読んでないんだけど、対話が求められて自動化できない?のならdoskeyのマクロは試した?
GUIでのダイアログだったら無理だけど
GUIでのダイアログだったら無理だけど
859デフォルトの名無しさん
2022/06/03(金) 16:20:46.55ID:gMGR7N6s そもそも対象のサービスが無効にできない (ようにみえる) 類のものなのではないか?
860デフォルトの名無しさん
2022/06/04(土) 00:01:31.51ID:qz14Jeu3 AWS の本にも、Windows サーバーの記述は、1% ぐらいしかない。
システムで、Windowsを使う香具師がいない
ファイル共有・Active Directory・タスクスケジューラ・Remote Desktop、
バッチ・コマンドプロンプト・PowerShell ぐらいが、簡単に紹介されているだけ
ほとんどがDocker を使う。DockerはLinuxの技術。
だから、Windows 10のWSL2 で、Linuxを使えるようにしている
システムで、Windowsを使う香具師がいない
ファイル共有・Active Directory・タスクスケジューラ・Remote Desktop、
バッチ・コマンドプロンプト・PowerShell ぐらいが、簡単に紹介されているだけ
ほとんどがDocker を使う。DockerはLinuxの技術。
だから、Windows 10のWSL2 で、Linuxを使えるようにしている
861デフォルトの名無しさん
2022/06/04(土) 03:03:41.49ID:nWFOJiT2 ソフト板のVLCスレで暴れてたガイジに似てるな
862デフォルトの名無しさん
2022/06/04(土) 03:16:47.38ID:4DyQyO7v SYSTEMアカウントで書き替えたら再起動が必要なんじゃないの?
863デフォルトの名無しさん
2022/06/04(土) 14:29:54.55ID:bgz5gZEc サービスの無効化なんか sc config でできるだろ
なんでわざわざレジストリを直接編集しなきゃいけないんだ?しかもSYSTEMで
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-config
そもそもDelivery Optimizationを無効化したい理由は何なんだ
なんでわざわざレジストリを直接編集しなきゃいけないんだ?しかもSYSTEMで
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-config
そもそもDelivery Optimizationを無効化したい理由は何なんだ
864デフォルトの名無しさん
2022/06/04(土) 15:01:48.75ID:M0jEQKIa ID:LtGyf47s みたいに要点を簡潔にまとめられず矢鱈とグダグダ書いちゃう人って何かそういう頭の障害でもあるの?
言葉遣いも変だし外国人なのかな
言葉遣いも変だし外国人なのかな
865デフォルトの名無しさん
2022/06/05(日) 07:44:59.76ID:7J0TRviH 簡単なことを難しく言うやつを世間一般ではhorse and deerという
866デフォルトの名無しさん
2022/06/05(日) 12:38:26.56ID:Z2t62Jo8 わざとか?
867デフォルトの名無しさん
2022/07/09(土) 18:11:33.95ID:qkG/5q2Z 以下のようにUNIXライクにFILESをパイプしてfindstrコマンドに渡すことは不可能でしょうか?
@echo off
setlocal enabledelayedexpansion
set LF=^
for /f "tokens=* delims=" %%x in ('dir /w') do set FILES=!FILES!%%x!LF!
@rem ↓FILESをパイプにしてfindstrコマンドの入力にしたい
for /f "tokens=* delims=" %%x in ('echo !FILES! ^| findstr "Siki"') do set TEST=%%x
pause
endlocal
exit /B 0
@echo off
setlocal enabledelayedexpansion
set LF=^
for /f "tokens=* delims=" %%x in ('dir /w') do set FILES=!FILES!%%x!LF!
@rem ↓FILESをパイプにしてfindstrコマンドの入力にしたい
for /f "tokens=* delims=" %%x in ('echo !FILES! ^| findstr "Siki"') do set TEST=%%x
pause
endlocal
exit /B 0
868デフォルトの名無しさん
2022/07/09(土) 18:16:36.89ID:GjOGWrlu 不可能です
869デフォルトの名無しさん
2022/07/09(土) 18:31:41.95ID:qkG/5q2Z 不可能とのことなのでファイルに一旦出力することにしました
@echo off
setlocal enabledelayedexpansion
set LF=^
for /f "tokens=* delims=" %%x in ('dir') do set FILES=!FILES!%%x!LF!
echo !FILES! > aaa.txt
for /f "tokens=* delims=" %%x in ('type aaa.txt ^| findstr "Siki"') do set TEST=%%x
echo %TEST%
pause
endlocal
exit /B 0
@echo off
setlocal enabledelayedexpansion
set LF=^
for /f "tokens=* delims=" %%x in ('dir') do set FILES=!FILES!%%x!LF!
echo !FILES! > aaa.txt
for /f "tokens=* delims=" %%x in ('type aaa.txt ^| findstr "Siki"') do set TEST=%%x
echo %TEST%
pause
endlocal
exit /B 0
870デフォルトの名無しさん
2022/07/09(土) 18:32:57.07ID:qkG/5q2Z でもこの例ならdir | findstrでいいですね…
871デフォルトの名無しさん
2022/07/09(土) 18:38:08.89ID:qkG/5q2Z 本当にやりたかったことは
curlコマンドで某APIでJSONデータ取得
JSONデータをjqコマンドで値取得
取得した値からfindstrコマンドで余計な行を除去
としたかったのですが、某APIが叩ける回数が限られているため
JSONデータを取得する回数を抑えるために一旦配列として保持したかったのです
curlコマンドで某APIでJSONデータ取得
JSONデータをjqコマンドで値取得
取得した値からfindstrコマンドで余計な行を除去
としたかったのですが、某APIが叩ける回数が限られているため
JSONデータを取得する回数を抑えるために一旦配列として保持したかったのです
872デフォルトの名無しさん
2022/07/09(土) 18:41:27.79ID:LLXk/I9Y >>871
真面目な話そこまでやりたいならPowerShellとか使った方が楽だと思うぞ...
真面目な話そこまでやりたいならPowerShellとか使った方が楽だと思うぞ...
873デフォルトの名無しさん
2022/07/09(土) 18:49:52.57ID:qkG/5q2Z >>872
実はやりたいことがこれ以上の事は無いのでバッチレベルで可能だろうと思ったのですが
配列?の使い方がよく分からず質問しました
ひとまず一時ファイル出力して使いまわす形にしようと思います
ちなみに某APIとはスマートリモコンNature Remoの事です
実はやりたいことがこれ以上の事は無いのでバッチレベルで可能だろうと思ったのですが
配列?の使い方がよく分からず質問しました
ひとまず一時ファイル出力して使いまわす形にしようと思います
ちなみに某APIとはスマートリモコンNature Remoの事です
874デフォルトの名無しさん
2022/07/09(土) 18:54:25.52ID:NvGIH30g powershellに一票
乗り換えを先延ばしにすればするほど損が積み上がる
乗り換えを先延ばしにすればするほど損が積み上がる
875デフォルトの名無しさん
2022/07/09(土) 18:59:09.92ID:NvGIH30g 判断のポイントはクッソ不便なbatを捨ててだいぶマシなpsに以降する時期をいつまで先延ばしにするかだけだと思う
876デフォルトの名無しさん
2022/07/09(土) 18:59:46.81ID:qkG/5q2Z 時間ある時に勉強してみたいと思います>PowerShell
ググったらWin7時代から標準であってOSSになっててLinuxでも実行可能とか知りませんでした
割と長く銀行系にいるので頭が古いんでしょうね…
ググったらWin7時代から標準であってOSSになっててLinuxでも実行可能とか知りませんでした
割と長く銀行系にいるので頭が古いんでしょうね…
877デフォルトの名無しさん
2022/07/09(土) 20:00:42.46ID:al4zTytR Ruby では、外部コマンドのcurl を呼び出さなくてもできる
require 'open-uri'
require 'json'
url = 'http://〜' # URL
uri = URI.parse( url )
p obj = JSON.parse( uri.read ) # response body
例えば、外部コマンドのcurlを呼び出して、スクレイピングするなら、
require 'nokogiri'
command = `curl #{ url }`
html = `#{ command }`
doc = Nokogiri::HTML( html )
require 'open-uri'
require 'json'
url = 'http://〜' # URL
uri = URI.parse( url )
p obj = JSON.parse( uri.read ) # response body
例えば、外部コマンドのcurlを呼び出して、スクレイピングするなら、
require 'nokogiri'
command = `curl #{ url }`
html = `#{ command }`
doc = Nokogiri::HTML( html )
878877
2022/07/09(土) 20:05:46.69ID:al4zTytR879デフォルトの名無しさん
2022/07/09(土) 21:46:59.61ID:3uODqf9z setlocal enabledelayedexpansion
set A0=
set i=0
for /f "delims=" %%a in ('dir /b^|findstr "Siki"') do set "A!i!=%%a" &set /a i+=1
if not defined A0 echo Not found.&pause&exit /b
set /a i-=1
for /L %%i in (0,1,%i%) do echo A%%i = "!A%%i!"
pause
set A0=
set i=0
for /f "delims=" %%a in ('dir /b^|findstr "Siki"') do set "A!i!=%%a" &set /a i+=1
if not defined A0 echo Not found.&pause&exit /b
set /a i-=1
for /L %%i in (0,1,%i%) do echo A%%i = "!A%%i!"
pause
880デフォルトの名無しさん
2022/07/21(木) 23:21:25.81ID:3neYOO2a set /a の結果とか与えた数値を16進表記に変換するコマンドか何か良い方法があったら教えて欲しいです
881デフォルトの名無しさん
2022/07/22(金) 01:02:07.69ID:bfkyQVXg >>880
bc.exe
bc.exe
882デフォルトの名無しさん
2022/07/22(金) 01:14:08.48ID:bfkyQVXg883デフォルトの名無しさん
2022/07/22(金) 01:32:20.92ID:bfkyQVXg @echo off
set /a a=123*456
echo a=%a%; obase=16; a | bc
pause
set /a a=123*456
echo a=%a%; obase=16; a | bc
pause
884デフォルトの名無しさん
2022/07/22(金) 01:42:01.70ID:bfkyQVXg echo obase=16; %a% | bc
でもいい
でもいい
885デフォルトの名無しさん
2022/07/22(金) 07:47:11.80ID:bfkyQVXg set /a なら値は高々32ビットだよね
bc は不要かも
cmd /c exit /b %a%
echo %=ExitCode%
bc は不要かも
cmd /c exit /b %a%
echo %=ExitCode%
886デフォルトの名無しさん
2022/07/22(金) 10:43:07.05ID:LvB8fWz+ ダントツ遅いが
powershell -c "'{0:x}' -f 255"
powershell -c "'{0:x}' -f 255"
887デフォルトの名無しさん
2022/07/22(金) 10:45:53.90ID:CXcliooi obaseとかbcとか知らないことがいっぱい出ているな
888デフォルトの名無しさん
2022/07/22(金) 11:33:23.34ID:RIaxNIcl 888
889デフォルトの名無しさん
2022/07/22(金) 13:09:13.02ID:ZzUgbaoD わざわざバッチでやるってことを理解してないアホがいる
pythonでも入れてろゴミ
pythonでも入れてろゴミ
890デフォルトの名無しさん
2022/07/22(金) 13:12:16.30ID:P7NcnZ58 batだけで計算しても理解はされないだろうよ
891デフォルトの名無しさん
2022/07/22(金) 15:55:27.20ID:bfkyQVXg892デフォルトの名無しさん
2022/07/22(金) 18:11:09.86ID:5WL5LWhS set /a n=1194684
if "%n%"=="0" set "r=0" &goto :END
setlocal enabledelayedexpansion
set HEX=0123456789abcdef
set /a "a=n&0xf, b=n>> 4&0xf, c=n>> 8&0xf, d=n>> 12&0xf, e=n>> 16&0xf, f=n>> 20&0xf, g=n>> 24&0xf, h=n>> 28&0xf"
set r=!HEX:~%h%,1!!HEX:~%g%,1!!HEX:~%f%,1!!HEX:~%e%,1!!HEX:~%d%,1!!HEX:~%c%,1!!HEX:~%b%,1!!HEX:~%a%,1!
:DEL_PADZERO
if %r:~0,1% equ 0 set "r=%r:~1%" &goto :DEL_PADZERO
endlocal &set r=%r%
:END
echo 0x%r%
pause
INT32の範囲で良いならバッチではこういうバカっぽいのが結局1番速いんじゃね?
レスアンカーが多過ぎと怒られたから右シフトの右にsp入れてる
if "%n%"=="0" set "r=0" &goto :END
setlocal enabledelayedexpansion
set HEX=0123456789abcdef
set /a "a=n&0xf, b=n>> 4&0xf, c=n>> 8&0xf, d=n>> 12&0xf, e=n>> 16&0xf, f=n>> 20&0xf, g=n>> 24&0xf, h=n>> 28&0xf"
set r=!HEX:~%h%,1!!HEX:~%g%,1!!HEX:~%f%,1!!HEX:~%e%,1!!HEX:~%d%,1!!HEX:~%c%,1!!HEX:~%b%,1!!HEX:~%a%,1!
:DEL_PADZERO
if %r:~0,1% equ 0 set "r=%r:~1%" &goto :DEL_PADZERO
endlocal &set r=%r%
:END
echo 0x%r%
pause
INT32の範囲で良いならバッチではこういうバカっぽいのが結局1番速いんじゃね?
レスアンカーが多過ぎと怒られたから右シフトの右にsp入れてる
893デフォルトの名無しさん
2022/07/22(金) 19:27:14.02ID:bfkyQVXg 話変わるけど右シフトのすぐ右の数字は危険だよね
アンカーに解釈されるので2chで数値が変わる場合があるんだよ
アンカーに解釈されるので2chで数値が変わる場合があるんだよ
894デフォルトの名無しさん
2022/07/22(金) 22:42:20.46ID:AXmcGRlR >>885,886,892
ありがとうございました
powershellは2回目以降だとそんなでも無いですが初回はどうしても遅くなるみたいですね
>>881-884
readline5.dll というのを落としてbcと同じ場所に置くことで動きました
日本語ヘルプ(https://linuxjm.osdn.jp/html/GNU_bc/man1/bc.1.html)が凄く助かりました!
echo sqrt(2) | bc -l
echo scale=10; 4*a(1) | bc -l
とかバッチに無い計算が出来て感動。面白かったのですがパイプで式を渡す時""で括れないので^&|などのメタ文字を
echo 8^^^^2 | bc
echo 8^^^&^^^&2 | bc
とか^エスケープしなければならないのが使いにくいのと
scaleで小数点以下桁数指定出来るのは良いのですが最下桁が四捨五入でも切り捨て切り上げでも無く変な値になったりとかが
惜しい感じですね
エスケープはファイルにして読ませれば良いし最下桁は自力で切り捨てれば良いだけですのでいずれ何かで役立つかも
ありがとうございました
ありがとうございました
powershellは2回目以降だとそんなでも無いですが初回はどうしても遅くなるみたいですね
>>881-884
readline5.dll というのを落としてbcと同じ場所に置くことで動きました
日本語ヘルプ(https://linuxjm.osdn.jp/html/GNU_bc/man1/bc.1.html)が凄く助かりました!
echo sqrt(2) | bc -l
echo scale=10; 4*a(1) | bc -l
とかバッチに無い計算が出来て感動。面白かったのですがパイプで式を渡す時""で括れないので^&|などのメタ文字を
echo 8^^^^2 | bc
echo 8^^^&^^^&2 | bc
とか^エスケープしなければならないのが使いにくいのと
scaleで小数点以下桁数指定出来るのは良いのですが最下桁が四捨五入でも切り捨て切り上げでも無く変な値になったりとかが
惜しい感じですね
エスケープはファイルにして読ませれば良いし最下桁は自力で切り捨てれば良いだけですのでいずれ何かで役立つかも
ありがとうございました
895デフォルトの名無しさん
2022/07/23(土) 09:18:41.04ID:WQSCizyX エスケープは入力要求メッセージ(末尾改行無し)を使って回避する方法がある。
<nul set /p "=8^2" | 〜
※もし行(末尾に改行)が必要なら
<nul set /p "=8^2" | more | 〜
<nul set /p "=8^2" | 〜
※もし行(末尾に改行)が必要なら
<nul set /p "=8^2" | more | 〜
896デフォルトの名無しさん
2022/07/23(土) 10:55:51.20ID:obFo1BRC >>894
set "a=8^^2" & echo %%a%% | bc
set "a=8^^2" & echo %%a%% | bc
897デフォルトの名無しさん
2022/07/24(日) 07:30:05.93ID:oa53tMxs >>895
目からウロコなTips
set /p <nul="8^2" | more | bc
で行けました
moreの代わりにfindやfindstrなどパイプで受け取って改行付加して吐けるコマンドなら使えるっぽい。他には以下とか
(set /p <nul="8^2"&echo=) | bc
set /p の改行無しecho の用法は知っていたんだけどこの局面で使える事に思い付けなかったのが悔しい
目からウロコなTips
set /p <nul="8^2" | more | bc
で行けました
moreの代わりにfindやfindstrなどパイプで受け取って改行付加して吐けるコマンドなら使えるっぽい。他には以下とか
(set /p <nul="8^2"&echo=) | bc
set /p の改行無しecho の用法は知っていたんだけどこの局面で使える事に思い付けなかったのが悔しい
898デフォルトの名無しさん
2022/08/13(土) 20:26:36.34ID:hShn1n51 コマンドからリモートホスト名とそのIPを取得出来ますか?
899デフォルトの名無しさん
2022/08/14(日) 12:49:48.16ID:WvMv+Qf8 nslookup … DNSで調べる
ping … hostsとか諸々込みで実際にどう名前解決されるか
nbtstat … NETBIOS名なら
netstat … 通信で実際に使ってる自端末と相手のIPアドレス
ipconfig … 自端末の諸々
netsh … 自端末の諸々
ping … hostsとか諸々込みで実際にどう名前解決されるか
nbtstat … NETBIOS名なら
netstat … 通信で実際に使ってる自端末と相手のIPアドレス
ipconfig … 自端末の諸々
netsh … 自端末の諸々
900898
2022/08/14(日) 18:43:42.99ID:0tA/3KXA 各コマンドのヘルプ見たり試してみたけど良く分からなかった
WAN側IPとそのホスト名をコマンドから知れないか?を知りたかったんだけど無理そうですか?
nslookupで引数にIP指定すればホスト名は取れるんだけどIPをどうやって知ったら良いものか
WAN側IPとそのホスト名をコマンドから知れないか?を知りたかったんだけど無理そうですか?
nslookupで引数にIP指定すればホスト名は取れるんだけどIPをどうやって知ったら良いものか
901デフォルトの名無しさん
2022/08/14(日) 19:35:36.51ID:R62l2k+7902デフォルトの名無しさん
2022/08/14(日) 19:37:41.23ID:WvMv+Qf8 インターネット上の相手側から見える、自WANのWAN側IPアドレスって事?
例えば自端末がオンラインゲームのホストになる際に相手に教えるIPアドレス。
WAN側機器のWeb管理コンソールとか、
「診断くん」等のWebサービスをスクレイピングすればいいよ。
探せばAPIサービスなんかもあるかもね。
※Webサービス使うときは利用規約をよく読んでね。
既にIPアドレス知る方法を1つは知ってるようだから、その方法でもいいよ。
例えば自端末がオンラインゲームのホストになる際に相手に教えるIPアドレス。
WAN側機器のWeb管理コンソールとか、
「診断くん」等のWebサービスをスクレイピングすればいいよ。
探せばAPIサービスなんかもあるかもね。
※Webサービス使うときは利用規約をよく読んでね。
既にIPアドレス知る方法を1つは知ってるようだから、その方法でもいいよ。
903デフォルトの名無しさん
2022/08/14(日) 19:49:12.00ID:3lHTKQ6A ホスト名とは何かという定義が必要だな
WEBサーバーなら複数のホスト名(URLのドメインパート)で同じ(時には複数の)サーバーに接続する
https://5ch.net/でアクセスされるサーバーなら 5ch.net がホスト名だが
同じサーバーが他のドメインもホストしているなら、他のホスト名も持っていることになる
あるサーバーが、接続され得るすべてのホスト名を知りたいと思っても、それは世界中のDNSの勝手なの、
漏れなく調べるためには、世界中のすべてのドメインのレコードを調べる必要があるので、実際には無理。
DNSの逆引きは、それを設定している人が必要な分を登録しているだけなので、すべてとは言い切れない。
WEBサーバーなら複数のホスト名(URLのドメインパート)で同じ(時には複数の)サーバーに接続する
https://5ch.net/でアクセスされるサーバーなら 5ch.net がホスト名だが
同じサーバーが他のドメインもホストしているなら、他のホスト名も持っていることになる
あるサーバーが、接続され得るすべてのホスト名を知りたいと思っても、それは世界中のDNSの勝手なの、
漏れなく調べるためには、世界中のすべてのドメインのレコードを調べる必要があるので、実際には無理。
DNSの逆引きは、それを設定している人が必要な分を登録しているだけなので、すべてとは言い切れない。
904デフォルトの名無しさん
2022/08/14(日) 20:04:12.33ID:zcJ+8Zbe905デフォルトの名無しさん
2022/08/14(日) 20:07:44.49ID:0tA/3KXA そうです。自分のインターネット側のIP
ルーター管理画面のWAN側IPです
これをコマンド(LAN側のマシン)から調べる方法が無いのかなって
> Webサービスをスクレイピング
これってコマンドでやる方法あります?
NECのなんですけどルーター管理画面から取れるのかな?
ちょっとググったりしてみましたけど簡単なバッチくらいしか使えない自分にはハードル高いかも
ルーター管理画面のWAN側IPです
これをコマンド(LAN側のマシン)から調べる方法が無いのかなって
> Webサービスをスクレイピング
これってコマンドでやる方法あります?
NECのなんですけどルーター管理画面から取れるのかな?
ちょっとググったりしてみましたけど簡単なバッチくらいしか使えない自分にはハードル高いかも
906デフォルトの名無しさん
2022/08/14(日) 22:44:27.94ID:zcJ+8Zbe >>905
curl.exeを持ってこないといけないけど
診断君のスクレイピングだと
@echo off
curl.exe http://taruo.net/e/ -s -o "res.tmp"
for /f "tokens=*" %%i in ('findstr "<TD><tt>" res.tmp') do set host=%%i&goto :get_ip
:get_ip
for /f "skip=1 tokens=*" %%i in ('findstr "<TD><tt>" res.tmp') do set ip=%%i&goto out
goto :eof
:out
for /f "delims=<> tokens=3" %%i in ("%host%") do set host=%%i
for /f "delims=<> tokens=3" %%i in ("%ip%") do set ip=%%i
set ip=%ip:~0,-2%
echo HOST NAME = %host%
echo IP ADDRESS = %ip%
curl.exeを持ってこないといけないけど
診断君のスクレイピングだと
@echo off
curl.exe http://taruo.net/e/ -s -o "res.tmp"
for /f "tokens=*" %%i in ('findstr "<TD><tt>" res.tmp') do set host=%%i&goto :get_ip
:get_ip
for /f "skip=1 tokens=*" %%i in ('findstr "<TD><tt>" res.tmp') do set ip=%%i&goto out
goto :eof
:out
for /f "delims=<> tokens=3" %%i in ("%host%") do set host=%%i
for /f "delims=<> tokens=3" %%i in ("%ip%") do set ip=%%i
set ip=%ip:~0,-2%
echo HOST NAME = %host%
echo IP ADDRESS = %ip%
907デフォルトの名無しさん
2022/08/14(日) 22:55:35.81ID:zcJ+8Zbe >>905
何も要らないが、powershellを使わないといけない
(なおwebアクセスで診断君以外ではtls1.2を有効にしないとダメなことが多い)
$res = wget http://taruo.net/e/
if ($res.content -match "REMOTE_HOST<\/TD>\n<TD><tt>(.+)<\/tt>[\s\S]+?REMOTE_ADDR<\/TD>\n<TD><tt>([.\d]+)" ) {
$host_name = $matches[1]
$ip_address = $matches[2]
}
$host_name
$ip_address
何も要らないが、powershellを使わないといけない
(なおwebアクセスで診断君以外ではtls1.2を有効にしないとダメなことが多い)
$res = wget http://taruo.net/e/
if ($res.content -match "REMOTE_HOST<\/TD>\n<TD><tt>(.+)<\/tt>[\s\S]+?REMOTE_ADDR<\/TD>\n<TD><tt>([.\d]+)" ) {
$host_name = $matches[1]
$ip_address = $matches[2]
}
$host_name
$ip_address
908デフォルトの名無しさん
2022/08/15(月) 00:00:17.27ID:xwOg3pSS909デフォルトの名無しさん
2022/08/15(月) 02:02:49.45ID:xwOg3pSS お陰様でコマンドから確認出来るようになりました。この度は本当にありがとうございました
for /f "skip=301 tokens=4 delims=< " %a in ('curl http://admin:admin@192.168.0.1/index.cgi/info_main_set -s') do (for /f "skip=3 tokens=2" %b in ('nslookup %a') do @echo %b)&pause
pauseからCtrl+Cで止めているのですが、breakはバッチでgotoしないと無理ですよね?
for /f "skip=301 tokens=4 delims=< " %a in ('curl http://admin:admin@192.168.0.1/index.cgi/info_main_set -s') do (for /f "skip=3 tokens=2" %b in ('nslookup %a') do @echo %b)&pause
pauseからCtrl+Cで止めているのですが、breakはバッチでgotoしないと無理ですよね?
910デフォルトの名無しさん
2022/08/15(月) 08:55:40.32ID:3ogXO4Oz call :ラベル名 で処理を呼び出して exit /b を break として使うこともできるよ
911デフォルトの名無しさん
2022/08/15(月) 21:05:50.46ID:Z47lvB2J >>909
breakしたい、というか302行目だけ欲しいってことかな。
findstrで行番号振って、さらにfindstrで目的の行だけ取るって方法があるよ。
for /f "tokens=4 delims=< " %a in ('curl 〜 -s^| findstr /rn /c:"^"^| findstr /r /c:"^302:"') do
breakしたい、というか302行目だけ欲しいってことかな。
findstrで行番号振って、さらにfindstrで目的の行だけ取るって方法があるよ。
for /f "tokens=4 delims=< " %a in ('curl 〜 -s^| findstr /rn /c:"^"^| findstr /r /c:"^302:"') do
912デフォルトの名無しさん
2022/08/16(火) 15:31:14.62ID:RClv+rPW >>911
for /f "tokens=5 delims=< " %a in ('curl http://admin:admin@192.168.0.1/index.cgi/info_main_set -s ^| findstr /n "^" ^| findstr "^302:" ') do for /f "tokens=2" %b in ('nslookup %a ^| findstr "名前 Name"') do echo %a : %b
ありがとうございます。Ctrl+C する必要無くなりました
skip=301付けたままのうっかりミスのせいで上手く動かない原因を文字コードがEUC-JPだからfindstrが機能しないのだと勘違いし文字コードを変換する外部ツールnkf.exe入れたり明後日のことしてハマってました
目的が何行目か決まっている時は最良の方法かもですね
行番号列挙する必要がありますが複数行でも使えますし
for /f "tokens=5 delims=< " %a in ('curl http://admin:admin@192.168.0.1/index.cgi/info_main_set -s ^| findstr /n "^" ^| findstr "^302:" ') do for /f "tokens=2" %b in ('nslookup %a ^| findstr "名前 Name"') do echo %a : %b
ありがとうございます。Ctrl+C する必要無くなりました
skip=301付けたままのうっかりミスのせいで上手く動かない原因を文字コードがEUC-JPだからfindstrが機能しないのだと勘違いし文字コードを変換する外部ツールnkf.exe入れたり明後日のことしてハマってました
目的が何行目か決まっている時は最良の方法かもですね
行番号列挙する必要がありますが複数行でも使えますし
913デフォルトの名無しさん
2022/08/27(土) 21:14:13.99ID:S8eeCUJc 文字列の入った変数から、その文字数を高速に取得したいんですが
なにか良い方法はありますか? 上限は8189です
なにか良い方法はありますか? 上限は8189です
914デフォルトの名無しさん
2022/08/27(土) 22:59:03.27ID:OpG+r6e/ if "%s:~4095,1%"=="" (4095文字より少ない) else 4095文字よりも多い
:4095未満
if "%s:~2048,1%"=="" (2048より少) else 2049以上4095未満
:4095以上
if "%s:~7042,1%"=="" (4095以上7042未満) else 7042以上
こんな感じでifを入れ子にでもサブルーチンにでもしてある程度どの範囲にあるか詰めてからカウントすれば?
8189文字で正常に動くかは忘れた分からん
カウントは 遅延展開で if "!s:~%N%,1!"=="" って感じで Nを+1してループさせればいい
:4095未満
if "%s:~2048,1%"=="" (2048より少) else 2049以上4095未満
:4095以上
if "%s:~7042,1%"=="" (4095以上7042未満) else 7042以上
こんな感じでifを入れ子にでもサブルーチンにでもしてある程度どの範囲にあるか詰めてからカウントすれば?
8189文字で正常に動くかは忘れた分からん
カウントは 遅延展開で if "!s:~%N%,1!"=="" って感じで Nを+1してループさせればいい
915デフォルトの名無しさん
2022/08/27(土) 23:07:32.10ID:S8eeCUJc916デフォルトの名無しさん
2022/08/27(土) 23:22:13.27ID:VY6ZsFbR917デフォルトの名無しさん
2022/08/27(土) 23:24:42.08ID:OpG+r6e/ setだかcmdの構文解析だかの引数の文字数上限が8191 (0x1fff) とかで "s=" で2文字必要だから8189とかだったかな
変数名が単一文字で無かったり "" で囲ったりしても使用可能文字数減るはずだし
forやifの中で展開出来なかったりしたと思うから
限界探るなら一見使えているように見えてもちゃんと確認しといた方が良いよ
変数名が単一文字で無かったり "" で囲ったりしても使用可能文字数減るはずだし
forやifの中で展開出来なかったりしたと思うから
限界探るなら一見使えているように見えてもちゃんと確認しといた方が良いよ
918デフォルトの名無しさん
2022/08/27(土) 23:49:06.77ID:OpG+r6e/ 4096 -> 2048 -> 1024 -> 512 -> 256 -> 128 -> 64 -> 32
if で8回くらい判定させればそれなりに速く出来ると思う
256分割。。
オフセットも変数にしてループするとか
512で真だったら /2 偽だったら *1.5 (set /a N=N/2+N) てな感じで
if で8回くらい判定させればそれなりに速く出来ると思う
256分割。。
オフセットも変数にしてループするとか
512で真だったら /2 偽だったら *1.5 (set /a N=N/2+N) てな感じで
919デフォルトの名無しさん
2022/08/28(日) 00:01:54.99ID:hYNZdTyV >>913
set s=abcdefg
setlocal enabledelayedexpansion
set n=0 & if defined s (set /a "n=1<<13"
for /L %%i in (12,-1,0) do (set /a "a=n-(1<<%%i)"
for %%j in (!a!) do if "!s:~%%j,1!"=="" set n=!a!))
echo !n!
set s=abcdefg
setlocal enabledelayedexpansion
set n=0 & if defined s (set /a "n=1<<13"
for /L %%i in (12,-1,0) do (set /a "a=n-(1<<%%i)"
for %%j in (!a!) do if "!s:~%%j,1!"=="" set n=!a!))
echo !n!
920デフォルトの名無しさん
2022/08/28(日) 00:18:39.63ID:8DkHE3ui なるほどなー
set n=!a! や set /a "a=n-(1<<%%i)"
これがパッと出て来るなんて頭良いですね
set n=!a! や set /a "a=n-(1<<%%i)"
これがパッと出て来るなんて頭良いですね
921デフォルトの名無しさん
2022/08/28(日) 10:26:23.19ID:+w1wfoOM たとえばファイルサイズを
%~z1 でなくfilename.sizeみたいなわかりやすい書き方に
する方法はないですか
%~z1 でなくfilename.sizeみたいなわかりやすい書き方に
する方法はないですか
922デフォルトの名無しさん
2022/08/28(日) 10:36:37.74ID:FcIb+N5t バッチファイルにわかりやすい書き方なんてものがあったら、俺の髪はもっと残ってた
923デフォルトの名無しさん
2022/08/28(日) 11:08:55.91ID:CaouF0NP バッチの基本的な考え方としては基本コマンドにこだわらず外部コマンドを呼ぶことだと思う
セキュリティ的に外部コマンドは入れられないといった制約があるならこのレガシーツールを使い続けるのは無理がある
現実解のひとつはPowershellのワンライナーを呼ぶことで
そうやって少しずつ学んでるうちに段階的にbatを卒業することだと思う
セキュリティ的に外部コマンドは入れられないといった制約があるならこのレガシーツールを使い続けるのは無理がある
現実解のひとつはPowershellのワンライナーを呼ぶことで
そうやって少しずつ学んでるうちに段階的にbatを卒業することだと思う
924デフォルトの名無しさん
2022/08/28(日) 11:23:21.78ID:+w1wfoOM >>923
ありがとうございます
やはり無理なのか、aliasesなどを使った名案があればいいのに
Powershellはコマンド名が長すぎて使う気になれない
外部コマンドやツ-ルを使えば簡単でもセキュリティ的に問題があるかわからないので使いたくない場合がある
ありがとうございます
やはり無理なのか、aliasesなどを使った名案があればいいのに
Powershellはコマンド名が長すぎて使う気になれない
外部コマンドやツ-ルを使えば簡単でもセキュリティ的に問題があるかわからないので使いたくない場合がある
925デフォルトの名無しさん
2022/08/28(日) 11:41:21.61ID:3aiLuiYL エイリアスもどきはあるよ
マクロファイルに定義を書いておいて一斉に登録することもできる
doskey /?
あとpowershellにはエイリアスがある
マクロファイルに定義を書いておいて一斉に登録することもできる
doskey /?
あとpowershellにはエイリアスがある
926デフォルトの名無しさん
2022/08/28(日) 15:23:54.30ID:CaouF0NP Powershellは単に慣れと食わず嫌いの問題やね
cmdも無数の気持ち悪いルールがあるし現にたかが文字を数えるだけで呪文めいたコードが必要になってる
何にせよ人間慣れれば気にならなくなるもの
さすがにあと5年で定年だからプログラミングしなくなりますなんて老人には勧めんけどね
コマンドの長さとエイリアスについては
俺はGet-ChildItemはダルいからdirやlsと書くし
ForEach-Objectの代わりに%と書き続けてる
cmdも無数の気持ち悪いルールがあるし現にたかが文字を数えるだけで呪文めいたコードが必要になってる
何にせよ人間慣れれば気にならなくなるもの
さすがにあと5年で定年だからプログラミングしなくなりますなんて老人には勧めんけどね
コマンドの長さとエイリアスについては
俺はGet-ChildItemはダルいからdirやlsと書くし
ForEach-Objectの代わりに%と書き続けてる
927デフォルトの名無しさん
2022/08/28(日) 15:36:49.18ID:3aiLuiYL powershellの弱点は初期起動に時間が掛かるという点だね
通常的にpowershellを使ってるならいいけど、
それこそ特定の処理だけたまに使うという人にはそこがネックになる
そういう場合はもうオブソリュートだがWSHがいい仕事をする
通常的にpowershellを使ってるならいいけど、
それこそ特定の処理だけたまに使うという人にはそこがネックになる
そういう場合はもうオブソリュートだがWSHがいい仕事をする
928デフォルトの名無しさん
2022/08/28(日) 17:28:34.01ID:hYNZdTyV >>921 わかりやすい変数に代入すれば?
929デフォルトの名無しさん
2022/08/28(日) 19:39:30.66ID:TtkhtxSa 底辺ドカタがアイデンティティ護ろうと必死だけど必死に見られたくない虚栄心とのせめぎ合いが垣間見えてワラw
930デフォルトの名無しさん
2022/08/28(日) 19:49:06.93ID:hYNZdTyV エイリアス無いし
batを使いたいなら騙しながらやるしかないだろ
batを使いたいなら騙しながらやるしかないだろ
931デフォルトの名無しさん
2022/08/29(月) 03:05:26.48ID:Rm8LZ6WJ >>924
ほんとはvbsが起動も速度も速い上にバッチやps程変な癖もなくていわゆるVB脳程度の知識でそこそこのものが手軽に書けるんだよ
ただこの板にあるスレが一言で言えば気持ち悪いから誰も触れないのよ
よくvbsはオワコンて言われるけど少なくとも2029年までは標準で使えるから安心していいよ
ほんとはvbsが起動も速度も速い上にバッチやps程変な癖もなくていわゆるVB脳程度の知識でそこそこのものが手軽に書けるんだよ
ただこの板にあるスレが一言で言えば気持ち悪いから誰も触れないのよ
よくvbsはオワコンて言われるけど少なくとも2029年までは標準で使えるから安心していいよ
932デフォルトの名無しさん
2022/08/29(月) 04:54:03.93ID:DAjO1ugz @echo off &setlocal
call :LEN
echo %errorlevel%
call :LEN a
echo %errorlevel%
call :LEN ab
echo %errorlevel%
call :LEN abcde
echo %errorlevel%
call :LEN "abcdefg"
echo %errorlevel%
pause &exit /b
:LEN
setlocal enabledelayedexpansion
set "s=%~1"
if not defined s goto :EOF
set /a "n=8192" &rem "1<<13"
for /L %%i in (12,-1,0) do set /a "a=n-(1<<%%i)" &echo n:!n!, a:!a! &for %%j in (!a!) do if "!s:~%%j,1!"=="" set n=!a!
exit /b %n%
>>919 さんのこれ凄いね
関数っぽく使えるようサブルーチン化と変数確認のechoさせてみたけど
バッチでの文字数カウントとしては最強じゃね?
call :LEN
echo %errorlevel%
call :LEN a
echo %errorlevel%
call :LEN ab
echo %errorlevel%
call :LEN abcde
echo %errorlevel%
call :LEN "abcdefg"
echo %errorlevel%
pause &exit /b
:LEN
setlocal enabledelayedexpansion
set "s=%~1"
if not defined s goto :EOF
set /a "n=8192" &rem "1<<13"
for /L %%i in (12,-1,0) do set /a "a=n-(1<<%%i)" &echo n:!n!, a:!a! &for %%j in (!a!) do if "!s:~%%j,1!"=="" set n=!a!
exit /b %n%
>>919 さんのこれ凄いね
関数っぽく使えるようサブルーチン化と変数確認のechoさせてみたけど
バッチでの文字数カウントとしては最強じゃね?
933デフォルトの名無しさん
2022/08/29(月) 07:10:34.83ID:ZvttE7Ov 変数に代入出来るのが8000でも
set/pで入力出来るのは1000ほどしかないな
文字数が多いと色々と落とし穴ありそう
set/pで入力出来るのは1000ほどしかないな
文字数が多いと色々と落とし穴ありそう
934デフォルトの名無しさん
2022/08/30(火) 16:27:10.19ID:2X2Lv8NW >>932 更に分かりやすくしてみた
for /L %%i in (12,-1,0) do set /a "b=1<<%%i, a=n-b" &set /p<nul="a:[!a!] = n:[!n!] - (1<<%%^i:[%%i]):[!b!] " &for %%j in (!a!) do if "!s:~%%j,1!"=="" (set "n=!a!" &echo 文字:無い) else echo 文字:在る
for /L %%i in (12,-1,0) do set /a "b=1<<%%i, a=n-b" &set /p<nul="a:[!a!] = n:[!n!] - (1<<%%^i:[%%i]):[!b!] " &for %%j in (!a!) do if "!s:~%%j,1!"=="" (set "n=!a!" &echo 文字:無い) else echo 文字:在る
935デフォルトの名無しさん
2022/08/30(火) 20:51:26.64ID:Qtk7w0l/ もう質問者はいないぞ
936デフォルトの名無しさん
2022/08/30(火) 23:17:38.91ID:+Bm8wCSm 素人なんだけど >>919 みたいなのってプログラマだったら知っていて当然の定番のロジック?アルゴリズム?だったりするん?
937デフォルトの名無しさん
2022/08/31(水) 00:08:53.66ID:F2h2Wpm0938デフォルトの名無しさん
2022/08/31(水) 05:05:19.96ID:I3t0py3T939デフォルトの名無しさん
2022/08/31(水) 06:19:56.53ID:IktOvXlL 個人的にはforの入れ子がおもしろい。そんな方法があるのかと思った。
普通そこはcallを考えるけど、そうすると速度が落ちるのかな
普通そこはcallを考えるけど、そうすると速度が落ちるのかな
940デフォルトの名無しさん
2022/08/31(水) 20:20:14.08ID:TgQJCwr4 言語にっよっては文字数を数える関数とかがあるけど、こういう手法を駆使してるん?
941デフォルトの名無しさん
2022/08/31(水) 21:42:17.85ID:/4IK1Kkc %%iをカウントダウンさせて変数一つ省略させてるのが美しいわ
942デフォルトの名無しさん
2022/08/31(水) 23:00:05.56ID:dYVvh+jC943デフォルトの名無しさん
2022/08/31(水) 23:03:12.74ID:FwIzrDsl 可変長の文字コードが一般的だから、先頭から数えないと文字数はわからない
944デフォルトの名無しさん
2022/08/31(水) 23:25:40.84ID:8OAd82SA 942の言う通り言語や型によっては文字数を予め持たせてるよ
最初に一度だけカウントしてメモっておけば何度も数え直す必要がない
最初に一度だけカウントしてメモっておけば何度も数え直す必要がない
945デフォルトの名無しさん
2022/08/31(水) 23:41:16.72ID:IktOvXlL C言語のstrlenだと単純に先頭から0を探すだけ
末尾以降のメモリは0とは限らない。ゴミだらけ
末尾以降のメモリは0とは限らない。ゴミだらけ
946デフォルトの名無しさん
2022/09/01(木) 05:31:13.24ID:dRjt3+vQ947デフォルトの名無しさん
2022/09/01(木) 10:54:06.41ID:KDf3jCCr たぶんだけど
内部表現がUTF-8みたいな可変長(Perl等)ならバイト数じゃなくて文字数で持ってると思う。
内部表現がUTF-16みたいな固定長(.NET等)でバイト数÷2が文字数になる言語だと、
「取得毎に÷2(右シフト)の負荷」をとるか
「常に文字数保持のメモリ消費」をとるかは言語による気がする。※まあ後者かな。
内部表現がUTF-8みたいな可変長(Perl等)ならバイト数じゃなくて文字数で持ってると思う。
内部表現がUTF-16みたいな固定長(.NET等)でバイト数÷2が文字数になる言語だと、
「取得毎に÷2(右シフト)の負荷」をとるか
「常に文字数保持のメモリ消費」をとるかは言語による気がする。※まあ後者かな。
948デフォルトの名無しさん
2022/09/01(木) 11:14:11.70ID:BOpcWEhd if definedはあるが、if not definedはエラーになることを発見した
949デフォルトの名無しさん
2022/09/01(木) 11:34:31.15ID:KDf3jCCr ならんが
950デフォルトの名無しさん
2022/09/01(木) 12:10:09.24ID:BOpcWEhd951デフォルトの名無しさん
2022/09/01(木) 14:31:17.40ID:EyFcbtIt 初心者です
[曲名].mp3 の様に
曲名をカッコで囲んでファイル名を出力する方法はどうしたらよいのでしょうか?
-o "%%(title)s.%%(ext)s"
ここの()を[]に変えてもダメでした
お時間ある方いらっしゃいましたらよろしくお願い致します。
[曲名].mp3 の様に
曲名をカッコで囲んでファイル名を出力する方法はどうしたらよいのでしょうか?
-o "%%(title)s.%%(ext)s"
ここの()を[]に変えてもダメでした
お時間ある方いらっしゃいましたらよろしくお願い致します。
952デフォルトの名無しさん
2022/09/01(木) 14:33:44.02ID:5NMGBymZ 多分こっちのスレで聞いた方がいい
【DL】動画の保存方法総合スレ【アダルト禁止】part51
https://egg.5ch.net/test/read.cgi/streaming/1654911933/
【DL】動画の保存方法総合スレ【アダルト禁止】part51
https://egg.5ch.net/test/read.cgi/streaming/1654911933/
953デフォルトの名無しさん
2022/09/01(木) 14:37:30.33ID:EyFcbtIt 952さん
教えてくれてありがとうございます
失礼いたしました
教えてくれてありがとうございます
失礼いたしました
954デフォルトの名無しさん
2022/09/01(木) 14:41:09.20ID:EyFcbtIt 教えて頂いた所は書き込みできませんでした><;
955デフォルトの名無しさん
2022/09/01(木) 14:42:55.59ID:5NMGBymZ 今出先だから試せないけど多分こうかな
-o "[%%(title)s].%%(ext)s"
-o "[%%(title)s].%%(ext)s"
956デフォルトの名無しさん
2022/09/01(木) 14:52:40.78ID:EyFcbtIt 599さん出来ました♪
親切に教えてくれてありがとうございました
感謝です(*- -)(*_ _)ペコリ
親切に教えてくれてありがとうございました
感謝です(*- -)(*_ _)ペコリ
957デフォルトの名無しさん
2022/09/01(木) 14:53:42.59ID:EyFcbtIt 955さんでした...ごめんなさい
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★3 [煮卵★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★2 [蚤の市★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も [1ゲットロボ★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- やす子「ここまで総理大臣が自らズバッと言ったのは初めて。日本の防衛力も大きく変わっていく」 [485187932]
- 韓国、泥船から爆速で逃げ出す 「高市…さん…でしたっけ?」 [878970802]
- 高市早苗の中国問題、「オーバーツーリズムが解消されてウザい中国人が消えるから日本の勝ち」という風潮になってしまう [562983582]
- 【忖度】野村総研、痛恨のミス!中国人の訪日自粛で2兆2000億円の経済損失!と、はじいたが誤りだった。4000億減って1.8兆円。高市 [219241683]
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
- 愛国者ナザレンコ「左翼は自己中な差別主義者で偽善者。日本人ファーストを叩いておいて台湾人が死んでも知らな〜いでしょ。中露の犬」 [856698234]
