X



【.cmd】 バッチファイルスクリプト %13 【.bat】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2018/11/21(水) 14:52:07.84ID:v84I4o+L
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1424858999/
【.cmd】 バッチファイルスクリプト %12 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1489207631/

それ以前の過去スレ
%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://pc12.2ch.net/test/read.cgi/tech/1197881068/
%1  http://pc11.2ch.net/test/read.cgi/tech/1178281991/
0952デフォルトの名無しさん
垢版 |
2020/08/07(金) 22:11:16.88ID:wnzPeWR5
>>951
そもそもツリー表現が変だと思う。

├フォルダ1
│├ファイル1
│└ファイル2
└フォルダ2
  ├ファイル1
  └ファイル2

tree コマンドの出力をトラップして改変する方向で考えたら楽なんじゃない?
0953デフォルトの名無しさん
垢版 |
2020/08/07(金) 22:17:23.17ID:5wWI/sIC
>>951
エクスプローラーでの表示順と dir コマンドでの表示順は異なるけど
それを考慮する必要あるの?
0954デフォルトの名無しさん
垢版 |
2020/08/08(土) 00:00:00.04ID:c43C7xo+
for /r %%i in (.)で下位フォルダ名取得
  そのフォルダ内の最初のファイル名を取得(ソート指定)
  対象フォルダ名の変更

もしやるならvbs噛ませると思う
0955デフォルトの名無しさん
垢版 |
2020/08/08(土) 05:43:20.34ID:jNP2OM4q
>>953
とりあえずいらないですが、名前順で並び替えた場合、先頭にくるものをフォルダ名としたいです
0958デフォルトの名無しさん
垢版 |
2020/08/08(土) 09:01:08.32ID:nLoi7MqI
どうでもいいと言うならテメーがどっちかに決めろや
どうでもいいと言いながらできてからなんで違うんだ?とか言う奴多すぎ
0960デフォルトの名無しさん
垢版 |
2020/08/08(土) 09:32:21.16ID:d2hZRkL/
仕様を全て決めないと取り掛かれないマヌケ多すぎ
無能は本筋から外れたところで発狂してろ
0961デフォルトの名無しさん
垢版 |
2020/08/08(土) 09:59:17.57ID:jNP2OM4q
>>956
では今回はエクスプローラ側の並び順がいいです
0962デフォルトの名無しさん
垢版 |
2020/08/08(土) 10:22:17.59ID:cJmgrNkw
>>960
吠えるしかできない間抜け乙w

>>961
ならStrCmpLogicalW()を使わないとダメだからバッチではほぼ無理
PowerShellかC#とかでやった方がいい
0963デフォルトの名無しさん
垢版 |
2020/08/08(土) 11:11:14.30ID:6XUmF/b8
とりあえずこんな感じ?(先頭はdir順)
if "%1" neq "" pushd "%~1"
for /d %%i in (*) do call :sub "%%~i"
popd
goto :eof

:sub
for /f "tokens=*" %%j in ('dir /b /on %1') do (
call :rename %1 "%%~j"
goto :eof
)
goto :eof

:rename
ren %1 %2
if errorlevel 0 call :rename-retry %1 %2
goto :eof

:rename-retry
rem ---todo---
goto :eof
0964デフォルトの名無しさん
垢版 |
2020/08/08(土) 11:14:22.00ID:jNP2OM4q
>>962
ではcmdでいいです
あるいはpython環境のほうが楽ですか?
>>963
cmdのコードは理解が難しいですね、、、
0965デフォルトの名無しさん
垢版 |
2020/08/08(土) 12:00:51.68ID:jNP2OM4q
globでやってみます
0966デフォルトの名無しさん
垢版 |
2020/08/08(土) 12:16:11.89ID:XwBZfJ1v
リネーム処理とかはもうPSの方がいいんじゃない?

@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%G in ('dir /ad /b') do (
set N=
for /f "usebackq delims=" %%H in (`dir /a-d /b "%%~G" 2^>nul`) do if not "%%~H"=="" if not defined N set "N=%%~nH"
if defined N (
if not exist "%%~dpG!N!" (ren "%%~G" "!N!") else (
set dt=!date:~0,10!!time: =0!
set dt=!dt:/=!
set dt=!dt::=!
ren "%%~G" "!N!_!dt!"
)
)
)
pause &exit /b
0967デフォルトの名無しさん
垢版 |
2020/08/08(土) 14:01:14.15ID:jNP2OM4q
pythonでは向いてないですか
0970デフォルトの名無しさん
垢版 |
2020/08/08(土) 16:11:06.79ID:Uh3gedSc
dir /ad /b /s > tmp.txt とかで処理対象のディレクトリ名をテキストに落としてから
wshでリネーム用のバッチファイルを作る方が楽かな

wshではテキストを一括読みして変数に入れて
テキストを順次読みしながら↑の変数の内容をバッチファイルのコマンドに変更してく
下位ディレクトリや同一フォルダ名になるときの判定などもしやすい
もし失敗しても、原因を見つけやすいしリカバリーもしやすい
0971デフォルトの名無しさん
垢版 |
2020/08/09(日) 04:55:36.88ID:z2n3MQIn
仕様がないと取りかかれないと言うが
発注者が仕様を曖昧にしておくほうが罪深いだろ
要件定義が甘くて泣きをみるのはいつも現場だ
0972デフォルトの名無しさん
垢版 |
2020/08/09(日) 05:42:25.80ID:KFfdng53
Ruby で、チェックツールを作った

隠しファイル・ディレクトリは、どう扱うのか?
ファイル名に、. がある場合に、どうするのか?

require 'pathname'

p base_dir = Pathname.new( "C:/Users/Owner/Documents/test/" )

folders = base_dir.children.select( &:directory? ) # 直下のディレクトリのみ
p folders.length, folders

files = folders.map { |folder| folder.children.select( &:file? ).first } # 直下の最初のファイルのみ

# nil は、直下にファイルが存在しない、ディレクトリ
nil_cnt = files.count( &:nil? )
p files.length, nil_cnt, files

# compact で、nil の要素を省く
hash = files.compact.each_with_object( { } ) do |file, hash|
filename = file.basename.to_s # ファイル名を、ハッシュに追加していく
if hash.has_key? filename # ハッシュに、既に追加されていれば
hash[ filename ] += 1
else
hash[ filename ] = 1
end
end

# 2 以上のもの、つまり、同じファイル名になったものを表示する
p hash, hash.select { |key, val| val >= 2 }
0976デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:47:47.63ID:0zxLTv88
典型的な無能の発言だな
0977デフォルトの名無しさん
垢版 |
2020/08/09(日) 23:22:34.78ID:TBMXuXvF
>>972
オワコンRubyジジイが出てきたか
困るよね、こういう老害

>>975
進められるけど手戻りして予算オーバーするわけね
お前が無能
0978デフォルトの名無しさん
垢版 |
2020/08/10(月) 01:55:02.34ID:9+h/1Osf
>>977
> 進められるけど手戻りして予算オーバーする

マヌケが要件定義を担当するとそうなるねw
バカな開発チームだと、なぜか「ユーザーが悪い」という認識になるww
0979デフォルトの名無しさん
垢版 |
2020/08/10(月) 03:38:30.58ID:1F6bB0mG
あいまいなのはユーザーが自分でも要求を把握しきっていないためだから
あとでこうしてくれやっぱりああしてくれとコロコロと仕様変更してくるのが常だろ
0980デフォルトの名無しさん
垢版 |
2020/08/10(月) 04:21:21.96ID:mFEy/HZR
> あいまいなのはユーザーが自分でも要求を把握しきっていないため

ブレない軸を導き出せないような無能SEは多いよね
ある程度ブレてもダメージが少ないように開発するのが主流ですよ
0981デフォルトの名無しさん
垢版 |
2020/08/10(月) 11:53:14.80ID:ZLJuvAm6
ある程度ブレても、いいように開発できればいいのですけれどもね。
時折、ニュースでも、開発できなかったということで、クライアント側と、
メーカー側で裁判になっていますから、難しいのだろうと思うのですが。
0983デフォルトの名無しさん
垢版 |
2020/08/13(木) 21:47:50.59ID:5FyzI8Jm
Soft\Soft.ini
12 LastCheck = Mon Aug 3 00:00:00 2020
13 LastUpdate = Mon Aug 3 00:00:00 2020

Soft\Plugins\update.txt
1 Update time: Wed Aug 12 23:59:59 2020

Soft.iniの12行目と13行目「Mon 〜 2020」を
update.txtの1行目「Wed 〜 2020」から置換して
12 LastCheck = Wed Aug 12 23:59:59 2020
13 LastUpdate = Wed Aug 12 23:59:59 2020
のように上書きしたいのですが
batファイルでどのように書けば出来ますか?
0984デフォルトの名無しさん
垢版 |
2020/08/13(木) 22:00:40.82ID:E452L2zK
>>983
情報不足。
・Soft.ini の絶対に12行目と13行目か?んなこたぁねぇだろ。
・update の日付が更新されなかった場合はどうするの?
・ていうか .ini で「=」の左右に半角空白を入れるってどういうアプリだ?

書きようはあるが、for /? と打って自分で調べた方が早いだろ、これは。
どこかの新入社員だとか学生の課題っぽいな…
0985デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:32:48.63ID:SCMnTycc
Ruby では、これで設定できる

require 'inifile'

str = "Wed Aug 12 23:59:59 2020"

ini = IniFile.new( :filename => "test.ini" )

ini[ "abc" ] = { "LastCheck" => str, "LastUpdate" => str }
ini.write( ) # save

結果
[abc]
LastCheck = Wed Aug 12 23:59:59 2020
LastUpdate = Wed Aug 12 23:59:59 2020
0989デフォルトの名無しさん
垢版 |
2020/08/14(金) 14:59:12.49ID:uGqrrAzw
>>983
@echo off
set src=Plugins\update.txt
set ini=Soft.ini
for /f "usebackq tokens=1* delims=:" %%G in (`findstr /c:"Update time" "%src%"`) do set "VER_UT=%%H"
for /f "usebackq tokens=1* delims==" %%G in (`findstr /c:"LastUpdate" "%ini%"`) do set "VER_IT=%%H"
REM 比較するならここで処理
REM echo "%VER_UT%" "%VER_IT%"
ren "%ini%" "%ini%.bak" && copy nul "%ini%" || (echo ERROR &pause &exit /b)
for /f "usebackq tokens=1* delims==" %%G in ("%ini%.bak") do (
if "%%G"=="LastCheck " ( >>"%ini%" echo %%G=%VER_UT%
) else (
if "%%G"=="LastUpdate " ( >>"%ini%" echo %%G=%VER_UT%
) else ( >>"%ini%" echo %%G=%%H
)
)
)
REM 空行消したくなければ findstrで読んで行番号を表示させる
0993デフォルトの名無しさん
垢版 |
2020/08/14(金) 22:43:27.80ID:9FGl+Ien
低能Ruby厨か
0994デフォルトの名無しさん
垢版 |
2020/08/14(金) 23:06:43.67ID:TmzvbeJo
リダイレクトカードオープン!
>>991 から >>995 へのアンカーは >>985 へリダイレクトされる!

が、Ruby爺は人格障害者だった!
精神的ダメージを受けていない!

Ruby爺がVZ爺を召喚しようとしている!
が、自分自身だったので召喚できない!

Ruby爺がダサいコードを唱え始めた!
似非プログラマーは発狂した!
歴戦のプログラマーは何も感じていない!

歴戦のプログラマーの攻撃!
Ruby爺は5のダメージ!
歴戦のプログラマーはRuby爺をやっつけた!

経験値を0exp、ゴールドを0G 手に入れた!

「何だよ無職ニートの爺かよ…」と歴戦のプログラマーは思った。
0995デフォルトの名無しさん
垢版 |
2020/08/14(金) 23:10:45.52ID:SCMnTycc
Windows には、ini ファイルを読み書きできる、コマンド・アプリは無いの?
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 632日 16時間 7分 11秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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