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

レス数が1000を超えています。これ以上書き込みはできません。
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/
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させてみたけど
バッチでの文字数カウントとしては最強じゃね?
2022/08/29(月) 07:10:34.83ID:ZvttE7Ov
変数に代入出来るのが8000でも
set/pで入力出来るのは1000ほどしかないな
文字数が多いと色々と落とし穴ありそう
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 文字:在る
2022/08/30(火) 20:51:26.64ID:Qtk7w0l/
もう質問者はいないぞ
2022/08/30(火) 23:17:38.91ID:+Bm8wCSm
素人なんだけど >>919 みたいなのってプログラマだったら知っていて当然の定番のロジック?アルゴリズム?だったりするん?
2022/08/31(水) 00:08:53.66ID:F2h2Wpm0
>>936
やってることはただの2分探索だよ
アルゴリズムの本とか一通り読んでれば思いつくよ
特にシフト使ったちまちましたことは組み込みプログラマが得意だろう
2022/08/31(水) 05:05:19.96ID:I3t0py3T
>>936
アルゴリズム自体はまあ知ってて当然レベル
それをバッチで実装するのはなかなか凄いと思う
2022/08/31(水) 06:19:56.53ID:IktOvXlL
個人的にはforの入れ子がおもしろい。そんな方法があるのかと思った。
普通そこはcallを考えるけど、そうすると速度が落ちるのかな
2022/08/31(水) 20:20:14.08ID:TgQJCwr4
言語にっよっては文字数を数える関数とかがあるけど、こういう手法を駆使してるん?
2022/08/31(水) 21:42:17.85ID:/4IK1Kkc
%%iをカウントダウンさせて変数一つ省略させてるのが美しいわ
2022/08/31(水) 23:00:05.56ID:dYVvh+jC
>>940
頭から数えるか、文字列型に文字数の情報も持たせてる
x文字目を1文字切り出して有るか無いかっていうのは結局言語側で文字数わかってないとだめなわけで
2022/08/31(水) 23:03:12.74ID:FwIzrDsl
可変長の文字コードが一般的だから、先頭から数えないと文字数はわからない
2022/08/31(水) 23:25:40.84ID:8OAd82SA
942の言う通り言語や型によっては文字数を予め持たせてるよ
最初に一度だけカウントしてメモっておけば何度も数え直す必要がない
2022/08/31(水) 23:41:16.72ID:IktOvXlL
C言語のstrlenだと単純に先頭から0を探すだけ
末尾以降のメモリは0とは限らない。ゴミだらけ
2022/09/01(木) 05:31:13.24ID:dRjt3+vQ
>>944
文字数を保持してる言語ってあるの?
たいていバイト数だと思ったけど
2022/09/01(木) 10:54:06.41ID:KDf3jCCr
たぶんだけど
内部表現がUTF-8みたいな可変長(Perl等)ならバイト数じゃなくて文字数で持ってると思う。
内部表現がUTF-16みたいな固定長(.NET等)でバイト数÷2が文字数になる言語だと、
「取得毎に÷2(右シフト)の負荷」をとるか
「常に文字数保持のメモリ消費」をとるかは言語による気がする。※まあ後者かな。
2022/09/01(木) 11:14:11.70ID:BOpcWEhd
if definedはあるが、if not definedはエラーになることを発見した
2022/09/01(木) 11:34:31.15ID:KDf3jCCr
ならんが
2022/09/01(木) 12:10:09.24ID:BOpcWEhd
>>949
すみません、ミスでした
おかしいな
951デフォルトの名無しさん
垢版 |
2022/09/01(木) 14:31:17.40ID:EyFcbtIt
初心者です
[曲名].mp3 の様に
曲名をカッコで囲んでファイル名を出力する方法はどうしたらよいのでしょうか?
-o "%%(title)s.%%(ext)s"
ここの()を[]に変えてもダメでした
お時間ある方いらっしゃいましたらよろしくお願い致します。
2022/09/01(木) 14:33:44.02ID:5NMGBymZ
多分こっちのスレで聞いた方がいい

【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
教えて頂いた所は書き込みできませんでした><;
2022/09/01(木) 14:42:55.59ID:5NMGBymZ
今出先だから試せないけど多分こうかな
-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さんでした...ごめんなさい
2022/09/01(木) 21:32:28.04ID:P4dKpTai
文字列処理は、Ruby で書いて、
コマンドプロンプト・Power Shell から呼び出す

これが間違いない。
バグる事もない

日本の人工衛星でも、文字列処理の部分を組み込みのmruby で作ったりする。
こういう処理をCで作ると、ややこしくてバグるから

VBS, WSH のピッコロ大魔王は、すごい技術者だよ。
スクレイピングでも、Rubyのクラス・モジュールみたいに、VBScript で作ったりする

VBS から、.NET とか呼び出せるのか
2022/09/02(金) 06:32:40.82ID:s4Jk55Dy
たかがその程度でそんなことする必要ない
2022/09/02(金) 07:22:53.60ID:m72Ydqk7
RubyってWindowsデフォで処理できんの?Pythonは?
2022/09/02(金) 09:55:08.52ID:ly4TfMW8
>>960
動くよ
有料オプションなんていらない
2022/09/02(金) 12:18:58.31ID:m72Ydqk7
それいいな
Ruby置いておいて.batから呼び出すの超楽じゃん
963デフォルトの名無しさん
垢版 |
2022/09/03(土) 13:13:17.18ID:JK72C2wT
mp3をダウンロードして128kにするバッチファイル教えてもらえませんか?
yt-dlpとffpmeg使って色々と試してみてもうまくいきません
ダウンロードしたあとでしたら名前が分かるのでこれで出来たのですけど
ffmpeg -i input.mp3 -vcodec copy -ab 128k output.mp3
964デフォルトの名無しさん
垢版 |
2022/09/03(土) 13:56:15.90ID:91ZlUxrs
https://gigazine.net/news/20220624-yt-dlp-download-sections/
965958
垢版 |
2022/09/03(土) 15:43:23.43ID:X5iiwVOT
>>960
ただし、Python, Ruby などのウェブ系言語は、
インターネット・Linux・UTF-8 用に作られているので、
Windows・shift-jis(CP932)の日本語でバグるかも

だから、Linux用のソースコードを、
MSYS2/MinGW でコンパイルして、Windows用にしたものよりも、
WSL2 で、Linuxを動かしたものの方が安全

これは、UTF-8をCP932に変換せず、そのままUTF-8を使っているから安全

漏れが作った感想では、PowerShell, VBScript よりも、
圧倒的に、Rubyが作りやすい。
Rubyの方が、本なども多いし
2022/09/06(火) 21:18:12.82ID:RxqiahQJ
pythonでも、いけるのか。うむ。
2022/09/10(土) 02:55:46.45ID:jyBCEVh6
あっというまにうんこうめ
2022/09/11(日) 18:11:08.37ID:sXKbUVWc
パイプから文字列受け取ってsetする方法って
echo a|for /f %%a in ('more') do set a=%%a
みたいにforでやるか一旦ファイルに書き出すしか無い?
echo a| set /p a="" <pipe
みたいにリダイレクトに繋げてくれるかパイプで流れてくるものに%$_%とか一時変数っぽいものに割り当ててくれたら良いのに
rg.exeが便利すぎて遊んでてふと思った
2022/09/12(月) 23:31:40.49ID:JnviOvBd
rgがcmdで使い物にならなくてショック
パイプで受け取る分には-E sjisで出来るんだけどrgからパイプで次に繋げたりリダイレクトで出力するとascii以外の文字は化ける
これcmd上だとどうにもならない?
https://github.com/BurntSushi/ripgrep/blob/master/FAQ.md#pipe-non-ascii-windows
2022/09/13(火) 10:43:09.25ID:C/JjoHd5
文字コードの問題なら
一旦nkf32でも中継させて文字コード変換して読み直すとか?
2022/09/13(火) 13:50:58.24ID:8ckY0WFW
chcp 65001
して全部 utf8 でやっちゃう
utf8 のバッチファイルで行末が2バイト文字だとエラーに
なるんで、そういうのは行末に . とかで回避
2022/09/13(火) 19:02:32.59ID:BFM47HY2
>>970
試してみたら行けました
でも入力を指定出来ないのがちょっと不安、と思っていたら期待される入力のオプションありました
現状それしか無いかもですね
rgを多段に使う場合は最初と最期だけ変換すればrgの-Eオプションも省けて良いかも
でも手軽さにケチ付いたみたいなのが引っかかります。。

>>971
utf-8だと機能しないコマンドもあるのでその確認がちょっと大変です

お二方ともレスありがとうございました
2022/09/13(火) 20:01:05.07ID:gJ1f0QwF
ちょっと大変どころじゃないけど
UTF-8とかの時点でPowershell検討しなよ
2022/09/14(水) 02:23:02.40ID:ifExYD0i
分かっていると思うけど
nkf等で変換しても変換不可の文字が欠落するので注意
2022/09/14(水) 02:38:59.13ID:d7brrjLd
えっ?いや全然分かってないです
sjis → utf-8 → sjis
で欠落する文字って在るのでしょうか?
半角カナはxオプションで維持可能でした
2022/09/14(水) 02:51:18.58ID:ifExYD0i
元がsjisならいいと思いますたぶん
2022/09/14(水) 09:41:51.82ID:t44Y6QQe
>>974
そう、完璧版nkfがあるといい
2022/09/14(水) 09:45:41.31ID:bQ7RTOjb
コンソールアプリでパイプの時点で色々諦めなきゃね
rg.exeとやらはwinforms版はないの?オプソだよね?
2022/09/14(水) 18:03:36.58ID:XL8H98jz
完璧版nkfとは、どのようなものになるのでしょうか?
UTF-8、UTF-16対応?
文字コードによって存在する文字(というかコード?)にどう対応すればよいのでしょうね?
2022/09/14(水) 18:24:17.06ID:RZxozk25
フォルダ a:\xxx を
a:\yyy の下に移動して
a:\yyy\xxx とするのはどうやりますか?
2022/09/14(水) 19:24:16.59ID:ifExYD0i
move
2022/09/14(水) 19:57:29.62ID:XL8H98jz
move a:\xxx\*.* a:\xxx\yyy
2022/09/14(水) 19:59:06.71ID:XL8H98jz
間違えた。

x move a:\xxx\*.* a:\xxx\yyy

o move a:\xxx\*.* a:\yyy\xxx
2022/09/14(水) 20:02:13.40ID:XL8H98jz
次スレを立てて見ようと思います。
失敗したら、あとのかたお願いします。
2022/09/14(水) 20:05:48.88ID:XL8H98jz
次スレです。


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

https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50

後の埋めは、よろしくお願いします。
2022/09/14(水) 20:10:50.57ID:y9++92To
move a:\xxx a:\yyy
で行けないかな
ダメならxcopyかrobocopyを使う
2022/09/14(水) 22:44:29.10ID:XL8H98jz
rem フォルダyyyが無い場合、フォルダyyyを作成。

md a:\xxx\yyy

rem フォルダxxx下にファイルが有る場合。

move a\xxx\*.* a:\xxx\yyy
2022/09/14(水) 22:45:56.57ID:XL8H98jz
コピーの場合、

move a\xxx\*.* a:\xxx\yyy

のmoveをcopyにして下さい。
2022/09/15(木) 07:10:21.66ID:PHto6B20
md a:\yyy
if not exist a:\yyy\xxx (move a:\xxx a:\yyy) else (
if exist a:\yyy\xxx\nul (
move /-y a:\xxx\* a:\yyy\xxx
for /d %%i in (a:\xxx\*) do move "%%i" a:\yyy\xxx
rd a:\xxx ))

既存のため移動できない物はa:\xxxに残るので名前変更して再実行
2022/09/15(木) 12:53:39.30ID:EPORcPim
それで、>>980さんは、解決したのでしょうか。
後は、埋めてしまいますよ。
2022/09/15(木) 12:54:46.51ID:EPORcPim
次スレ
【.cmd】 バッチファイルスクリプト %15 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50
2022/09/15(木) 12:55:30.56ID:EPORcPim
次スレ
【.cmd】 バッチファイルスクリプト %15 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50
2022/09/15(木) 12:55:52.67ID:EPORcPim
次スレ
【.cmd】 バッチファイルスクリプト %15 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50
2022/09/15(木) 12:56:19.20ID:EPORcPim
次スレ
【.cmd】 バッチファイルスクリプト %15 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50
2022/09/15(木) 12:56:42.68ID:EPORcPim
次スレ
【.cmd】 バッチファイルスクリプト %15 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50
2022/09/15(木) 12:57:04.06ID:EPORcPim
次スレ
【.cmd】 バッチファイルスクリプト %15 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50
2022/09/15(木) 12:57:29.87ID:EPORcPim
次スレ
【.cmd】 バッチファイルスクリプト %15 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1663153441/l50
2022/09/15(木) 13:08:18.56ID:EPORcPim
埋め
2022/09/15(木) 13:08:47.98ID:EPORcPim
埋め
2022/09/15(木) 13:09:27.18ID:EPORcPim
また、いつの日にか、相まみえん。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 761日 6時間 9分 1秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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