1 名前:デフォルトの名無しさん mailto:sageteoff [2017/03/11(土) 13:47:11.66 ID:2LSSeyH1.net] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。 前スレ 【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net 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 pc12.2ch.net/test/read.cgi/tech/1197881068/ %1 pc11.2ch.net/test/read.cgi/tech/1178281991/
175 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 20:50:12.77 ID:1dHyDD35.net] >>170 よく分からないけどbat自体をUTF-8で書いてchcp 65001というのは?
176 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 20:52:58.84 ID:rIu52qT/.net] >>172 それも考えたのですが、不特定多数のPCで使う機会があるので手間が増えてしまうなと思い諦めました。 そこで、URLからIDとなる文字列を抽出してそれをファイル名に使おうと考えました。 参考URL:https://www.openrec.tv/live/7cuVKOAY3lv この末尾の7cuVKOAY3lvの部分だけを、TITLEに代入したいと思ったのですが、思うようにいかなくて・・・。
177 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 21:10:23.56 ID:rIu52qT/.net] 結局、実行batのディレクトリ内にnkf32を導入し、 nkf -s --overwrite %HTML% と書き加えて対処致しました
178 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 14:35:48.67 ID:91TLAHUR.net] フォルダの中に、あああ_1.flv あああ_2.flv … あああ_100.flvのようなファイルがあるときに、あああ_1.flvをあああ_001.flvのようにリネームしたりできないんでしょうか
179 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 15:34:02.29 ID:ZSKrJS0x.net] >>175 Flexible Renamer
180 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 16:50:10.59 ID:iDduY4Qi.net] お〜瑠璃ね〜むで十分やぞ D&D用のショトカも作れるしな
181 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 17:11:24.47 ID:1aRkt9bd.net] >>175 「のようなファイルがあるときに」の条件がどこまでかわからないが >>176 が一番早いのは間違いない
182 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 20:06:42.61 ID:KnTCuJQc.net] set "a=あああ_" set "b=.flv" setlocal enabledelayedexpansion for /L %%i in (1,1,99) do set /a c=%%i+1000 & ren "!a!%%i!b!" "!a!!c:~1!!b!"
183 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:38:58.30 ID:omILiWW+.net] >>175 pushd "%~dp1" :LOOP for /f "tokens=1,2 delims=_" %%a in ("%~n1") do ( set FNAME=%%a set /a FN=%%b+1000 ) ren "%~1" "%FNAME%_%FN:~-3%%~x1" shift if not "%~1"=="" goto :LOOP
184 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 17:02:31.64 ID:KsdTyPQv.net] >>180 変換の数字の前が_文字じゃないかもしれないし _文字がファイル名の中に混じっている可能性もあるし
185 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 17:53:19.91 ID:Vr+Gp9oD.net] どのスレでも一緒だが質問の要件が分かりにくいのはめんどうだな
186 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 18:00:47.56 ID:kMuf1wHV.net] なんでか知らないけど他人に勝手にマルチポストされたけど>>175 の質問は元のスレで解決したのでもういいです
187 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 22:03:48.56 ID:BJjXydYg.net] cd \ pushd D:\abc setlocal popd としても元の \ に戻らなかった
188 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 00:02:37.80 ID:pBY/MKIa.net] >>184 そうならなきゃ逆にダメでしょ setlocalでは(親の環境を引き継いだ)別の環境の上で実行されている カレントを移動しようが環境変数を操作しようが元の環境には影響しない pushd D:\abc setlocal endlocal popd または setlocal pushd D:\abc endlocal
189 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 01:15:44.81 ID:24unggVp.net] >>185 ありがとうございました そういうことでし
190 名前:たか [] [ここ壊れてます]
191 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 05:02:43.18 ID:cRJ1WDqm.net] 今さらバッチファイル入門て… 余計な被害者増やさずPowerShellにしろよ これだからIT後進国は 超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT www.atmarkit.co.jp/ait/articles/1709/15/news034.html 017年09月15日 05時00分 公開
192 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 05:59:12.53 ID:TbhIjs8j.net] >>187 このスレのタイトル見てから言えよ それとも、お前は、自分が使ってないソフトのスレ行って 「別のソフト使え」って言って巡るのが趣味なのか?
193 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 06:09:12.67 ID:NzFbxZfY.net] PowerShellに移行しようと思ったこともあるけどファイルをD&D出来ないから断念した あと他人の環境で動くのか分からないから渡しにくいし
194 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 06:11:20.82 ID:NzFbxZfY.net] まあbatに面倒臭いとこがあるのも理解できるけど せめて正規表現と小数の計算くらいはあればよかったんだが
195 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 11:00:27.02 ID:Nvo3nRRv.net] 自分で使うにはPoweShellはめちゃめちゃ便利だけど 一般的に定着してるかというとそうじゃないし
196 名前:デフォルトの名無しさん [2017/09/17(日) 11:17:50.05 ID:jtG62g+O.net] PowerShell は起動が遅いから小さいバッチをループで呼び出すのには向いてないんじゃないかな。 いったんロードしたオブジェクトを関数形式で呼び出せばいいんだろうけどよくわからなくてめんどくさいし。
197 名前:デフォルトの名無しさん [2017/09/17(日) 11:23:06.30 ID:jtG62g+O.net] 最近、フリーソフトとかの小さいやつの管理がめんどくさくなって メニュー代わりにバッチファイルを使うことにしたんですよ。 全部をVHDに入れてマウントなんで、持ち運びは仮想ディスクファイル1個をコピーするだけ。 起動が素早いのがメリット。 アイコンが出ないのがデメリット。 アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど。 プログラムの入ったフォルダ Program Files 3 バッチファイルの入ったフォルダ Program Link [FirefoxPortable.bat] set pathname1=%~d0\Program Files 3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe start "" "%pathname1%"
198 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 12:31:00.83 ID:z++LvPT9.net] それだけならバッチ作るまでもなくハードリンクにすればアイコン問題も解決では
199 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 12:37:46.24 ID:z++LvPT9.net] あ、すまんそれだと実行ファイルと同じフォルダのDLL読めないからダメか
200 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 00:06:56.51 ID:AVBMNnfo.net] 短いファイル名に関していくつか質問 1 短いファイル名はダブルクオーテーションで囲まなくても実行可能? 2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?
201 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 23:50:36.04 ID:2dThcY7y.net] >>196 「1」は、多分可能 「2」は、他にファイルが出来なければが前提かと 「dir c:\*1」と「dir c:\*1 /x」を実行して挙動を確かめて下さい。
202 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 00:09:36.87 ID:I5t298fo.net] 少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから ファイルが存在したままある日突然名前が変わることはないはず そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時 同名だけど別のファイルが出来てしまう事はありえる
203 名前:196 mailto:sage [2017/09/19(火) 01:33:17.50 ID:FIGNw+kF.net] レスありがとうございます。 ちなみに自分がやりたかったのは↓と同じケ
204 名前:ースで自作のbatをタスクスケジューラに登録したいというものでした。 schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG) http://fpcu.on.coocan.jp/dosvcmd/bbs/log/taskkillstart/at/4-0842.html "を\"と書いてエスケープさせるやり方もあるようですがそちらではbatにダブルクォーテーションで囲った引数を渡すと不可解な動作をすることがあり上手くいきせんでした。 batのパスにスペースを含んだ場合 起動しない batのパスにスペースを含まない場合 %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される [] [ここ壊れてます]
205 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 02:17:59.79 ID:Lhe/hdFe.net] mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう うまくいくかどうかわかりませんが ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね
206 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 03:12:37.88 ID:aIPv0JYK.net] >>199 この書き方に準じていないだけでは? A Scheduled Task Does Not Run When You Use Schtasks.exe to Create It and When the Path of the Scheduled Task Contains a Space https://support.microsoft.com/en-us/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create-it-a Schtasks.exe を使用して、スケジュールされたタスクのパスにスペースが含まれている場合を作成するときにスケジュールされたタスクが実行されません。 https://support.microsoft.com/ja-jp/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create-it-a 失敗例 schtasks /create /tn "my task" /tr "c:\foldername containing spaces\script.bat arguments" /sc once /sd 07/29/2003 /st 10:01 成功例 schtasks /create /tn "my task" /tr "\"c:\foldername name containing spaces\script.bat\" arguments" /sc once /sd 07/29/2003 /st 10:01
207 名前:196 mailto:sage [2017/09/20(水) 06:44:59.65 ID:w13Y3qRA.net] >>201 自分の説明が下手で伝わらなかったんだと思いますが、成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです。 引数にダブルクオーテーションを含まない場合は正常に起動できます。
208 名前:196 mailto:sage [2017/09/20(水) 07:01:29.72 ID:w13Y3qRA.net] 一応追記しておくと、おかしくなるのはタスクスケジューラから起動した場合限定で通常の起動では問題ありません。 呼び出すbat内の記述にミスがあるとかそういうのではないと思います。
209 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 11:18:59.39 ID:WXZB4PjF.net] %CMDCMDLINE%はどうなってる?
210 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 18:15:09.28 ID:X0F1M9Qy.net] argumentにダブルクォーテションがある場合もパスと同様に\"してる?
211 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 18:35:03.44 ID:uKBRYTKY.net] test
212 名前:196 mailto:sage [2017/09/21(木) 18:38:58.99 ID:uKBRYTKY.net] NGワードが含まれていたようなので他所に書きました https://pastebin.com/9yMQfC37
213 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 20:04:30.28 ID:0vysq0yQ.net] 基本的に引数の中の半角スペースはデリミタであり そこより左に " が奇数個あればデリミタじゃなくなる それに関しては \" とか ^" とかあっても関係ないんじゃね
214 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 14:27:46.65 ID:aNTDK6ge.net] >>207 もう見てないかも知れないけど schtasks /create /tn "test\test" /sc once /st 23:00 /tr "cmd /s /c \"\"C:\schtasks test\schtaskstest.bat\" hoge1 hoge2 \"ho ge3\" \"h oge4\"\"" これだと実行ファイルのパスにスペースがあっても問題ない
215 名前:196 mailto:sage [2017/09/26(火) 15:58:12.82 ID:dvSxVtoZ.net] >>209 なるほど、直接batを登録するのではなくてcmdのほうを登録すれば良かったんですね 思いつ
216 名前:きませんでした 助かりました、ありがとうございます [] [ここ壊れてます]
217 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 23:43:05.86 ID:Z33TeZgR.net] 文字コードがUTF8のテキストファイルが2つあるのですが FCコマンドで差分を出力したところ文字化けしてしまいました。 何か良い方法はないでしょうか?
218 名前:デフォルトの名無しさん mailto:sage [2017/10/11(水) 07:47:52.42 ID:S/IKnpLv.net] メモ帳でSJISで保存する
219 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 16:57:41.08 ID:c/LUECgg.net] なんでSJISなんだよ、unicodeにすればいいじゃん(Windows2000,XPは除く) @echo off set f1=%1 set f2=%2 if not defined f2 echo 引数1.2に比較するファイルパスを指定してください& goto :eof if not exist %f1% echo ファイル %1 がありません& goto :eof if not exist %f2% echo ファイル %2 がありません& goto :eof start "" /min /wait cmd /u /c "chcp 65001 & type %1>u_%1 & type %2>u_%2" chcp 932>nul fc /u /n u_%1 u_%2 del u_%1 u_%2
220 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 18:25:29.18 ID:c/LUECgg.net] start付けるとうまくいかないな 訂正 start "" /min /wait cmd /c "chcp 65001&cmd /u /c type %1>u_%1&cmd /u /c type %2>u_%2" fc /u /n u_%1 u_%2
221 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 01:07:49.23 ID:rrtzmh2c.net] バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが いろいろやってみたのですが、というほどの力もなく お知恵お貸し下さい 処理前のフォルダ名一覧 1008安住紳一郎の日曜天国 10月15日安住紳一郎の日曜天国 10月15日爆笑問題の日曜サンデー (1) 10月15日爆笑問題の日曜サンデー (2) 処理後のフォルダ名 1008安住紳一郎の日曜天国 1015安住紳一郎の日曜天国 1015爆笑問題の日曜サンデー (1) 1015爆笑問題の日曜サンデー (2)
222 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 04:34:03.61 ID:3Tj/cKOj.net] vbs 正規表現置換 ファイルリネーム
223 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 08:11:27.58 ID:GL/w6Jlo.net] >>215 for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r "[0-9][0-9]月[0-9][0-9]日"') do call :SUB "%%~a" exit /b :SUB set s=%~1 ren %1 "%s:~0,2%%s:~3,2%%s:~6%"
224 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:00:12.58 ID:rrtzmh2c.net] >>216 ヒント下さったようでありがとうございます。でも、ゼロから書き始めることが出来ないんです。 >>217 私の求めていた動作です。これで完璧、ありがとうございます ひと安心して解析に移ったわけです。。。 1. "[0-9][0-9]月[0-9][0-9]日" ↑これでは22月33日にも対応というわけか、こやつめハハハ フォルダ名の行頭部分は日付として機械的に生成される予想できる値ですので[0-9]で何の問題もないです。 勉強の為に、ここをいじってみました。 Month部分は、1 2 3...10 11 12、なら[1-12]で済むのかな。 ところが0埋めなので、01 02 03...10 11 12、となると、0[1-9]|1[0-2]、かな。 Day部分は、01 02 03...29 30 31、うーん0[1-9]|[1-2][0-9]|3[0-1]、となる。 これらを書き換えてみて、はい、動きませんでした。 今回のような自分用プログラムは動けばよいわけで、教えて下さった[0-9]で何の問題もない。 これ以上無駄な時間を掛けても&シンプルな方が可読性がよい
225 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:01:09.80 ID:rrtzmh2c.net] 2. for a in ('標準出力 パイプ 標準入力') do この部分、パイプの縦棒の左にくっついてる^は何者なのでしょう。。。初めて見ました。 アッ、日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし、そもそもパイプの左になぜ? 検索してみたのですがわからずここで冷や汗が出てきて ウーンこれはなんなんだろう。そもそもメタ文字なのか銅貨さえわからない。 3. そもそも何をしているのかというとradikoという
226 名前:vログラムでお気に入りのラジオ番組を録音しています。 AMラジオ番組ではCMのほとんどが過払い金のCMで聞きたくないのでスキップしたいのです。 ウォークマンで右ボタンを長押しすると早送り再生になるのですが、突然入るCMにイラッときて 長押しではなく短く押してしまって次のmp3ファイルに飛んでしまうのです。イライラッ! そこで1分ごとに分割してしまうことにしました。mp3directcutというソフトを使って切り出すことが出来ることを 知りました。そのうち、切り出し作業が面倒になって調べていくうちにコマンドラインでの実行も可能と分かり、 バッチファイル化の作業に掛かりました。出来上がったのは以下のような4行のバッチファイルです。 @echo on echo %* for /D %%a in (%*) do (mkdir "%%~na")&(copy 1min.mpd "%%~na".mpd)&(mp3directcut "%%~fa" /autocue "%~dp1%%~na")&(del "%%~fa")&(del "%%~na".mpd) pause 1min.mpdというのは1分ごとに切る指定が記述されているキューファイルです。同名の.mpdファイルがあるとそれを使ってくれるみたいなので、最初に元ファイルとして作っておきます。 1分ごとに切り分けられたものを再生してもけっこう大丈夫で、音楽だと気付く程度です。 いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます [] [ここ壊れてます]
227 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:34:41.57 ID:1IRdIkAf.net] >>219 ^(キャレット)はエスケープ文字 これを付けずに実行すると、コマンドラインパーサで式評価時にパイプとして機能しちゃう つまりfor文の途中にパイプが現れてそこで途切れちゃうことになる やりたいことは、この行の最初の評価時には単なる|の文字として取り扱ってもらい 次の''で括ったコマンドの評価時にはパイプとして機能してほしいってわけ 1回の評価を→で表すとすると、 ^| → | ^^| → ^| → | ^^^^| → ^^| → ^| → | って感じに展開されていく(俺は3回まで使ったことがある) %a%とかの環境変数の評価も似たようなもんだね %%a%% → %a%
228 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:49:53.08 ID:1IRdIkAf.net] 環境変数の評価を遅延させる方法はつまり %%temp%%と%^temp%との2通り書けるわけだ (結果的に同じになるけど動作は違う)
229 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:57:55.48 ID:1IRdIkAf.net] >>221 これはコマンドプロンプトでのことでbatに書くときはダメだね
230 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 00:03:17.05 ID:bWF1v8hX.net] 評価と展開がごっちゃになってる 俺の理解が浅い(忘れっぽい)せいだな
231 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 07:18:41.23 ID:3NFRyYoM.net] ここで言ってる遅延と、いわゆる「遅延展開」は別物ですか?
232 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 09:05:40.81 ID:fpIKg5e5.net] >>218 >Month部分は、1 2 3...10 11 12、なら[1-12] []は文字集合。[]内の文字のうち何れか1文字という意味。文字列は扱えない [1-12]だと"1-1"と"2"という意味で1か2になる 01-12月、01-31日を表すのなら [01][0-9]月[0-3][0-9]日 [01]が0か1で十の位、[0-9]が0から9で一の位 桁の揃っている01なら可能だが1-12月はfindstrの貧弱な正規表現では1度に表すのは無理なので 1桁の場合と2桁の場合とを別けて検索文字列に設定する必要がある ちょ、誰か findstr /r "検索文字列" とfindstr /r /c:"検索文字列" の違いを教えてくれ。忘れた
233 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 10:39:26.27 ID:AWu3veoe.net] >>225 解説ありがとうございます とりあえず日付の所いろいろやってみてるのですがうまく行かないままです。 正規表現といわず直接文字列を指定して | が有効になる
234 名前:ゥどうかというところから実験してます。 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 を読みました。読んだだけです。頑張ります [] [ここ壊れてます]
235 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 11:38:46.09 ID:fpIKg5e5.net] >""10月15日"|"10月16日"" "で""を囲えないしfindstrの正規表現で|は使えない findstr /? まともな正規表現を使いたければvbsやPowerShell、Perlとか別のスクリプトに行ったほうがいい バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる 急がば回れ
236 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 22:45:54.56 ID:bWF1v8hX.net] 参考に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 || "対象フォルダなし");
237 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 23:49:36.84 ID:G9wCIPXR.net] もうPowerShellのRename-Item使おうぜ 個人用途だろうし制約ないでしょ
238 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 02:49:24.30 ID:nuzaMfIv.net] 覚えたてによく居るよね 要件無視した勝手な仕様でエラー判定とか結果ダイアログとかゴテゴテ実装してドヤ顔で持ってきちゃう子
239 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 02:57:26.06 ID:O0s7d+Fx.net] まあダブルクリックで不意に実行されちゃうようなのは作りたくないよな
240 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 07:04:24.46 ID:G1+K6kx+.net] >>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
241 名前:"!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%!" [] [ここ壊れてます]
242 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 22:17:20.50 ID:on6I0HDV.net] >>231 うちの現場のバッチは例え内部で使わなかろうが最低1つは必ず引数を渡す仕様になってる。 そしてそれが渡されなかった場合は処理せずに終了する作りになっている。 理由は誤ってダブクリしちゃった場合の対策なんだってさ。
243 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 22:23:22.61 ID:hY2xT5yc.net] batって大体はD&Dして使うようなの書いてるな
244 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 01:03:03.64 ID:cgLUQcTs.net] >>230 なんか癇に障ったみたいだけど、言い訳すると 俺は、質問者によって回答内容を変えてる 今回の質問者は初心者だと感じたし、さらには細かい拘りを持っているように見受けられた (13月32日なんて作らないだろうし、もしあったって1332に変換されて悪いことはないと思う) 色々と手を加えて試行錯誤することが好きなんだろうなって思ったから 役に立ちそうな追加部分を記述した それに1レスで書く分には、数行増えようが関係ないだろうと思ったしね
245 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 08:32:22.21 ID:ny4cf+Vz.net] >>233 なるほど
246 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 22:12:55.60 ID:JROgBEvY.net] ザ・ワールド、時よ止まれ。
247 名前:デフォルトの名無しさん [2017/10/20(金) 03:00:35.66 ID:1Na2h1P4.net] キッティングの自動化をしたいんだが、参考になるサイトない?
248 名前:デフォルトの名無しさん [2017/10/20(金) 03:00:59.71 ID:1Na2h1P4.net] 対象のレジストリ見つけるとかめんどい
249 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 23:41:00.84 ID:aZN6SiIl.net] どの程度の自動化?
250 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:56:40.19 ID:Nsvn2WYb.net] >>238 何を自動化するん?
251 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 16:42:48.10 ID:DofUW9OG.net] そんなんツールが出てるんだからその説明でも読めよ
252 名前:デフォルトの名無しさん [2017/10/21(土) 18:43:14.12 ID:TBS9tbdH.net] 一発で、ファイアウォールの受信規則とかインターネットオプションとか
253 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 07:51:26.89 ID:eb/3UN8i.net] >>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 で、該当する全フォルダ名を変換する
254 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 14:53:59.01 ID:1YRZU7Jo.net] 問題は、月を01〜12まで、日を01〜31までのチェックを入れることだけどね
255 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 16:29:48.93 ID:rLFHcAK9.net] >>244 ls <directory-name> -directory | ren -newname {$_.name -replace '^(¥d+)月(¥d+)日', '$1$2' } lsの-filterやwhere-object使ってもいいけど こ
256 名前:の例の場合は不要だと思うよ [] [ここ壊れてます]
257 名前:デフォルトの名無しさん [2017/10/23(月) 07:20:31.59 ID:A3jhOkfm.net] ls -directory | ren -WhatIf -newname {$_.name -replace '^(\d+)月(\d+)日', '$1$2' } 上記で、where-object が無いと、 変更されないフォルダまで、表示されるのが気持ち悪い
258 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 22:30:10.89 ID:TV21zs/8.net] Windows7SP1では、Get-ChildItemに-directoryオプションは無いんでエラーが表示された 調べたら、3.0以降でこのオプションが付いた模様 この際なので、5.0,5.1をインストールした Windows7の人の参考まで
259 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 18:41:12.61 ID:QQrV41zo.net] PowerShellのスクリプトファイルの拡張子は普通.ps1を使うが デフォルトではファイルの実行を許可してないし、 また許可後もダイレクトにファイル名を指定しても実行できない って保険かけすぎで入門者には敷居が高いだろと思わないでもないなあ >>247 where-objectを入れてみた (まだ2時間ぐらいしかやってないんでもっといい書き方があるかも) $re='^(\d+)月(\d+)日';ls -directory|? name -match $re|ren -whatif -newname {$_.name -replace $re,'$1$2'} このスレ的にはアリアス使うなら、lsよりもdirが合ってる気もするけど
260 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 20:22:18.43 ID:+gpl8JNW.net] ここで聞くべきか迷ったのですが… 自分のマシンからリモートデスクトップで接続できるサーバー(確かWin2008R2)があって そのサーバーと同じネットワーク内にクライアント端末(Win7)があります。 そのクライアント端末のプロセスをリモートデスクトップで接続したサーバーから確認することは可能でしょうか? (サーバーには管理者権限で接続しています) 要はクライアント端末でtasklistコマンドを打った結果が見たいのですが。 ちなみにクライアント端末はDHCP設定なので起動のたびにIPアドレスが変わります… 今は1日に何度も遠くにあるクライアント端末まで行ってプロセスを確認しています。 1回だけ行ってIPアドレスをメモるぐらいなら全然構わないので何か方法があれば教えて下さい。
261 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:42:45.24 ID:91m0YuAi.net] クライアントに自分のタスクリストをファイルを記録する周期ジョブを作成しておく 必要であれば暗号化しておく そのファイルをメールで自動送付するようにしておくか、 クライアントにwebエリアがあればそこに置きこちらから見にいく
262 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:52:08.46 ID:z1gogpom.net] >>250 サーバから tasklist /s クライアント端末名 (/u user /p pass) を実行では見れないんですか? ファイアウォールの設定が必要かもしれませんけど。
263 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 22:47:57.34 ID:+QQUmgGP.net] >>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アドレスを通知してもらう
264 名前:250 mailto:sage [2017/11/04(土) 18:18:26.62 ID:HSP2f8JH.net] みなさん情報ありがとうございます。 来週になったらとりあえず>>252 さんの方法を試してみます。(一番手軽なので…汗) それでダメな場合は一日一
265 名前:直接IPアドレスを確認しにいく方式にします。 というのもpingのブロードキャストは現場のルールで禁止されてるっぽいので。 クライアント端末も特別な用途のためのものなのでタスク作ったり何かを仕掛けるのは厳しそうです。 仕掛けられれば業務はすごく楽になるんですけど「セキュリティ上問題が…」とか言われて突っぱねられる可能性大です。>< 尚、pingブロードキャスト以外の方法でIPを知る方法については自分でも調べてみます。 どうもありがとうございます。助かりました! [] [ここ壊れてます]
266 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 18:30:41.27 ID:sTeHaJ1X.net] >>254 >>252-253 に書いてあるけど事前にクライアント側の設定しないとtasklist /sでプロセス情報見れないけど、そこは大丈夫なの?
267 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:20:45.02 ID:rFS24mxQ.net] set infilenm=001.txt set outfilenm=002.txt set beforestr="""" set afterstr="" type nul >%outfilenm% setlocal enabledelayedexpansion for /f "delims=" %%A in (%infilenm%) do ( set line=%%A echo !line:%beforestr%=%afterstr%!>>%outfilenm% ) endlocal 001.txtからダブルクォーテーションを削除して002.txtに保存したいだけなんですが、 3行目と4行目の表記がわからず、考えられる限り書き直して、うまくいきません。 あるいは別のBATでもいいのですが教えてください。
268 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 11:42:01.62 ID:vm51NJQ8.net] >>256 set beforestr=^^" set afterstr=^^ でどうかな?
269 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 11:56:26.30 ID:vm51NJQ8.net] ただ001.txtのデータ次第でうまくいかない場合があるんで 別のスクリプト言語(PowerShellやWSH等)で書いたほうがいい
270 名前:256 mailto:sage [2017/11/05(日) 12:18:29.39 ID:rFS24mxQ.net] >>257 >>258 素早いお答えありがとうございます。 >>257 >set beforestr=^^" >set afterstr=^^ ダブルクォーテーション消えました! ありがとうございました。
271 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:20:27.79 ID:vm51NJQ8.net] >>259 どういうことに使うのか知らないけど、大切なデータなら止めとくべき 改行だけの行が消えるのは知ってると思うけど以下のような行があると(回避は可能だが) ab!cd!ef a! "b ^
272 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:40:33.57 ID:rFS24mxQ.net] >>260 ご心配ありがとうございます。 大丈夫です。ものは、<a href とかのhtmlタグで作成したリンクリストで、 正規表現とかエスケープっぽい記号等はなく、 そもそもプライベートファイルなので、これで素早くリストができて万々歳です。
273 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 15:18:34.73 ID:K1roLwuw.net] >>260 これじゃダメか? ていうかダメな例を教えてほしい for /f "delims=" %%i in (1.txt) do ( set a=%%i setlocal enabledelayedexpansion echo !a:^"=!>>2 .txt endlocal )
274 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 15:59:22.60 ID:K1roLwuw.net] 半角スペースだけの行は化けるな
275 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 19:12:27.47 ID:Mdq5cGE3.net] echo,とか、echo;とかで