【.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/
2020/10/20(火) 00:04:16.20ID:jnlumX7z
>>120
考えた人、特許取ってあるのかな
microsoftが真似すると思う
2020/10/20(火) 01:21:04.79ID:0/xBmjm3
>>121
MIT
123デフォルトの名無しさん
垢版 |
2020/10/20(火) 11:26:40.30ID:jR74MZK7
使ってないけどこのダサい画面なんとかならんのかね
特に色使い
2020/11/10(火) 07:53:43.00ID:CPbRFFCx
>>113
おれも。
vbs 呼んでたのが原因か。
原因がわかって少し納得した。
けれど中身に関わらず勝手に実行できなくしてしまうのは大問題だよな > マイクロソフト
125デフォルトの名無しさん
垢版 |
2020/11/27(金) 17:54:04.98ID:w5Az7J0d
cd ... 点3つ で2階層上のディレクトリに上がれるのって
どのWindowsの機能だっけ?
2020/11/27(金) 23:22:30.42ID:MUwYgmwm
本家Windowsの末裔である95
2020/11/27(金) 23:22:47.95ID:MUwYgmwm
からMe
2021/01/08(金) 22:35:28.22ID:BCe3tfGB
コマンドプロンプトのコピペが化ける。
全角の二重引用符を貼り付けると半角になった。
他にも化ける文字ってあるのかな
2021/01/15(金) 23:17:05.02ID:na+cGcWl
forループでフォルダ内のファイルを取得するときにファイル名だけ抽出するコマンドってなんでしょう?
「%~n.txt」とか色々試したのですが、何を入れてもそんなファイルは存在しないといわれてしまいます(「%~n.txt」なら「%~n.txtは存在しない」)
ググってもわからなかったのでお願いします

for %%f in (フォルダパス) do (
 ここで処理したい
)
2021/01/15(金) 23:17:58.97ID:na+cGcWl
>>129
これbatファイルです
2021/01/15(金) 23:36:01.03ID:OOSIw0eU
for %%f in (*.txt) do (echo %%~nf)
help for読もう
2021/01/16(土) 00:20:33.58ID:MUPXwQYg
for %%f in (*.txt) do (echo %%~f)

for /F "TOKENS=1" %%f in ('dir /B *.txt') do (echo %%~f)
2021/01/16(土) 00:25:52.93ID:xL4nSAcD
それ "delims=" と勘違いしてる?
2021/01/16(土) 00:45:01.02ID:MUPXwQYg
ごめん
tokens=1はいらなかった。余計だった
2021/01/16(土) 00:56:21.35ID:KTlk0YqY
>>131
ありがとう
help forというのはどこでもみれますか?
コマンドをたたいてもググってもやっぱり出てきません
2021/01/16(土) 01:10:21.04ID:No4exMNc
help for でも for /? でも出ると思うけど

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/for
https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/for
2021/01/16(土) 01:19:53.49ID:KTlk0YqY
>>136
ありがとう
2021/01/25(月) 19:13:54.74ID:P1MpJdzu
質問失礼します。
複数あるフォルダのフォルダ名を、内包しているファイル名に一括変更するスクリプトを作る事は可能でしょうか?
https://f.easyuploader.app/eu-prd/upload/20210124175415_346e74754c734e59584e73676b744330.png
分かりづらく申し訳ないのですが、この様にフォルダ名を内包されたファイル名に変更したいです。
色々と調べたのですが素人故どのような書き方をすればいいのか分からず…
宜しければご教授頂きたいです 宜しくお願い致します。
2021/01/25(月) 22:05:10.09ID:N4f0FgIr
>>138

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b *') do (
set "dr=%%~nxa"
for /f "delims=" %%c in ('dir /a-d /b !dr! ^| sort /r') do set "file=%%~nc"
if defined file ren "!dr!" "!file!"
set file=
set dr=
)
endlocal
2021/01/25(月) 23:01:36.92ID:esdkgJAR
>>139
a.zip,b.zip,c.zip,d.zip…というのはあくまでも例で
実際にはいつもそんな名前ではないと思われるが?
2021/01/26(火) 00:03:58.29ID:ECUGH5kE
>>139
/o-nを使わずにsortするのは何か理由でもあるの?
2021/01/26(火) 00:23:50.23ID:ECUGH5kE
あとドライブ直下が対象だとdir /adだと、
$RECYCLE.BINやSystem Volume Informationなどシステムフォルダまで見えちゃうね
中のファイルが見えなかったりリネームできなかったりで実害は無いのかもしれないけど
/ad-sの方がいいね
2021/01/26(火) 00:44:20.98ID:CijQ7yAc
>>140
単純にdirで列挙されるファイルリストの最初のファイル名を使おうとしてるけど、何を言いたいのか分からない

>>141
確かにdir /o-nで問題ないです
sortでないとだめな理由はない
あとドライブ直下でテストはしてなかったからシステムディレクトリは盲点だった
ありがとう
2021/01/26(火) 01:23:39.15ID:ECUGH5kE
a010.txt, a2.txt
だとかエクスプローラとdirの昇順の並び順が異なってくるのはどう対処したらいいんだろう
2021/01/26(火) 02:02:45.97ID:YrHBLfuO
疑問に感じたらググれ
すぐ見付かる
2021/01/26(火) 02:28:00.25ID:mwA/u23E
>>139
ありがとうございます!!出来ました感激です
教えていただいて更に恐縮なのですが、ファイル名昇順の一番上の名前ではなく、一番最後の名前にするにはどの部分を変えれば良いのでしょうか…?
教えて頂ければ幸いです。宜しくお願い致します。
2021/01/26(火) 02:57:22.05ID:YrHBLfuO
in ('dir /a-d /b !dr! ^| sort /r') do

in ('dir /a-d /b !dr!') do
2021/01/26(火) 03:28:21.19ID:mwA/u23E
>>147
ありがとうございます
>>147こちらを先程の「>>139先頭ファイルへのリネーム.cmd」をしたフォルダで試した所「ファイルが見つかりません」とエラーメッセージが出てファイル名の変更が出来ないのですが何故でしょうか…。
まだ何もしていないフォルダへのリネームは>>147の「末尾ファイルリネーム.cmd」でも出来ました。一度しか使えないバッチファイルなのでしょうか…。
2021/01/26(火) 03:55:31.46ID:YrHBLfuO
in ('dir /a-d /b "!dr!"') do
2021/01/26(火) 17:47:59.55ID:mwA/u23E
>>149
ありがとうございます
こちらに変更した所何度でも上書きでリネームすることが出来ました。
本当にありがとうございます
2021/01/26(火) 18:30:12.90ID:3Vc5Ni7z
あんた昇順の意味わかってる?
2021/01/27(水) 14:18:42.02ID:zQyl/e7v
for %%c in ("!dr!\*") do
153デフォルトの名無しさん
垢版 |
2021/01/29(金) 20:04:30.58ID:nZkldKO7
ドラッグアンドドロップしたファイル(複数)を下の
ffmpeg -i "AAA.flv" -vcodec copy -acodec copy "AAA.mp4"
に入れたいです。ドロップするファイルはffmpegが置いてあるフォルダにありますが、できれば異なるフォルダからのファイルでも可能にする方法もあれば知りたいです。
よろしくおねがいします。
2021/01/29(金) 20:16:16.41ID:MVM9RsSY
例えば、ドロップしたファイルが、a, b, c とすると、

どういうコマンドにしたいの?
155デフォルトの名無しさん
垢版 |
2021/01/29(金) 20:27:09.50ID:nZkldKO7
a,b,cの動画ファイルをffmpegで変換して、それをドロップ元のフォルダに保存したいです。変換の内容は"a.flv"→ "a.mp4"です。
2021/01/29(金) 20:32:39.25ID:mJjQcNNM
ffmpeg.exeをpathの通ったディレクトリに配置
またはffmpegのPathを環境変数Pathに追加

:: D&Dで使うならショートカットの作業ディレクトリを空欄にする
:LOOP
if not exist "%~1" pause &exit /b
start "" ffmpeg -i "%~1" -vcodec copy -acodec copy "%~n1.mp4"
shift
goto :LOOP
2021/01/29(金) 22:13:01.62ID:MVM9RsSY
PowerShellスクリプトにドラッグ&ドロップしたファイルを処理させる方法
https://4thsight.xyz/15324

ショートカット・バッチファイルに、D&D して処理する
158157
垢版 |
2021/01/29(金) 22:55:34.81ID:MVM9RsSY
Ruby なら、デスクトップのa.rb に、下のように書いて、そのショートカットを作る。
ショートカットのリンク先を、C:\Ruby25-x64\bin\ruby.exe a.rb
とする。
これで、ショートカットにD&D した、すべてのファイルのフルパスが表示される

sleep は、コマンドプロンプト画面を終了させないため

puts ARGV

sleep 60 * 60 * 24
159デフォルトの名無しさん
垢版 |
2021/01/30(土) 00:09:57.42ID:cwRmtLqZ
>>156
ありがとうございます!できました。
160157
垢版 |
2021/01/30(土) 19:43:14.44ID:txnUgrNq
>>158
修正

Ruby なら、デスクトップのa.rb に、
puts ARGV
と書いて、そのショートカットを作る

ショートカットのリンク先を、コマンドプロンプトとする。
cmd@.exe で、ruby で、a.rb を実行する。
C:\Windows\System32\cmd@.exe /k "ruby a.rb"

書き込めないので、@を付けましたが、
cmd@.exe の、@を抜いてください

これで、ショートカットにD&D した、すべてのファイルのフルパスが表示される
2021/01/31(日) 02:25:30.48ID:x4IKZ5QX
batの初心者的質問する奴にとって、Rubyはとてもじゃないが手が出ないだろうな
2021/02/06(土) 05:23:20.56ID:oQfB5lBJ
cmdよりrubyが難解!って粘着して説くやつなんなんだろ
俺はフリーダムなruby結構好きだけど、rubyアンチはcmdスレにまで出張ってくるんだな
理解に苦しむ
2021/02/06(土) 05:31:05.37ID:EC31O1b+
とうとう変人が来るようになってしまったなあ
2021/02/06(土) 18:33:37.40ID:IPUoPaen
そもそもruby自体がスレ違いな件
2021/02/06(土) 18:39:35.41ID:EC31O1b+
スレ違いとまでは言わないけど、インスコしなきゃ使えないのでハードルは高い
166デフォルトの名無しさん
垢版 |
2021/02/11(木) 12:48:49.05ID:VoBWc0YM
https://mevius.5ch.net/test/read.cgi/tech/1542779527/213
過去ログにあった7z圧縮して指定したディレクトリに出力するコマンドですが
指定したファイル名の前に日時を入れることはできるでしょうか

20210211_○○○○.7zのような感じになればいいです
2021/02/11(木) 14:43:56.17ID:kRZRZf9v
そのスレの、>211の、

set /p n=書庫名(拡張子なし)=
の前に、20210211_ を付ければ、

20210211_○○○○.7z
になるのでは?
168デフォルトの名無しさん
垢版 |
2021/02/11(木) 15:18:16.59ID:VoBWc0YM
>>167
ありがとうございます
しかし今日ならそれでもいいのですが明日以降は
同じ20210211_という過去の日付になってしまいますよね
2021/02/11(木) 15:28:40.76ID:L2KAeCmI
set yyyymmdd=%date:/=%
でいけると思う(XP以前だとこれじゃダメだけど)
2021/02/11(木) 15:50:55.44ID:ILn4iPBu
dateは環境によって表示が異なる
各々の環境に合わせて置換整形する必要あり
171デフォルトの名無しさん
垢版 |
2021/02/11(木) 16:20:50.85ID:VoBWc0YM
set n=%date:/=%_[ファイル名]
これで 20210211_○○○○.7z のように付きました
>>167
>>169-170
皆さんありがとうございました
2021/02/12(金) 23:31:21.72ID:Jyf2ilAM
batわけわからんからpowershellいったらもっとワケワカラン
2021/02/13(土) 08:23:53.63ID:gaZOPqJ3
vbsへようこそ
2021/02/16(火) 17:33:37.55ID:05vP8Ot3
プロ仕様、というかシス環向けだからな…
とりあえずエイリアス一覧に載ってるのだけ覚えればcmdっぽいモノとしては使える
175デフォルトの名無しさん
垢版 |
2021/02/16(火) 20:29:09.86ID:f5pz/7Q8
psは漢字ひらがなが露骨にズレるから辞めました

今は直ってる?
2021/02/16(火) 21:05:12.71ID:F9q4wvox
ファイル操作とか、PowerShell・シェルスクリプトよりも複雑な処理は、Ruby
2021/02/17(水) 15:04:11.28ID:JcWwc4WJ
>>175
全部かどうかはわからんけど直ってるよ
普通に使ってておかしいと思うことは無くなった
2021/02/17(水) 16:19:47.24ID:18/0dmLg
以前こちらで教えていただいた「内包しているファイルの一番降順のファイル名をフォルダ名にするバッチ」ですが >>138
ドラッグしていない同階層の別フォルダまで勝手にリネームしてしまったり、数回使うとファイル名が見つかりませんと出てリネーム出来なくなってしまいます。

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b *') do (
set "dr=%%~nxa"
for /f "delims=" %%c in ('dir /a-d /b "!dr!"') do set "file=%%~nc"
if defined file ren "!dr!" "!file!"
set file=
set dr=
)
endlocal

こちら、ドラッグした同階層のフォルダまで全てリネームしてしまうようになってしまいますか?
ドラッグしたフォルダのみ、何度でも使えるようなバッチにするには何処を書き換えればよいか分かる方いらっしゃいませんでしょうか
2021/02/17(水) 17:36:24.38ID:XjBeFdEa
ドラッグするのか
後からそんなこと言われてもな
2021/02/17(水) 17:44:37.07ID:L78BN9q1
ドラッグしたファイル名はパッチファイルの引数に渡る

引数を読んで処理するように作らないとね
2021/02/17(水) 18:25:07.90ID:XjBeFdEa
どっかおかしいかも
@echo off
for %%i in (%*) do set d=%%~i& call :x
exit /b
:x
cd /d "%d%" || exit /b
FOR /F "delims=" %%j IN ('dir /b /a-d /o-n') DO cd .. & ren "%d%" "%%~nj" & exit /b
2021/02/17(水) 18:52:08.32ID:ZmDWWGuE
>>179->>180
本当にすいません 勝手にドラッグするものと勘違いしていました ドラッグではなく同一階層内で実行でしたね…。
できればフォルダドラッグで実行できればとても楽なのですが
>>181
ありがとうございます 試させて頂きます
2021/02/17(水) 22:56:18.83ID:LXOFF6tt
ネットワークアダプタがデバイスの都合で、
「イーサネット 2」、「イーサネット 3」…とインターフェースの後ろの番号がどんどん増えていきます。
これの有効なインターフェース名を取得したいのです。
レジストリとかでもいいですが、
「netsh interface show interface」コマンドの出力の名前欄で、
最初の「イーサネット〜」を正確に取得したいのです。
がうまく切り出せません。
うまいやり方を教えてください・
2021/02/17(水) 23:20:10.90ID:18/0dmLg
>>181を教えてもらいましたが実行してもリネーム出来ませんでした
2021/02/17(水) 23:34:32.73ID:XjBeFdEa
>>184 もっと具体的に

>>183
set "c=netsh interface show interface"
for /f "skip=2 tokens=4*" %%i in ('%c%') do echo "%%i"
2021/02/17(水) 23:46:04.68ID:XjBeFdEa
間違えた
for /f "skip=2 tokens=3*" %%i in ('%c%') do echo "%%j"
2021/02/18(木) 00:48:33.87ID:gO/gzQD2
for /f "tokens=3*" %%a in ('netsh interface show interface^|findstr "^有効"') do echo "%%b"
2021/02/18(木) 01:17:19.39ID:duO8GsyP
>>185-187
ありがとうございます!
無事切り出せました。
2021/02/18(木) 02:52:52.35ID:seGTs/0b
>>185
すいません、>>181の通りbatを作りましたが、ドラッグしても何も起こりませんでした。
2021/02/18(木) 04:33:33.04ID:SiC3vOBB
宿題は自分でやろうよ
2021/02/18(木) 06:38:53.51ID:tGVFfDdH
>>189
D&Dしたフォルダのフルパスは内緒か?
半角スペースは含まれているか?
半角の )^& 等の文字は含まれているか?
2021/02/18(木) 10:29:50.83ID:GbAv/KX+
@echo off&setlocal
set E=
:MAIN
set N=
pushd "%~1" || pause&exit /b
for %%a in (*) do set "N=%%~na"&goto :BR
:BR
popd
if defined N (ren "%~1" "%N%") else set /a "E+=1"&echo err:"%~1"
shift
if exist "%~1" goto :MAIN
if defined E pause
2021/02/19(金) 07:38:35.26ID:QeMEegpO
setlocal と goto br は要らんぞ。たぶん
2021/02/19(金) 14:27:59.70ID:E9a6ZzGX
setlocalは使用変数を局所化する
コマンドプロンプトで実行後も、使った変数は使う前の状態に戻る
2021/02/19(金) 14:39:22.20ID:Wnqd+KEH
ドラッグ&ドロップで使用することだけを考えたら確かに不要だが
習慣としてつけておいた方がよさげ
2021/02/19(金) 15:37:05.59ID:1yTQ5ZhE
無意味なもの付ける習慣はやめた方がいい
2021/02/19(金) 17:34:28.26ID:Wnqd+KEH
コードの流用を考えたら無意味ではないと思うが
まあ今回の質問者にとっちゃどうでもいいことかもね
2021/02/19(金) 17:57:51.89ID:E9a6ZzGX
ちゃんとした言語を使っている人ほどそういう点に気を配る傾向があるかな
俺は分かってさえいればどっちでも良いと思う
付けててもbatの組み合わせとかに気をつけてるんだろうなって思うだけで
別に文句を言うようなことでは無いと思う
2021/02/19(金) 18:16:09.12ID:QeMEegpO
別に文句は無いが蛇足だね
2021/02/19(金) 18:26:24.18ID:E9a6ZzGX
>>199
考え方は違ってて当然だし、文句言いたけりゃそれもまたありだろ
俺のことを言えば、自分で使う場合は付けないが
誰がどう使うか分からない公開するようなものだとちゃんと始末する
2021/02/19(金) 18:33:33.57ID:QeMEegpO
あと、思ったんだが「一番降順のファイル名」って何?
日本語は紛らわしいなあ
2021/02/19(金) 19:05:53.94ID:E9a6ZzGX
>>201の一番降順のファイル名ってので、goto :BRが必要だってのは分かったけど
>>192の内容ちゃんと見てなかった
けど、>>178のとは処理が違うのでは?
たぶん質問者は複数のフォルダをD&Dするんじゃなくて、一つのフォルダをD&Dしたら、
そのフォルダをリネームするんじゃなくて
そのフォルダの中のサブフォルダを全部リネームして欲しいんだと思う
2021/02/19(金) 19:12:54.09ID:E9a6ZzGX
あれ、一番降順のファイル名って正順で一番最後って意味か
2021/02/19(金) 19:14:31.95ID:+IamAtI7
>>202
> サブフォルダを全部
>>178
> ドラッグしたフォルダのみ
2021/02/23(火) 00:07:13.08ID:mSOvESBF
Windowsバッチにて変更をするためのコマンドラインを教えていただけませんでしょうか。
端末が複数あり端末ごとのバッチファイルではなく端末一覧から選択し各端末のIP設定を行いたいです。

1:端末1
2:端末2
3:端末3

どのネットワークに接続しますか[1,2,3]?

上記のような感じで番号を選択すると下記の通り設定させたいです。
端末1
IP:192.2.10.101
サブネットマスク:255.255.255.0
デフォルトゲートウェイ:192.2.10.100
端末2
IP:192.168.10.101
サブネットマスク:255.255.255.0
デフォルトゲートウェイ:192.168.10.100

また、DNSサーバーは設定する必要はなく、IPv4のIP,サブネットマスク、デフォルトゲートウェイの3項目でよいです。


どなたかプログラミングに詳しい方助けてください。
2021/02/23(火) 01:41:29.81ID:wcX5jbIj
>>205
choiceとnetsh使えばいいよ
2021/02/23(火) 02:25:49.54ID:8PZAxred
>>181>>192
もドラッグしても何も起こりませんでした
https://i.imgur.com/g5O9vPN.png
1、2、3というファイル名のZIPが入っている「TEST」フォルダをドラッグ
https://i.imgur.com/5AerIN4.png
このTESTというフォルダが3というフォルダ名になれば良いのですが…。
ドライブ直下では他のフォルダ名が変わってしまうと怖いのでP/新しいフォルダ/test
という階層で試しています
やはり不可能でしょうか
2021/02/23(火) 08:41:00.03ID:iGzMgm/L
おれ環で試したところ、
>>181 では test が 3 に変わったが。
test を test) にするとダメだが。
>>192 は test は変わらん。というか他人のバッチは知らんわ。

試しに、このバッチにドラッグしてみて
@echo off
echo %*
pause

こう表示されなければシステムの問題

P:\新しいフォルダー\test
2021/02/23(火) 09:28:04.09ID:iGzMgm/L
>>192の5行目
pushd "%~1" || (pause&exit /b)
あと
&goto :BR と :BR は要らん
2021/02/23(火) 23:25:00.87ID:mSOvESBF
>>206
作っていただけませんでしょうか、、、
2021/02/23(火) 23:58:17.09ID:vON2H8DW
まさかただでやれと?
2021/02/24(水) 08:24:23.61ID:PISIFT9J
>>210
助けろって全部作れってことかよ
だるいし「、、、」が気持ち悪いからパス

使うコマンド教えたのに自分で作って貼りもしないくせに作れは論外
あとは使い方調べてやりたいようにやるだけじゃん
自分で作らないと理解できずに>>178みたいになるのが目に見えてる
>>1読んだらそういうスレじゃないことわかるだろ
2021/02/24(水) 10:07:20.78ID:wDwSsMVY
聞く前にまずググれ
バッチ IP変更
2021/02/24(水) 21:12:07.08ID:6sz2UuTx
これはひどい
215デフォルトの名無しさん
垢版 |
2021/02/24(水) 22:09:11.14ID:lmMJyFPq
つーかなんで手動選択なん?
端末で走らせるなら端末名取れるだろ
2021/02/24(水) 23:24:44.75ID:m3EDeT3k
どういうこと
そのBATはUSBか何かに入れて各端末に持ち込むのか
それとも既に繋がっている端末にリモートで変更するのか
(各端末が一つのネットワークじゃ無くて別なところも気になる)
2021/02/25(木) 03:47:04.44ID:2izs5u42
いや、もうどうでもいいだろ
218157
垢版 |
2021/02/25(木) 11:51:36.12ID:dOCTT7eM
>>138

>>157-160
の、160 のa.rb 内に、Ruby で書いた。
このショートカットに、複数フォルダをD&D する

ソートの昇順・降順は、ソート後の配列.first/last で

ただし、日本語のファイル名では、\x{8356}\x{8387}\x{815B} のように表示されてしまう。
DryRun を使ったので、実際には実行されません

require 'pathname'
require 'fileutils'

# ドットよりも前の、文字列を返す。ab.cd.xy なら、ab を返す。
# ab.cd を返したいのなら、rindex を使う

def before_dot( str )
idx = str.index( "." ) # ドットの位置を、先頭から探す
# idx = str.rindex( "." ) # ドットの位置を、末尾から探す

if idx # ドットが有れば
str[ 0, idx ] # 最初から、idx 文字数分を切り出す
else
str
end
end

次へ続く
219157
垢版 |
2021/02/25(木) 11:53:03.33ID:dOCTT7eM
# ARGV は、D&D した複数フォルダの配列で、1つずつ処理する
ARGV.each do |full_path|
dir_path = Pathname.new( full_path )
next unless dir_path.directory? # フォルダ以外は処理しない

# 直下のファイルのみを取り出して、ファイル名でソートする
file_names = dir_path.children( ).select( &:file? ).map( &:basename ).map( &:to_s ).sort
file_name = file_names.first # 昇順
# file_name = file_names.last # 降順なら、これを使う

file_n = before_dot( file_name ) # 上で定義した関数
dest_path = dir_path.parent.join( file_n ) # 変更後のフォルダ名

# 変更後のフォルダ名が、既に存在する場合は、エラー
raise "#{ dest_path } が、既に存在します" if dest_path.exist?

FileUtils::DryRun.move( dir_path, dest_path )
end
2021/02/25(木) 12:05:28.17ID:Ps3dMfcs
もう質問者は来ないよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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