[過去ログ]
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1489207631/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
200: デフォルトの名無しさん [sage] 2017/09/19(火) 02:17:59.79 ID:Lhe/hdFe mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう うまくいくかどうかわかりませんが ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね http://mevius.5ch.net/test/read.cgi/tech/1489207631/200
201: デフォルトの名無しさん [sage] 2017/09/20(水) 03:12:37.88 ID:aIPv0JYK >>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 http://mevius.5ch.net/test/read.cgi/tech/1489207631/201
202: 196 [sage] 2017/09/20(水) 06:44:59.65 ID:w13Y3qRA >>201 自分の説明が下手で伝わらなかったんだと思いますが、成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです。 引数にダブルクオーテーションを含まない場合は正常に起動できます。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/202
203: 196 [sage] 2017/09/20(水) 07:01:29.72 ID:w13Y3qRA 一応追記しておくと、おかしくなるのはタスクスケジューラから起動した場合限定で通常の起動では問題ありません。 呼び出すbat内の記述にミスがあるとかそういうのではないと思います。 http://mevius.5ch.net/test/read.cgi/tech/1489207631/203
204: デフォルトの名無しさん [sage] 2017/09/21(木) 11:18:59.39 ID:WXZB4PjF %CMDCMDLINE%はどうなってる? http://mevius.5ch.net/test/read.cgi/tech/1489207631/204
205: デフォルトの名無しさん [sage] 2017/09/21(木) 18:15:09.28 ID:X0F1M9Qy argumentにダブルクォーテションがある場合もパスと同様に\"してる? http://mevius.5ch.net/test/read.cgi/tech/1489207631/205
206: デフォルトの名無しさん [sage] 2017/09/21(木) 18:35:03.44 ID:uKBRYTKY test http://mevius.5ch.net/test/read.cgi/tech/1489207631/206
207: 196 [sage] 2017/09/21(木) 18:38:58.99 ID:uKBRYTKY NGワードが含まれていたようなので他所に書きました https://pastebin.com/9yMQfC37 http://mevius.5ch.net/test/read.cgi/tech/1489207631/207
208: デフォルトの名無しさん [sage] 2017/09/24(日) 20:04:30.28 ID:0vysq0yQ 基本的に引数の中の半角スペースはデリミタであり そこより左に " が奇数個あればデリミタじゃなくなる それに関しては \" とか ^" とかあっても関係ないんじゃね http://mevius.5ch.net/test/read.cgi/tech/1489207631/208
209: デフォルトの名無しさん [sage] 2017/09/25(月) 14:27:46.65 ID:aNTDK6ge >>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\"\"" これだと実行ファイルのパスにスペースがあっても問題ない http://mevius.5ch.net/test/read.cgi/tech/1489207631/209
210: 196 [sage] 2017/09/26(火) 15:58:12.82 ID:dvSxVtoZ >>209 なるほど、直接batを登録するのではなくてcmdのほうを登録すれば良かったんですね 思いつきませんでした 助かりました、ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1489207631/210
211: デフォルトの名無しさん [sage] 2017/10/10(火) 23:43:05.86 ID:Z33TeZgR 文字コードがUTF8のテキストファイルが2つあるのですが FCコマンドで差分を出力したところ文字化けしてしまいました。 何か良い方法はないでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1489207631/211
212: デフォルトの名無しさん [sage] 2017/10/11(水) 07:47:52.42 ID:S/IKnpLv メモ帳でSJISで保存する http://mevius.5ch.net/test/read.cgi/tech/1489207631/212
213: デフォルトの名無しさん [sage] 2017/10/12(木) 16:57:41.08 ID:c/LUECgg なんで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 http://mevius.5ch.net/test/read.cgi/tech/1489207631/213
214: デフォルトの名無しさん [sage] 2017/10/12(木) 18:25:29.18 ID:c/LUECgg 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 http://mevius.5ch.net/test/read.cgi/tech/1489207631/214
215: デフォルトの名無しさん [sage] 2017/10/16(月) 01:07:49.23 ID:rrtzmh2c バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが いろいろやってみたのですが、というほどの力もなく お知恵お貸し下さい 処理前のフォルダ名一覧 1008安住紳一郎の日曜天国 10月15日安住紳一郎の日曜天国 10月15日爆笑問題の日曜サンデー (1) 10月15日爆笑問題の日曜サンデー (2) 処理後のフォルダ名 1008安住紳一郎の日曜天国 1015安住紳一郎の日曜天国 1015爆笑問題の日曜サンデー (1) 1015爆笑問題の日曜サンデー (2) http://mevius.5ch.net/test/read.cgi/tech/1489207631/215
216: デフォルトの名無しさん [sage] 2017/10/16(月) 04:34:03.61 ID:3Tj/cKOj vbs 正規表現置換 ファイルリネーム http://mevius.5ch.net/test/read.cgi/tech/1489207631/216
217: デフォルトの名無しさん [sage] 2017/10/16(月) 08:11:27.58 ID:GL/w6Jlo >>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%" http://mevius.5ch.net/test/read.cgi/tech/1489207631/217
218: デフォルトの名無しさん [sage] 2017/10/16(月) 23:00:12.58 ID:rrtzmh2c >>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]で何の問題もない。 これ以上無駄な時間を掛けても&シンプルな方が可読性がよい http://mevius.5ch.net/test/read.cgi/tech/1489207631/218
219: デフォルトの名無しさん [sage] 2017/10/16(月) 23:01:09.80 ID:rrtzmh2c 2. for a in ('標準出力 パイプ 標準入力') do この部分、パイプの縦棒の左にくっついてる^は何者なのでしょう。。。初めて見ました。 アッ、日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし、そもそもパイプの左になぜ? 検索してみたのですがわからずここで冷や汗が出てきて ウーンこれはなんなんだろう。そもそもメタ文字なのか銅貨さえわからない。 3. そもそも何をしているのかというとradikoというプログラムでお気に入りのラジオ番組を録音しています。 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分ごとに切り分けられたものを再生してもけっこう大丈夫で、音楽だと気付く程度です。 いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます http://mevius.5ch.net/test/read.cgi/tech/1489207631/219
220: デフォルトの名無しさん [sage] 2017/10/16(月) 23:34:41.57 ID:1IRdIkAf >>219 ^(キャレット)はエスケープ文字 これを付けずに実行すると、コマンドラインパーサで式評価時にパイプとして機能しちゃう つまりfor文の途中にパイプが現れてそこで途切れちゃうことになる やりたいことは、この行の最初の評価時には単なる|の文字として取り扱ってもらい 次の''で括ったコマンドの評価時にはパイプとして機能してほしいってわけ 1回の評価を→で表すとすると、 ^| → | ^^| → ^| → | ^^^^| → ^^| → ^| → | って感じに展開されていく(俺は3回まで使ったことがある) %a%とかの環境変数の評価も似たようなもんだね %%a%% → %a% http://mevius.5ch.net/test/read.cgi/tech/1489207631/220
221: デフォルトの名無しさん [sage] 2017/10/16(月) 23:49:53.08 ID:1IRdIkAf 環境変数の評価を遅延させる方法はつまり %%temp%%と%^temp%との2通り書けるわけだ (結果的に同じになるけど動作は違う) http://mevius.5ch.net/test/read.cgi/tech/1489207631/221
222: デフォルトの名無しさん [sage] 2017/10/16(月) 23:57:55.48 ID:1IRdIkAf >>221 これはコマンドプロンプトでのことでbatに書くときはダメだね http://mevius.5ch.net/test/read.cgi/tech/1489207631/222
223: デフォルトの名無しさん [sage] 2017/10/17(火) 00:03:17.05 ID:bWF1v8hX 評価と展開がごっちゃになってる 俺の理解が浅い(忘れっぽい)せいだな http://mevius.5ch.net/test/read.cgi/tech/1489207631/223
224: デフォルトの名無しさん [sage] 2017/10/17(火) 07:18:41.23 ID:3NFRyYoM ここで言ってる遅延と、いわゆる「遅延展開」は別物ですか? http://mevius.5ch.net/test/read.cgi/tech/1489207631/224
225: デフォルトの名無しさん [sage] 2017/10/17(火) 09:05:40.81 ID:fpIKg5e5 >>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:"検索文字列" の違いを教えてくれ。忘れた http://mevius.5ch.net/test/read.cgi/tech/1489207631/225
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 773 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.024s