1 名前:デフォルトの名無しさん mailto:sage [2020/08/15(土) 07:00:26 ID:f3kW5kCx.net] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう 過去スレ %13 mevius.2ch.net/test/read.cgi/tech/1542779527/ %12 mevius.2ch.net/test/read.cgi/tech/1489207631/ %11 echo.2ch.net/test/read.cgi/tech/1424858999/ %10 peace.2ch.net/test/read.cgi/tech/1374205515/ %9 toro.2ch.net/test/read.cgi/tech/1335015478/ %8 toro.2ch.net/test/read.cgi/tech/1315844420/ %7 hibari.2ch.net/test/read.cgi/tech/1298873550/ %6 hibari.2ch.net/test/read.cgi/tech/1277465356/ %5 pc12.2ch.net/test/read.cgi/tech/1242268171/ %4 pc12.2ch.net/test/read.cgi/tech/1229955189/ %3 pc11.2ch.net/test/read.cgi/tech/1217860043/ %2 pc11.2ch.net/test/read.cgi/tech/1197881068/ 【.cmd】 バッチファイルスクリプト %1 【.bat】 pc11.2ch.net/test/read.cgi/tech/1178281991/ バッチファイルプログラミング 3.bat pc11.2ch.net/test/read.cgi/tech/1148485555/ バッチファイルプログラミング 2.bat pc8.2ch.net/test/read.cgi/tech/1104911889/ バッチファイルプログラミング質問スレ pc5.2ch.net/test/read.cgi/tech/1040614686/
871 名前:デフォルトの名無しさん mailto:sage [2022/06/03(金) 16:20:46.55 ID:gMGR7N6s.net] そもそも対象のサービスが無効にできない (ようにみえる) 類のものなのではないか?
872 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 00:01:31.51 ID:qz14Jeu3.net] AWS の本にも、Windows サーバーの記述は、1% ぐらいしかない。 システムで、Windowsを使う香具師がいない ファイル共有・Active Directory・タスクスケジューラ・Remote Desktop、 バッチ・コマンドプロンプト・PowerShell ぐらいが、簡単に紹介されているだけ ほとんどがDocker を使う。DockerはLinuxの技術。 だから、Windows 10のWSL2 で、Linuxを使えるようにしている
873 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 03:03:41.49 ID:nWFOJiT2.net] ソフト板のVLCスレで暴れてたガイジに似てるな
874 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 03:16:47.38 ID:4DyQyO7v.net] SYSTEMアカウントで書き替えたら再起動が必要なんじゃないの?
875 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 14:29:54.55 ID:bgz5gZEc.net] サービスの無効化なんか sc config でできるだろ なんでわざわざレジストリを直接編集しなきゃいけないんだ?しかもSYSTEMで https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-config そもそもDelivery Optimizationを無効化したい理由は何なんだ
876 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 15:01:48 ID:M0jEQKIa.net] ID:LtGyf47s みたいに要点を簡潔にまとめられず矢鱈とグダグダ書いちゃう人って何かそういう頭の障害でもあるの? 言葉遣いも変だし外国人なのかな
877 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 07:44:59.76 ID:7J0TRviH.net] 簡単なことを難しく言うやつを世間一般ではhorse and deerという
878 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 12:38:26.56 ID:Z2t62Jo8.net] わざとか?
879 名前:デフォルトの名無しさん [2022/07/09(土) 18:11:33.95 ID:qkG/5q2Z.net] 以下のように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
880 名前:デフォルトの名無しさん [2022/07/09(土) 18:16:36.89 ID:GjOGWrlu.net] 不可能です
881 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:31:41.95 ID:qkG/5q2Z.net] 不可能とのことなのでファイルに一旦出力することにしました @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
882 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:32:57.07 ID:qkG/5q2Z.net] でもこの例ならdir | findstrでいいですね…
883 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:38:08.89 ID:qkG/5q2Z.net] 本当にやりたかったことは curlコマンドで某APIでJSONデータ取得 JSONデータをjqコマンドで値取得 取得した値からfindstrコマンドで余計な行を除去 としたかったのですが、某APIが叩ける回数が限られているため JSONデータを取得する回数を抑えるために一旦配列として保持したかったのです
884 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:41:27.79 ID:LLXk/I9Y.net] >>871 真面目な話そこまでやりたいならPowerShellとか使った方が楽だと思うぞ...
885 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:49:52.57 ID:qkG/5q2Z.net] >>872 実はやりたいことがこれ以上の事は無いのでバッチレベルで可能だろうと思ったのですが 配列?の使い方がよく分からず質問しました ひとまず一時ファイル出力して使いまわす形にしようと思います ちなみに某APIとはスマートリモコンNature Remoの事です
886 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:54:25 ID:NvGIH30g.net] powershellに一票 乗り換えを先延ばしにすればするほど損が積み上がる
887 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:59:09 ID:NvGIH30g.net] 判断のポイントはクッソ不便なbatを捨ててだいぶマシなpsに以降する時期をいつまで先延ばしにするかだけだと思う
888 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 18:59:46 ID:qkG/5q2Z.net] 時間ある時に勉強してみたいと思います>PowerShell ググったらWin7時代から標準であってOSSになっててLinuxでも実行可能とか知りませんでした 割と長く銀行系にいるので頭が古いんでしょうね…
889 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 20:00:42.46 ID:al4zTytR.net] 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 )
890 名前:877 mailto:sage [2022/07/09(土) 20:05:46 ID:al4zTytR.net] >>877 修正 >command = `curl #{ url }` command = "curl #{ url }"
891 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 21:46:59.61 ID:3uODqf9z.net] 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
892 名前:デフォルトの名無しさん mailto:sage [2022/07/21(木) 23:21:25.81 ID:3neYOO2a.net] set /a の結果とか与えた数値を16進表記に変換するコマンドか何か良い方法があったら教えて欲しいです
893 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 01:02:07.69 ID:bfkyQVXg.net] >>880 bc.exe
894 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 01:14:08.48 ID:bfkyQVXg.net] https://linuxjm.osdn.jp/html/GNU_bc/man1/bc.1.html gnuwin32.sourceforge.net/packages/bc.htm
895 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 01:32:20.92 ID:bfkyQVXg.net] @echo off set /a a=123*456 echo a=%a%; obase=16; a | bc pause
896 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 01:42:01.70 ID:bfkyQVXg.net] echo obase=16; %a% | bc でもいい
897 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 07:47:11.80 ID:bfkyQVXg.net] set /a なら値は高々32ビットだよね bc は不要かも cmd /c exit /b %a% echo %=ExitCode%
898 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 10:43:07.05 ID:LvB8fWz+.net] ダントツ遅いが powershell -c "'{0:x}' -f 255"
899 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 10:45:53.90 ID:CXcliooi.net] obaseとかbcとか知らないことがいっぱい出ているな
900 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 11:33:23.34 ID:RIaxNIcl.net] 888
901 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 13:09:13.02 ID:ZzUgbaoD.net] わざわざバッチでやるってことを理解してないアホがいる pythonでも入れてろゴミ
902 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 13:12:16.30 ID:P7NcnZ58.net] batだけで計算しても理解はされないだろうよ
903 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 15:55:27.20 ID:bfkyQVXg.net] >>885 はバッチだけだよ もし桁数が多いのをやりたいなら 過去のスレを探したらバッチがあるよ
904 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 18:11:09.86 ID:5WL5LWhS.net] 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入れてる
905 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 19:27:14.02 ID:bfkyQVXg.net] 話変わるけど右シフトのすぐ右の数字は危険だよね アンカーに解釈されるので2chで数値が変わる場合があるんだよ
906 名前:デフォルトの名無しさん mailto:sage [2022/07/22(金) 22:42:20.46 ID:AXmcGRlR.net] >>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で小数点以下桁数指定出来るのは良いのですが最下桁が四捨五入でも切り捨て切り上げでも無く変な値になったりとかが 惜しい感じですね エスケープはファイルにして読ませれば良いし最下桁は自力で切り捨てれば良いだけですのでいずれ何かで役立つかも ありがとうございました
907 名前:デフォルトの名無しさん mailto:sage [2022/07/23(土) 09:18:41.04 ID:WQSCizyX.net] エスケープは入力要求メッセージ(末尾改行無し)を使って回避する方法がある。 <nul set /p "=8^2" | 〜 ※もし行(末尾に改行)が必要なら <nul set /p "=8^2" | more | 〜
908 名前:デフォルトの名無しさん mailto:sage [2022/07/23(土) 10:55:51 ID:obFo1BRC.net] >>894 set "a=8^^2" & echo %%a%% | bc
909 名前:デフォルトの名無しさん mailto:sage [2022/07/24(日) 07:30:05.93 ID:oa53tMxs.net] >>895 目からウロコなTips set /p <nul="8^2" | more | bc で行けました moreの代わりにfindやfindstrなどパイプで受け取って改行付加して吐けるコマンドなら使えるっぽい。他には以下とか (set /p <nul="8^2"&echo=) | bc set /p の改行無しecho の用法は知っていたんだけどこの局面で使える事に思い付けなかったのが悔しい
910 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 20:26:36.34 ID:hShn1n51.net] コマンドからリモートホスト名とそのIPを取得出来ますか?
911 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 12:49:48.16 ID:WvMv+Qf8.net] nslookup … DNSで調べる ping … hostsとか諸々込みで実際にどう名前解決されるか nbtstat … NETBIOS名なら netstat … 通信で実際に使ってる自端末と相手のIPアドレス ipconfig … 自端末の諸々 netsh … 自端末の諸々
912 名前:898 mailto:sage [2022/08/14(日) 18:43:42.99 ID:0tA/3KXA.net] 各コマンドのヘルプ見たり試してみたけど良く分からなかった WAN側IPとそのホスト名をコマンドから知れないか?を知りたかったんだけど無理そうですか? nslookupで引数にIP指定すればホスト名は取れるんだけどIPをどうやって知ったら良いものか
913 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 19:35:36.51 ID:R62l2k+7.net] >>900 状況がよくわからん 「WAN側IP」とか言ってるから自宅(自社)のルーターを自宅(自社)のLAN側から知りたいという話?
914 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 19:37:41.23 ID:WvMv+Qf8.net] インターネット上の相手側から見える、自WANのWAN側IPアドレスって事? 例えば自端末がオンラインゲームのホストになる際に相手に教えるIPアドレス。 WAN側機器のWeb管理コンソールとか、 「診断くん」等のWebサービスをスクレイピングすればいいよ。 探せばAPIサービスなんかもあるかもね。 ※Webサービス使うときは利用規約をよく読んでね。 既にIPアドレス知る方法を1つは知ってるようだから、その方法でもいいよ。
915 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 19:49:12.00 ID:3lHTKQ6A.net] ホスト名とは何かという定義が必要だな WEBサーバーなら複数のホスト名(URLのドメインパート)で同じ(時には複数の)サーバーに接続する https://5ch.net/でアクセスされるサーバーなら 5ch.net がホスト名だが 同じサーバーが他のドメインもホストしているなら、他のホスト名も持っていることになる あるサーバーが、接続され得るすべてのホスト名を知りたいと思っても、それは世界中のDNSの勝手なの、 漏れなく調べるためには、世界中のすべてのドメインのレコードを調べる必要があるので、実際には無理。 DNSの逆引きは、それを設定している人が必要な分を登録しているだけなので、すべてとは言い切れない。
916 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 20:04:12.33 ID:zcJ+8Zbe.net] >>900 現在接続形態で多いのが、ルータの下にローカルネットワークでPCが繋がっているというもの この場合、PCからはローカルネットワークが全てでありIPアドレスもローカルIPアドレスが使われる グローバルWAN側のIPアドレスを知りたいのなら ルータにログインしてアクセスして情報を貰うか、 webのIPアドレスを教えてくれるサイトから情報を取ることになる つまり>>902 の言うとおり
917 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 20:07:44.49 ID:0tA/3KXA.net] そうです。自分のインターネット側のIP ルーター管理画面のWAN側IPです これをコマンド(LAN側のマシン)から調べる方法が無いのかなって > Webサービスをスクレイピング これってコマンドでやる方法あります? NECのなんですけどルーター管理画面から取れるのかな? ちょっとググったりしてみましたけど簡単なバッチくらいしか使えない自分にはハードル高いかも
918 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 22:44:27.94 ID:zcJ+8Zbe.net] >>905 curl.exeを持ってこないといけないけど 診断君のスクレイピングだと @echo off curl.exe 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%
919 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 22:55:35.81 ID:zcJ+8Zbe.net] >>905 何も要らないが、powershellを使わないといけない (なおwebアクセスで診断君以外ではtls1.2を有効にしないとダメなことが多い) $res = wget 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
920 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 00:00:17.27 ID:xwOg3pSS.net] >>906-907 ありがとうございます curl.exe はなぜか 7.55.1.0 が system32に入ってました 参考にルーター管理画面から取得出来ないか試して無理だったら使わせて頂きます
921 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 02:02:49.45 ID:xwOg3pSS.net] お陰様でコマンドから確認出来るようになりました。この度は本当にありがとうございました for /f "skip=301 tokens=4 delims=< " %a in ('curl 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しないと無理ですよね?
922 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 08:55:40.32 ID:3ogXO4Oz.net] call :ラベル名 で処理を呼び出して exit /b を break として使うこともできるよ
923 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 21:05:50.46 ID:Z47lvB2J.net] >>909 breakしたい、というか302行目だけ欲しいってことかな。 findstrで行番号振って、さらにfindstrで目的の行だけ取るって方法があるよ。 for /f "tokens=4 delims=< " %a in ('curl 〜 -s^| findstr /rn /c:"^"^| findstr /r /c:"^302:"') do
924 名前:デフォルトの名無しさん mailto:sage [2022/08/16(火) 15:31:14.62 ID:RClv+rPW.net] >>911 for /f "tokens=5 delims=< " %a in ('curl 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入れたり明後日のことしてハマってました 目的が何行目か決まっている時は最良の方法かもですね 行番号列挙する必要がありますが複数行でも使えますし
925 名前:デフォルトの名無しさん mailto:sage [2022/08/27(土) 21:14:13.99 ID:S8eeCUJc.net] 文字列の入った変数から、その文字数を高速に取得したいんですが なにか良い方法はありますか? 上限は8189です
926 名前:デフォルトの名無しさん mailto:sage [2022/08/27(土) 22:59:03.27 ID:OpG+r6e/.net] 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してループさせればいい
927 名前:デフォルトの名無しさん mailto:sage [2022/08/27(土) 23:07:32.10 ID:S8eeCUJc.net] >>914 ありがとうございます。参考にさせていただきます ちなみに8189はcmdの仕様による限界です
928 名前:デフォルトの名無しさん mailto:sage [2022/08/27(土) 23:22:13.27 ID:VY6ZsFbR.net] >>913 > 高速に取得したい バッチでやるのはやめた方がいいかと
929 名前:デフォルトの名無しさん mailto:sage [2022/08/27(土) 23:24:42.08 ID:OpG+r6e/.net] setだかcmdの構文解析だかの引数の文字数上限が8191 (0x1fff) とかで "s=" で2文字必要だから8189とかだったかな 変数名が単一文字で無かったり "" で囲ったりしても使用可能文字数減るはずだし forやifの中で展開出来なかったりしたと思うから 限界探るなら一見使えているように見えてもちゃんと確認しといた方が良いよ
930 名前:デフォルトの名無しさん mailto:sage [2022/08/27(土) 23:49:06.77 ID:OpG+r6e/.net] 4096 -> 2048 -> 1024 -> 512 -> 256 -> 128 -> 64 -> 32 if で8回くらい判定させればそれなりに速く出来ると思う 256分割。。 オフセットも変数にしてループするとか 512で真だったら /2 偽だったら *1.5 (set /a N=N/2+N) てな感じで
931 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>913 set s=abcdefg setlocal enabledelayedexpansion set n=0
932 名前: & 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! [] [ここ壊れてます]
933 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] なるほどなー set n=!a! や set /a "a=n-(1<<%%i)" これがパッと出て来るなんて頭良いですね
934 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 10:26:23.19 ID:+w1wfoOM.net] たとえばファイルサイズを %~z1 でなくfilename.sizeみたいなわかりやすい書き方に する方法はないですか
935 名前:デフォルトの名無しさん [2022/08/28(日) 10:36:37.74 ID:FcIb+N5t.net] バッチファイルにわかりやすい書き方なんてものがあったら、俺の髪はもっと残ってた
936 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 11:08:55.91 ID:CaouF0NP.net] バッチの基本的な考え方としては基本コマンドにこだわらず外部コマンドを呼ぶことだと思う セキュリティ的に外部コマンドは入れられないといった制約があるならこのレガシーツールを使い続けるのは無理がある 現実解のひとつはPowershellのワンライナーを呼ぶことで そうやって少しずつ学んでるうちに段階的にbatを卒業することだと思う
937 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 11:23:21.78 ID:+w1wfoOM.net] >>923 ありがとうございます やはり無理なのか、aliasesなどを使った名案があればいいのに Powershellはコマンド名が長すぎて使う気になれない 外部コマンドやツ-ルを使えば簡単でもセキュリティ的に問題があるかわからないので使いたくない場合がある
938 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 11:41:21.61 ID:3aiLuiYL.net] エイリアスもどきはあるよ マクロファイルに定義を書いておいて一斉に登録することもできる doskey /? あとpowershellにはエイリアスがある
939 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 15:23:54.30 ID:CaouF0NP.net] Powershellは単に慣れと食わず嫌いの問題やね cmdも無数の気持ち悪いルールがあるし現にたかが文字を数えるだけで呪文めいたコードが必要になってる 何にせよ人間慣れれば気にならなくなるもの さすがにあと5年で定年だからプログラミングしなくなりますなんて老人には勧めんけどね コマンドの長さとエイリアスについては 俺はGet-ChildItemはダルいからdirやlsと書くし ForEach-Objectの代わりに%と書き続けてる
940 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 15:36:49.18 ID:3aiLuiYL.net] powershellの弱点は初期起動に時間が掛かるという点だね 通常的にpowershellを使ってるならいいけど、 それこそ特定の処理だけたまに使うという人にはそこがネックになる そういう場合はもうオブソリュートだがWSHがいい仕事をする
941 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 17:28:34.01 ID:hYNZdTyV.net] >>921 わかりやすい変数に代入すれば?
942 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 19:39:30.66 ID:TtkhtxSa.net] 底辺ドカタがアイデンティティ護ろうと必死だけど必死に見られたくない虚栄心とのせめぎ合いが垣間見えてワラw
943 名前:デフォルトの名無しさん mailto:sage [2022/08/28(日) 19:49:06.93 ID:hYNZdTyV.net] エイリアス無いし batを使いたいなら騙しながらやるしかないだろ
944 名前:デフォルトの名無しさん mailto:sage [2022/08/29(月) 03:05:26.48 ID:Rm8LZ6WJ.net] >>924 ほんとはvbsが起動も速度も速い上にバッチやps程変な癖もなくていわゆるVB脳程度の知識でそこそこのものが手軽に書けるんだよ ただこの板にあるスレが一言で言えば気持ち悪いから誰も触れないのよ よくvbsはオワコンて言われるけど少なくとも2029年までは標準で使えるから安心していいよ
945 名前:デフォルトの名無しさん mailto:sage [2022/08/29(月) 04:54:03.93 ID:DAjO1ugz.net] @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させてみたけど バッチでの文字数カウントとしては最強じゃね?
946 名前:デフォルトの名無しさん mailto:sage [2022/08/29(月) 07:10:34.83 ID:ZvttE7Ov.net] 変数に代入出来るのが8000でも set/pで入力出来るのは1000ほどしかないな 文字数が多いと色々と落とし穴ありそう
947 名前:デフォルトの名無しさん mailto:sage [2022/08/30(火) 16:27:10.19 ID:2X2Lv8NW.net] >>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 文字:在る
948 名前:デフォルトの名無しさん mailto:sage [2022/08/30(火) 20:51:26.64 ID:Qtk7w0l/.net] もう質問者はいないぞ
949 名前:デフォルトの名無しさん mailto:sage [2022/08/30(火) 23:17:38.91 ID:+Bm8wCSm.net] 素人なんだけど >>919 みたいなのってプログラマだったら知っていて当然の定番のロジック?アルゴリズム?だったりするん?
950 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 00:08:53.66 ID:F2h2Wpm0.net] >>936 やってることはただの2分探索だよ アルゴリズムの本とか一通り読んでれば思いつくよ 特にシフト使ったちまちましたことは組み込みプログラマが得意だろう
951 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 05:05:19.96 ID:I3t0py3T.net] >>936 アルゴリズム自体はまあ知ってて当然レベル それをバッチで実装するのはなかなか凄いと思う
952 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 06:19:56.53 ID:IktOvXlL.net] 個人的にはforの入れ子がおもしろい。そんな方法があるのかと思った。 普通そこはcallを考えるけど、そうすると速度が落ちるのかな
953 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 20:20:14.08 ID:TgQJCwr4.net] 言語にっよっては文字数を数える関数とかがあるけど、こういう手法を駆使してるん?
954 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 21:42:17.85 ID:/4IK1Kkc.net] %%iをカウントダウンさせて変数一つ省略させてるのが美しいわ
955 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 23:00:05.56 ID:dYVvh+jC.net] >>940 頭から数えるか、文字列型に文字数の情報も持たせてる x文字目を1文字切り出して有るか無いかっていうのは結局言語側で文字数わかってないとだめなわけで
956 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 23:03:12.74 ID:FwIzrDsl.net] 可変長の文字コードが一般的だから、先頭から数えないと文字数はわからない
957 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 23:25:40.84 ID:8OAd82SA.net] 942の言う通り言語や型によっては文字数を予め持たせてるよ 最初に一度だけカウントしてメモっておけば何度も数え直す必要がない
958 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 23:41:16.72 ID:IktOvXlL.net] C言語のstrlenだと単純に先頭から0を探すだけ 末尾以降のメモリは0とは限らない。ゴミだらけ
959 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 05:31:13.24 ID:dRjt3+vQ.net] >>944 文字数を保持してる言語ってあるの? たいていバイト数だと思ったけど
960 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 10:54:06.41 ID:KDf3jCCr.net] たぶんだけど 内部表現がUTF-8みたいな可変長(Perl等)ならバイト数じゃなくて文字数で持ってると思う。 内部表現がUTF-16みたいな固定長(.NET等)でバイト数÷2が文字数になる言語だと、 「取得毎に÷2(右シフト)の負荷」をとるか 「常に文字数保持のメモリ消費」をとるかは言語による気がする。※まあ後者かな。
961 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 11:14:11.70 ID:BOpcWEhd.net] if definedはあるが、if not definedはエラーになることを発見した
962 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 11:34:31.15 ID:KDf3jCCr.net] ならんが
963 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 12:10:09.24 ID:BOpcWEhd.net] >>949 すみません、ミスでした おかしいな
964 名前:デフォルトの名無しさん [2022/09/01(木) 14:31:17.40 ID:EyFcbtIt.net] 初心者です [曲名].mp3 の様に 曲名をカッコで囲んでファイル名を出力する方法はどうしたらよいのでしょうか? -o "%%(title)s.%%(ext)s" ここの()を[]に変えてもダメでした お時間ある方いらっしゃいましたらよろしくお願い致します。
965 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 14:33:44.02 ID:5NMGBymZ.net] 多分こっちのスレで聞いた方がいい 【DL】動画の保存方法総合スレ【アダルト禁止】part51 https://egg.5ch.net/test/read.cgi/streaming/1654911933/
966 名前:デフォルトの名無しさん [2022/09/01(木) 14:37:30.33 ID:EyFcbtIt.net] 952さん 教えてくれてありがとうございます 失礼いたしました
967 名前:デフォルトの名無しさん [2022/09/01(木) 14:41:09.20 ID:EyFcbtIt.net] 教えて頂いた所は書き込みできませんでした><;
968 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 14:42:55.59 ID:5NMGBymZ.net] 今出先だから試せないけど多分こうかな -o "[%%(title)s].%%(ext)s"
969 名前:デフォルトの名無しさん [2022/09/01(木) 14:52:40.78 ID:EyFcbtIt.net] 599さん出来ました♪ 親切に教えてくれてありがとうございました 感謝です(*- -)(*_ _)ペコリ
970 名前:デフォルトの名無しさん [2022/09/01(木) 14:53:42.59 ID:EyFcbtIt.net] 955さんでした...ごめんなさい
971 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 21:32:28.04 ID:P4dKpTai.net] 文字列処理は、Ruby で書いて、 コマンドプロンプト・Power Shell から呼び出す これが間違いない。 バグる事もない 日本の人工衛星でも、文字列処理の部分を組み込みのmruby で作ったりする。 こういう処理をCで作ると、ややこしくてバグるから VBS, WSH のピッコロ大魔王は、すごい技術者だよ。 スクレイピングでも、Rubyのクラス・モジュールみたいに、VBScript で作ったりする VBS から、.NET とか呼び出せるのか