[過去ログ]
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1489207631/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
226: デフォルトの名無しさん [sage] 2017/10/17(火) 10:39:26.27 ID:AWu3veoe >>225 解説ありがとうございます とりあえず日付の所いろいろやってみてるのですがうまく行かないままです。 正規表現といわず直接文字列を指定して | が有効になるかどうかというところから実験してます。 for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r ""10月15日"|"10月16日""') do call :SUB "%%~a" pause exit /b :SUB rem set s=%~1 rem ren %1 "%s:~0,2%%s:~3,2%%s:~6%" findstrについての解説は検索で出てきた http://www.atmarkit.co.jp/ait/articles/0412/18/news018.html を読みました。読んだだけです。頑張ります http://mevius.5ch.net/test/read.cgi/tech/1489207631/226
227: デフォルトの名無しさん [sage] 2017/10/17(火) 11:38:46.09 ID:fpIKg5e5 >""10月15日"|"10月16日"" "で""を囲えないしfindstrの正規表現で|は使えない findstr /? まともな正規表現を使いたければvbsやPowerShell、Perlとか別のスクリプトに行ったほうがいい バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる 急がば回れ http://mevius.5ch.net/test/read.cgi/tech/1489207631/227
228: デフォルトの名無しさん [sage] 2017/10/17(火) 22:45:54.56 ID:bWF1v8hX 参考にWSHでもどうぞ(hoge.jsファイルとして作成)、コマンドプロンプトから hoge "フォルダ名" (又は cscript //nologo hoge.js "フォルダ名") 又は、エクスプローラ等からフォルダをこのjsファイル(又はショートカット)にドロップして実行 var fso = new ActiveXObject("Scripting.FileSystemObject"); var args = WScript.Arguments; if(args.length<1) throw Error("引数にフォルダを指定してください"); if(!fso.FolderExists(args(0))) throw Error("指定のフォルダが存在しません"); var folder = fso.GetFolder(args(0)), s = "", success = [], fail = [], name, name2, em, i, r; var re = /^(\d{1,2})月(\d{1,2})日(.*)$/; var func_new_name = function(all,mm,dd,ss) { if(mm<1 || mm>12 || dd<1 || dd>31) return ""; return ("0"+mm).substr(mm.length-1) + ("0"+dd).substr(dd.length-1) + ss; }; em = new Enumerator(folder.SubFolders); for(em.moveFirst();!em.atEnd();em.moveNext()) { name = em.item().Name; if(re.test(name)) { name2 = name.replace(re,func_new_name); if(name2) { try{em.item().Name = name2; success.push(" "+name+" -> "+name2);} catch(e) {fail.push(" "+name+" -> "+name2);} } } } if(success.length>0) s = "リネーム成功\n"+success.join("\n"); if(fail.length>0) s += "\nリネーム失敗\n"+fail.join("\n"); WScript.Echo(s || "対象フォルダなし"); http://mevius.5ch.net/test/read.cgi/tech/1489207631/228
229: デフォルトの名無しさん [sage] 2017/10/17(火) 23:49:36.84 ID:G9wCIPXR もうPowerShellのRename-Item使おうぜ 個人用途だろうし制約ないでしょ http://mevius.5ch.net/test/read.cgi/tech/1489207631/229
230: デフォルトの名無しさん [sage] 2017/10/18(水) 02:49:24.30 ID:nuzaMfIv 覚えたてによく居るよね 要件無視した勝手な仕様でエラー判定とか結果ダイアログとかゴテゴテ実装してドヤ顔で持ってきちゃう子 http://mevius.5ch.net/test/read.cgi/tech/1489207631/230
231: デフォルトの名無しさん [sage] 2017/10/18(水) 02:57:26.06 ID:O0s7d+Fx まあダブルクリックで不意に実行されちゃうようなのは作りたくないよな http://mevius.5ch.net/test/read.cgi/tech/1489207631/231
232: デフォルトの名無しさん [sage] 2017/10/18(水) 07:04:24.46 ID:G1+K6kx+ >>215 無理やりバッチファイルの例 for /d %%i in (*) do set "a=%%~nxi" & call :w goto :eof :w setlocal enabledelayedexpansion set "e=m" & set /a b=0,m=0,d=0 :x set "c=!a:~%b%,1!" if not defined c goto :eof for /L %%j in (0,1,9) do if "!c!"=="%%j" set /a !e!=!e!*10+c & goto y if not "!c!"=="月" goto z if not "!e!"=="m" goto :eof if !m! gtr 12 goto :eof set "e=d" :y set /a b+=1 & goto x :z if not "!c!"=="日" goto :eof if not "!e!"=="d" goto :eof if !d! gtr 31 goto :eof set /a f=m*d,m+=100,d+=100,b+=1 if !f! gtr 0 ren "!a!" "!m:~1!!d:~1!!a:~%b%!" http://mevius.5ch.net/test/read.cgi/tech/1489207631/232
233: デフォルトの名無しさん [sage] 2017/10/18(水) 22:17:20.50 ID:on6I0HDV >>231 うちの現場のバッチは例え内部で使わなかろうが最低1つは必ず引数を渡す仕様になってる。 そしてそれが渡されなかった場合は処理せずに終了する作りになっている。 理由は誤ってダブクリしちゃった場合の対策なんだってさ。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/233
234: デフォルトの名無しさん [sage] 2017/10/18(水) 22:23:22.61 ID:hY2xT5yc batって大体はD&Dして使うようなの書いてるな http://mevius.5ch.net/test/read.cgi/tech/1489207631/234
235: デフォルトの名無しさん [sage] 2017/10/19(木) 01:03:03.64 ID:cgLUQcTs >>230 なんか癇に障ったみたいだけど、言い訳すると 俺は、質問者によって回答内容を変えてる 今回の質問者は初心者だと感じたし、さらには細かい拘りを持っているように見受けられた (13月32日なんて作らないだろうし、もしあったって1332に変換されて悪いことはないと思う) 色々と手を加えて試行錯誤することが好きなんだろうなって思ったから 役に立ちそうな追加部分を記述した それに1レスで書く分には、数行増えようが関係ないだろうと思ったしね http://mevius.5ch.net/test/read.cgi/tech/1489207631/235
236: デフォルトの名無しさん [sage] 2017/10/19(木) 08:32:22.21 ID:ny4cf+Vz >>233 なるほど http://mevius.5ch.net/test/read.cgi/tech/1489207631/236
237: デフォルトの名無しさん [sage] 2017/10/19(木) 22:12:55.60 ID:JROgBEvY ザ・ワールド、時よ止まれ。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/237
238: デフォルトの名無しさん [] 2017/10/20(金) 03:00:35.66 ID:1Na2h1P4 キッティングの自動化をしたいんだが、参考になるサイトない? http://mevius.5ch.net/test/read.cgi/tech/1489207631/238
239: デフォルトの名無しさん [] 2017/10/20(金) 03:00:59.71 ID:1Na2h1P4 対象のレジストリ見つけるとかめんどい http://mevius.5ch.net/test/read.cgi/tech/1489207631/239
240: デフォルトの名無しさん [sage] 2017/10/20(金) 23:41:00.84 ID:aZN6SiIl どの程度の自動化? http://mevius.5ch.net/test/read.cgi/tech/1489207631/240
241: デフォルトの名無しさん [sage] 2017/10/21(土) 08:56:40.19 ID:Nsvn2WYb >>238 何を自動化するん? http://mevius.5ch.net/test/read.cgi/tech/1489207631/241
242: デフォルトの名無しさん [sage] 2017/10/21(土) 16:42:48.10 ID:DofUW9OG そんなんツールが出てるんだからその説明でも読めよ http://mevius.5ch.net/test/read.cgi/tech/1489207631/242
243: デフォルトの名無しさん [] 2017/10/21(土) 18:43:14.12 ID:TBS9tbdH 一発で、ファイアウォールの受信規則とかインターネットオプションとか http://mevius.5ch.net/test/read.cgi/tech/1489207631/243
244: 名無しさん@そうだ選挙に行こう! Go to vote! [] 2017/10/22(日) 07:51:26.89 ID:eb/3UN8i >>215 $before = ls -Directory | Where-Object { $_ -match "^\d+月\d+日" } $after = $before | foreach { $_.Name -replace '^(\d+)月(\d+)日', '$1$2' } $idx = 0; $before | foreach { Rename-Item -WhatIf $_.FullName $after[$idx]; $idx++; } PowerShell で書いたので、cd で、そのフォルダへ移動して実行して。 -WhatIf が付いているので、本当には実行せずに、結果だけを見れる。 本当に実行する際は、-WhatIf を削除して実行して 配列 $before には「02月03日」などで始まるフォルダだけを、入れる。 配列 $after には「02月03日」の部分だけを「0203」に変換した、フォルダ名を入れる Rename-Item で、該当する全フォルダ名を変換する http://mevius.5ch.net/test/read.cgi/tech/1489207631/244
245: 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2017/10/22(日) 14:53:59.01 ID:1YRZU7Jo 問題は、月を01〜12まで、日を01〜31までのチェックを入れることだけどね http://mevius.5ch.net/test/read.cgi/tech/1489207631/245
246: 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2017/10/22(日) 16:29:48.93 ID:rLFHcAK9 >>244 ls <directory-name> -directory | ren -newname {$_.name -replace '^(¥d+)月(¥d+)日', '$1$2' } lsの-filterやwhere-object使ってもいいけど この例の場合は不要だと思うよ http://mevius.5ch.net/test/read.cgi/tech/1489207631/246
247: デフォルトの名無しさん [] 2017/10/23(月) 07:20:31.59 ID:A3jhOkfm ls -directory | ren -WhatIf -newname {$_.name -replace '^(\d+)月(\d+)日', '$1$2' } 上記で、where-object が無いと、 変更されないフォルダまで、表示されるのが気持ち悪い http://mevius.5ch.net/test/read.cgi/tech/1489207631/247
248: デフォルトの名無しさん [sage] 2017/10/23(月) 22:30:10.89 ID:TV21zs/8 Windows7SP1では、Get-ChildItemに-directoryオプションは無いんでエラーが表示された 調べたら、3.0以降でこのオプションが付いた模様 この際なので、5.0,5.1をインストールした Windows7の人の参考まで http://mevius.5ch.net/test/read.cgi/tech/1489207631/248
249: デフォルトの名無しさん [sage] 2017/10/24(火) 18:41:12.61 ID:QQrV41zo PowerShellのスクリプトファイルの拡張子は普通.ps1を使うが デフォルトではファイルの実行を許可してないし、 また許可後もダイレクトにファイル名を指定しても実行できない って保険かけすぎで入門者には敷居が高いだろと思わないでもないなあ >>247 where-objectを入れてみた (まだ2時間ぐらいしかやってないんでもっといい書き方があるかも) $re='^(\d+)月(\d+)日';ls -directory|? name -match $re|ren -whatif -newname {$_.name -replace $re,'$1$2'} このスレ的にはアリアス使うなら、lsよりもdirが合ってる気もするけど http://mevius.5ch.net/test/read.cgi/tech/1489207631/249
250: デフォルトの名無しさん [sage] 2017/11/03(金) 20:22:18.43 ID:+gpl8JNW ここで聞くべきか迷ったのですが… 自分のマシンからリモートデスクトップで接続できるサーバー(確かWin2008R2)があって そのサーバーと同じネットワーク内にクライアント端末(Win7)があります。 そのクライアント端末のプロセスをリモートデスクトップで接続したサーバーから確認することは可能でしょうか? (サーバーには管理者権限で接続しています) 要はクライアント端末でtasklistコマンドを打った結果が見たいのですが。 ちなみにクライアント端末はDHCP設定なので起動のたびにIPアドレスが変わります… 今は1日に何度も遠くにあるクライアント端末まで行ってプロセスを確認しています。 1回だけ行ってIPアドレスをメモるぐらいなら全然構わないので何か方法があれば教えて下さい。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/250
251: デフォルトの名無しさん [sage] 2017/11/03(金) 21:42:45.24 ID:91m0YuAi クライアントに自分のタスクリストをファイルを記録する周期ジョブを作成しておく 必要であれば暗号化しておく そのファイルをメールで自動送付するようにしておくか、 クライアントにwebエリアがあればそこに置きこちらから見にいく http://mevius.5ch.net/test/read.cgi/tech/1489207631/251
252: デフォルトの名無しさん [sage] 2017/11/03(金) 21:52:08.46 ID:z1gogpom >>250 サーバから tasklist /s クライアント端末名 (/u user /p pass) を実行では見れないんですか? ファイアウォールの設定が必要かもしれませんけど。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/252
253: デフォルトの名無しさん [sage] 2017/11/03(金) 22:47:57.34 ID:+QQUmgGP >>250 1) 他のPCのプロセス状態を知りたい 2) DHCPで設定されているPCのIPアドレスを知りたい ってことでいいかな 1) はtasklist の /s オプションで知りたいPCのIPアドレスを指定すれば行けるはず ただし事前にPC側に設定が必要 かつPCにログインできる情報が必要 2) は 2-1) 直接見に行ってipconfigで確認する 2-2) MACアドレスわかってるならサーバーからそのネットワークアドレス全体にpingを打ちつつarpコマンドで相手のMACアドレス確認していけばいい 2-3) DHCPサーバーを管理してるならPCのIPアドレスを確認する方法があるかも、まあそれならPCのIPアドレスを固定した方がいいかも 2-4) >>251みたいな方法で定期的にIPアドレスを通知してもらう http://mevius.5ch.net/test/read.cgi/tech/1489207631/253
254: 250 [sage] 2017/11/04(土) 18:18:26.62 ID:HSP2f8JH みなさん情報ありがとうございます。 来週になったらとりあえず>>252さんの方法を試してみます。(一番手軽なので…汗) それでダメな場合は一日一回直接IPアドレスを確認しにいく方式にします。 というのもpingのブロードキャストは現場のルールで禁止されてるっぽいので。 クライアント端末も特別な用途のためのものなのでタスク作ったり何かを仕掛けるのは厳しそうです。 仕掛けられれば業務はすごく楽になるんですけど「セキュリティ上問題が…」とか言われて突っぱねられる可能性大です。>< 尚、pingブロードキャスト以外の方法でIPを知る方法については自分でも調べてみます。 どうもありがとうございます。助かりました! http://mevius.5ch.net/test/read.cgi/tech/1489207631/254
255: デフォルトの名無しさん [sage] 2017/11/04(土) 18:30:41.27 ID:sTeHaJ1X >>254 >>252-253に書いてあるけど事前にクライアント側の設定しないとtasklist /sでプロセス情報見れないけど、そこは大丈夫なの? http://mevius.5ch.net/test/read.cgi/tech/1489207631/255
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 747 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s