1 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 01:20:20.25 ] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。 前スレ 【.cmd】 バッチファイルスクリプト %7 【.bat】 hibari.2ch.net/test/read.cgi/tech/1298873550/ 【.cmd】 バッチファイルスクリプト %6 【.bat】 hibari.2ch.net/test/read.cgi/tech/1277465356/ 【.cmd】 バッチファイルスクリプト %5 【.bat】 pc12.2ch.net/test/read.cgi/tech/1242268171/ 【.cmd】 バッチファイルスクリプト %4 【.bat】 pc12.2ch.net/test/read.cgi/tech/1229955189/ 【.cmd】 バッチファイルスクリプト %3 【.bat】 pc11.2ch.net/test/read.cgi/tech/1217860043/ 【.cmd】 バッチファイルスクリプト %2 【.bat】 pc12.2ch.net/test/read.cgi/tech/1197881068/ 【.cmd】 バッチファイルスクリプト %1 【.bat】 pc11.2ch.net/test/read.cgi/tech/1178281991/
2 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 03:21:34.21 ] 四十年勤め上げた會社を退職し早二十年、何やら張り合いの無い日々を送る内、大學生の孫に「退屈しのぎに遣って見たまへ」と勸められた弐チヤンネル。 當初は「こんな電腦掲示板、何たる幼稚加減」と莫迦にしてゐたものの、遣つて見ると存外に面白ひ。 華やかな色彩の髪と目を持つうら若き乙女に「ゆとり乙」と何度と無く罵られるにつけ、食ふや食はずやで慌しく過ぎ去つた學生時代が自ずと思ひ返され、「戰爭さえ無ければ、小生もこのやうな青春が送れたやも知れぬ」と獨りごちることも屡々。 すつかり虜となつた今では、孫の部屋から白銀色の電腦計算機をせしめては書齋に篭もり存分に「祭り」を堪能する毎日を送つている。 同年代の友人達が癡呆や重い病に惱まされるなか、老いて尚矍鑠としてオフ會に向かえるのも、ひとえに弐チヤンネルのおかげかと思えば、再三に渡る「半年ROMつてろ」の罵り文句も、何やら「まだまだ死ぬには早いよ」と言われているようで愉快極まりない。 ひとつ間違えれば自らが乗り込んでいた機體と同じ名前を持つコテハンに出會える日を樂しみにしつつ、今日もデスプレヱに向かう。 それでは、弐ゲツト。
3 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 04:27:24.68 ] >>1 乙であります forでのリネームについての質問なんですが、例えば フォルダのみ先頭に()を付ける場合 for %%A in (*) do ( ren "%%A" "()""%%A" ) と考えたんですが、bat自身だけが()追加でフォルダは何も変わりませんでした。 ren "%%~A" "()""%%~nA" かと思ったんですが、これは「ファイル」名であって「フォルダ」名じゃないんですかね… 上記の場合はどうすればよいのでしょうか?
4 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 08:41:22.63 ] for /d %%a in (*) do (ren "%%a" "() %%a")
5 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 09:07:56.89 ] >>4 フォルダ=ディレクトリ名だったんですね。 お恥ずかしい限りです。ありがとうございました。
6 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 15:24:14.47 ] フォルダ⊃ディレクトリ ファイルフォルダ=ディレクトリ
7 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 07:54:35.50 ] 親フォルダにある複数の子フォルダの中で 子\孫\ファイル(子フォルダ内には孫フォルダしかない)場合に 子\ファイルという構造に直したいのですが この場合どのようにbatを作れば良いのでしょうか? 親フォルダ内…子1子2子3〜フォルダ 当該bat tmp(この為に作成するフォルダ) 子1内…孫フォルダ 子2内…孫フォルダ+ファイル 子3内 ファイル いま失敗中なのが↓になります。 cd "\Users\owner\Desktop\親\*\" if exist * () [else cd "\Users\owner\Desktop\親\*\*\" move * "C:\Users\owner\Desktop\親\tmp\" del "C:\Users\owner\Desktop\親\*\" cd "C:\Users\owner\Desktop\親\tmp\" move * "C:\Users\owner\Desktop\親\*\" ] ホント初心者ですいません… どうかよろしくお願いします。
8 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 10:48:20.95 ] >>7 あのさあ、自分で調べたり試したりする気の無いやつには よほど暇なひきこもりの教えたがりしかレスしてくれないと思うよ cd "\Users\owner\Desktop\親\*\" 1行目のこれすら思ったように動いてないんじゃない? コマンドの書き方が間違えてるかどうかなんて 1行ずつ確認すればいいだけなんだからさ > 子フォルダ内には孫フォルダしかない)場合に この部分がたぶん君には出来ないと思うけど 今はそれ以前の問題だから出直しておいで
9 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 10:55:27.83 ] >>8 大変失礼を致しました。出直してきます。 申し訳ありませんでした。
10 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 17:03:09.58 ] 孫フォルダが在るか無いかはdir /adすればいいから簡単だけど 孫フォルダしかないってどうやって判定すんの?
11 名前:7 mailto:sage [2011/09/16(金) 19:05:04.84 ] 条件無しまでは出来るようになりました。 1for /d %%a in (*) do (cd "\Users\owner\Desktop\親\%%a\*" 2for /d %%b in (*) do (cd "\Users\owner\Desktop\親\%%a\%%b\*" 3cd "\Users\owner\Desktop\親\%%a\*" 4if [not] exist *.* ( 5cd "\Users\owner\Desktop\親\%%a\%%b\*" 6move *.* .. 7for /d %%c in (*) do (move "%%c" ..) 8rd %%b 9))) 345削除9))であれば全ての孫内がそのまま子に移り、空の孫フォルダは消えました。 最後の問題はIFなんですが、どこが間違ってるか文法が違うのか…もう頭が回りません。 どうか知恵をお貸しください。よろしくお願いします。 >>8 問題外でしたらすいません。
12 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 19:45:50.38 ] >>11 fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/if/exist/4-1001.html
13 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 20:05:31.84 ] > 4if [not] exist if exist a.txt () if not exist a.txt () [] は要らないよ
14 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 21:16:01.59 ] >>12 読み取れる内容が沢山あるのだと思いますが、私のレベルでは とりあえず*.*と*は使えない、かもしれない、という次元なので もうちょっとしっかり読めるように精進したいと思います。 ご紹介ありがとうございました。 >>13 今まで即オチだったのですが、[]を外して*.txtにしたら無事に処理が終わりました。 後は*.txt以外の拡張子や、フォルダが2つ以上ある場合には処理をしないでおきたいのですが 私のレベルでは今が精いっぱいみたいです…。アドバイスありがとうございました。 >>8 >> 子フォルダ内には孫フォルダしかない)場合に >この部分がたぶん君には出来ないと思うけど お恥ずかしながら、案の定出来ませんでした。どうかご教示願えないでしょうか?
15 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 21:37:02.69 ] >>14 ファイルにアーカイブ属性が付いていることを前提にできれば カレントフォルダが子フォルダのときに `dir /aa /b` でforループで回して、 1件以上ヒットしたらファイルがあるってことで判定できるんじゃないかな? ヒットフラグ保持は環境変数を使う。 軽く考えただけなので 抜けがある or 間違っている かも知れんがw
16 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 22:16:53.68 ] >>15 DIRを使った事がなく意義もよく理解できてないので仰る意味が分からないのですが 時間をかけて理解していこうと思います。ありがとうございました。
17 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 22:33:44.91 ] dir /a-d >nul 2>&1||dir /ad |find "個のディレクトリ" これの結果が3ならフォルダが1個しかないってことになるんだが tmp.txtに一旦書き出すとかしないと受け取れないものなのかな? 別バッチなりサブルーチン化してパス引数にして投げたら フォルダひとつなら1それ以外なら0を返すとかにしたほうがいいかもな
18 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 22:37:35.59 ] dir /a-d >nul 2>&1||for /f "tokens=1,*" %%a in ('dir /ad ^|find "個のディレクトリ"') do ( if %%a==3 (フォルダひとつの時の処理) ) これでいけるんじゃない?
19 名前:11 mailto:sage [2011/09/17(土) 08:12:02.15 ] 昨日はありがとうございました。疲れて寝てしまいました。 >>17 カレントフォルダを子フォルダに移動して紹介して頂いたコマンドを実行しましたところ 子0フォルダに孫0フォルダしかない場合には下記のように表示され ttp://pc.gban.jp/?p=33896.jpg 子0フォルダに孫0フォルダ以外がある場合には下記のように表示されました ttp://pc.gban.jp/?p=33897.jpg どうもありがとうございます! >>18 無事に目的を達成する事ができました! 構文の意味も合わせて今日はdirの勉強をしたいと思います。 本当にありがとうございました。もの凄く助かりました。
20 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 08:44:37.32 ] >>19 よかったね、おめでとう!そしてありがとう! 横からdさせてもらったw 実は俺も初心者なんだけど例えば>>11 のカレントフォルダの移動をもっと楽に、 または汎用的にどこのフォルダに置いても出来る方法ってないですかね?
21 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 09:42:14.91 ] >>20 試作中みやすく失敗しないようにフルパスで書いてたんですが >汎用的にどこのフォルダに置いても出来る方法 であれば最初の行にset pass=%~p0を置く事で可能になります。 後は該当箇所に代入してけば親フォルダ\当該batである限りは自動でやってくれると思います。 処理したい親フォルダが沢山ある場合には set 任意の文字=親フォルダのパスをコピペ これで複数のbatを作って一か所に置いておくのも便利だと思います。 それで今は、これらをさらに1つのbatで命令できるように考え中です。 私も初心者ですがお互い頑張りましょう!
22 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 11:04:10.38 ] >>21 ありがとうございます!出来ました!
23 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 11:47:42.67 ] > set pass=%~p0 set DPATH="%~dp0" のほうがいい set DPATH="%~dp1" でバッチに親フォルダをドロップして使える > 処理したい親フォルダが沢山ある場合には dlist.bat main.bat "処理したいフォルダのPATH_1" "処理したいフォルダのPATH_2" "処理したいフォルダのPATH_3" exit /b と、処理したいフォルダのPATHのリストをmain.batに渡す別のバッチを用意してmain.batで main.bat :loop set DPATH=%1 REM "%~dp1"でもいいけどdlist.batのほうで""を付けてるなら%1でも問題ないはず 〜処理〜 shift if exist %1 (goto :loop) exit /b とかすればまとめて処理出来る、、と思う。
24 名前:23 mailto:sage [2011/09/17(土) 11:52:51.52 ] 訂正 if exist %1 (goto :loop) ↓ if exist "%~1" (goto :loop) こうしないと最後に%1がないよと怒られる、、かな?
25 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 12:32:21.55 ] > 構文の意味も合わせて今日はdirの勉強をしたいと思います。 >nul 2>&1 d.hatena.ne.jp/horus531/20101230/1295162296 リダイレクトで調べれ || は>>12 にもあったけど コマンド1 || コマンド2 でコマンド1が失敗したらコマンド2を実行する (コマンド1が成功したらコマンド2は実行しない) コマンド1 && コマンド2 だとコマンド1が成功したらコマンド2を実行 (1が失敗したら2は実行しない) dir /ad ^|find "個のディレクトリ" | はパイプといって、 コマンド1 | コマンド2 でコマンド1の標準出力をコマンド2へ受け渡す コマンド2が標準出力を受け取れないコマンドだと意味無い、、はず dir /ad の結果を find "個のディレクトリ" へ渡してる ^はエスケープ for /f %変数 in ('コマンド') do () のコマンドの中だとパイプをエスケープしないとエラーになる 他には & ) とかもエスケープが必要かな あとは各コマンドのヘルプなりググるなりがんばれ
26 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 12:53:03.11 ] >>23-24 全部CDの後に代入だったんでp0で間に合うかなと思ったんですが訂正しておきます。 それとset DPATH="%~dp1"は目から鱗な使い方でした。bat同士のまとめ方まで紹介して頂いて 本当に助かります。ありがとうございます。 今から出かけるので試作は遅れますが、是非とも参考にさせて頂きます。 色々とありがとうございました。 >>25 >>18 の構文がnul以降からずっとチンプンカンプンだったので感動しました。 記号だけでぐぐっても検索できないので非常に勉強になります。 有益すぎる解説をありがとうございました。とても学びやすいです。 後は理解できるよう励みたいと思います。多謝!
27 名前:さん mailto:sage [2011/09/17(土) 14:12:43.35 ] [%USERPROFILE%\ping.bat] %SystemRoot%\system32\ping 192.168.0.1
28 名前:デフォルトの名無しさん [2011/09/18(日) 23:18:24.10 ] batを使ってPowerShellのPolicyを取得してから、 PolicyをRemoteSignedにして、PowerShellを実行させ その後元のPolicyに戻したいのですが、BATファイル内で PowerShellのPolicyを扱うやり方が思いつきません。 自分が思いついたのは下記ですがPolicyが変数内に 入りませんでした。 正しいやり方をご存じの方、お教え願えないでしょうか? PowerShell $Policy = Get-ExecutionPolicy set PSpolicy=$Policy
29 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 00:10:48.78 ] for /f %%I in ('PowerShell Get-ExecutionPolicy') do set PSpolicy=%%I
30 名前:28 mailto:sage [2011/09/19(月) 01:56:42.65 ] >29 早々の回答ありがとうございます。 batのforの使い方を初めて知りました。 恥ずかしながらforはループ関数だと思っていました。 一つ経験値上がったと思います。 本当にありがとうございました。
31 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 10:44:40.50 ] >>29 とは別人ですが・・・ >>30 いや、forはループ関数だよw >>29 はPowershellの結果の出力が1行しかないから1回だけまわるループ。 コマンドの出力内容がカウンタ変数(%%I)に格納されるから都合がいいってこと
32 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 11:33:16.60 ] バッチはforが単なるループ関数ではないと知る事が最初の一歩
33 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 16:44:36.33 ] policy変えずに実行すりゃいいのにね
34 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 23:20:15.11 ] すいません、質問です。下記のような処理をしたいのですが どうbatを書けばよいのか分かりません。 Z:\hoge\aaa\あああ\1.txt、2.txt、3.txt、4.txt ↓@ ↓移動 ↓移動 Z:\hoge\bbb\あああ\1.txt、 3.txt @=1.txtと3.txtを反転させて右クリ>送る>このbat このbat set HIRAGANA= move %1 "Z:\hoge\bbb\%HIRAGANA%\" 平仮名フォルダが沢山あるので、ドロップしたファイルの直前のフォルダ名を setで設定できれば出来そうな気もするのですが… dirでググッてみたのですがカレントフォルダ内はあっても カレントフォルダ自体?の名前をどうやれば取得できるのか分かりませんでした。 どうかご指導のほどよろしくお願いします。
35 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 23:29:20.20 ] >>34 ファイル選択して右クリ→batに送る だから 複数ファイルをバッチにドロップしたいってのはわかった ファイルをmoveさせたいんだとは思うけど バッチにどういう処理させたいのかがわからん 具体例示して書け
36 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 23:38:39.05 ] cd /d "%~dp1" 2>nul "%cd:\="&set "HIRAGANA=%"
37 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 23:40:49.03 ] >>35 すいません、単に移動したいだけなんです。利用目的は aaaフォルダは作業中フォルダでbbbフォルダは作業完了フォルダ bbbにはaaaのバックアップ(txt以外)を取っていて aaaの個別フォルダ内で、完了時に右クリから送りたい (bbbフォルダで同名の個別フォルダを探すのが面倒) というのがbat作成の動機でもあります。 気概のない処理でごめんなさい><
38 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 23:48:02.47 ] >>36 ありがとうございます!できました!!!!
39 名前:34 mailto:sage [2011/09/27(火) 01:20:56.80 ] 1個づつは出来るようになったので、後は複数反転を処理できるよう ずっと試行錯誤していたのですが結局できませんでした・・・orz もしよろしければアドバイスを頂けないでしょうか? 移動する予定のテキストは1.txtから●1.txtのように、手動で 文頭に●を加えて、aaaフォルダの検索窓(windowsエクスプローラ) から●のあるテキストを探して全て反転させ、右クリ>このbat で移動したいと考えています。 @for %%A (%*) do ( Acd /d "%%~dpA" B2>nul "%cd:\="&set "HIRAGANA=%" Cmove "%%A" "Z:\hoge\bbb\%HIRAGANA%\" D) 自分的にはこれが一番近いような気がするのですが cmdは一瞬しか立ち上がりませんでした。 引き続き恐縮なのですが、どうかアドバイスを頂けないでしょうか? ご指導ご鞭撻のほどよろしくお願いします。
40 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 03:21:53.81 ] >>39 dir /b /s z:\hoge\aaa\●*.txt プロンプトで実行してみ for /f %%A in ('dir /b /s z:\hoge\aaa\●*.txt') do () とかで取り込めば? バッチの先頭のほうで set aaa=コピー元パス (z:\hoge\aaa) set bbb=コピー先パス (z:\hoge\bbb) とか設定するようにしておけば ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ for /f %%A in ('dir /b /s %aaa%\●*.txt') do () こんな感じで >>39 のコマンドがダメなのは確認して無いけど遅延展開してないからだと思う forの中は call :sub %%A とか使ってサブルーチン化するのが楽じゃないかな
41 名前:39 mailto:sage [2011/09/27(火) 03:32:20.06 ] すいません、さっきの文頭「●」は文頭「処理」に変更しました。 ●で検索したら大変なことになりました(汗) えっと、それでさっきのソースなんですが、@のforの後にinを忘れてました。 @for %%A in (%*) do ( 今度は無事に立ち上がりました。しかし上手くはいきませんでした。 moveの実行でZ:\hoge\bbb\以降から何故かCドライブに続いて ;というマークを区切りにいくつもの関係無いフォルダを辿って行ったみたいでした。 要求されたパスまたはファイル名は受け付けられません。とのことでした。 ここでCをmove %%A "Z:\hoge\bbb\" で%HIRAGANA%を省くと全ての選択ファイルをbbbフォルダには移動してくれました。 ここから先はどうすればよいのか分からないですが… とりあえず寝ます。連投失礼しました。 >>40 アドバイスありがとうございます! さっそくやってみたいと思いますが、ちょっと眠気が… 寝てしまったらすいません。けどありがとうございました!
42 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 03:35:10.61 ] なんか抜けてたんで。。 > とか設定するようにしておけば > ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ とか設定するようにしておけば後で対象のパスが変わっても修正が楽になる どうしても右クリ送るで対象のパスをバッチに送って%*で受け取りたいってわけじゃないなら バッチで対象のパスを探させたほうが楽じゃないかな ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ
43 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 03:40:55.83 ] > ここでCをmove %%A "Z:\hoge\bbb\" > で%HIRAGANA%を省くと全ての選択ファイルをbbbフォルダには移動してくれました。 > ここから先はどうすればよいのか分からないですが… 遅延展開で調べてみ Acd /d "%%~dpA" B2>nul "%cd:\="&set "HIRAGANA=%" で echo off で見たら Bが上手く動いてないはずだと思うよ だから>>40 で言ったようにcall使ってサブルーチン化
44 名前:39 mailto:sage [2011/09/27(火) 03:58:24.64 ] >>42 >>43 わざわざありがとうございます。よく読んで勉強したいと思います。 すいません、あと、自分で言って何なんですが 文頭の「●」や「処理」をコマンドで取り込むのは 出来れば最終手段の方向でお願いします。 というのも、テキストファイルだけなら良いのですが、他にも編集する拡張子があって それらは別のソフトで編集しながら、そこで付けたタグやメタデータから ソートして集めて反転、これをソフトからbatにボタンでドロップして移動する頻度の方が多く ●や処理などのリネームはtxtは良いのですが他が二度手間になってしまうので… せっかくのアドバイスに難癖をつけてしまって申し訳ありません。 ただ、とても参考になりました。echo offと遅延展開、それとサブルーチン化 dirの使い方など勉強になります。初めての事ばかりですが試行錯誤してみます。 調べてみます。ありがとうございました。
45 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 04:31:47.48 ] @echo off :loop if "%~n1"=="" goto end rem ここに処理を書く echo %~n1 shift /1 goto loop :end echo end pause
46 名前:39 mailto:sage [2011/09/27(火) 05:08:59.34 ] >>45 ありがとうございます!目的の半分は達成しました!というのも aaa\あああ\1.txtと2.txtはbbb\あああ\に移動できたのですが aaa\あああ\1.txtと2.txt、aaa\いいい\3.txtと4.txt これら4つを反転させた状態でbatにドロップするとbbb\いいい\ に全てが移動してしまうようでした。rem ここに処理を書く、の下の行に cd /d "%~dp1" 2>nul "%cd:\="&set "HIRAGANA=%" move %1 "Z:\hoge\bbb\%HIRAGANA%\" と書いた場合もそうですが、駄目もとで for %%A in (%*) do ( cd /d "%%~dpA" 2>nul "%cd:\="&set "HIRAGANA=%" move %%A "Z:\hoge\bbb\%HIRAGANA%\" ) と書いた場合も同様でした。 私の書き方がまずいんだと思うので、なんとか頑張ってみます ありがとうございました!
47 名前:39 mailto:sage [2011/09/27(火) 05:47:47.48 ] 右クリbat for %%A in (%*) do (call "C:\3.script\tst\sub.bat" %%A) sub.bat cd /d "%%~dpA" 2>nul "%cd:\="&set "HIRAGANA=%" move %%A "Z:\hoge\bbb\%HIRAGANA%\" >>40 から見よう見真似で作ってみました。 多分構文が凄い間違ってるので%Aが引き継がれなくて何も起きませんでした。 もうちょっと勉強してきます。次はgoto… あぁ頭良くなりたい眠いくっそおお
48 名前:39 mailto:sage [2011/09/27(火) 05:55:13.36 ] あれ!?え!どうして!!? >>45 からまた始めたのですが、さっきは失敗したのに何故か成功しました! おそらく最初のforでinを忘れたように、何か文字が抜けてたんだと思います。 ありがとうございました!これで完璧に達成できました! 皆様本当にありがとうございました! これでやっと寝れる・・・6時か・・・・・・眠眠打破かってきます けど凄い嬉しい目がしゅわしゅわする
49 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 13:00:34.63 ] バッチかWSHかで高速なAND検索って出来ないですかね? 今は単語毎にfindで探してerrorlevelを見て、全部の単語でerrorlevelが0だったら マッチという風にやってるんですが、これが正直遅いです。
50 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 16:43:32.32 ] findstr
51 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 17:04:58.38 ] findstrをfindと同じ使い方をしたらもっと遅いんですが… 単純に指定しただけではOR検索になる仕様ですし、 正規表現でAND検索をやるには前後の組み合わせを変えてOR検索するという 馬鹿みたいな表記になり、2語程度が限界ですが。
52 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 17:44:55.74 ] orのfindstr出力をfindでandする
53 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 18:01:01.08 ] 言っている事がよくわからない… aaa bbb ccc ddd でAND検索を現状は サブルーチンに渡して :sub echo %hoge% |find "%~1" if errorlevel 1 goto :eof shift goto :sub みたいなことやってるわけなんだけど… findstrの出力をfindでandする? 2語の話じゃないですよね?
54 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 18:13:28.08 ] 最初からそれ書けあほ ファイル処理だと思うだろがばか 環境変数の:=置換を使えぼけ
55 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 18:15:45.94 ] ファイルの検索だったとして、結局同じだけどどういう意味だったの?
56 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 17:21:21.58 ] ファイルの検索だったとして、結局同じだけどアホには無理
57 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 18:25:24.38 ] 多分自分で間違えてるの気付いてないんだと思うけど。
58 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 21:07:11.40 ] >>39 for %%A in (%*) do ( set X=%%A call move %%A %%X:\aaa\=\bbb\%% )
59 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 21:45:18.04 ] ドロップしたファイル名を set で取り込みたいのですが & が含まれているときに そのファイル名全てを受け取るにはどのようにすればいいのでしょうか?
60 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 22:08:31.84 ] ファイルかフォルダ名に空白を入れとけ でなきゃ難しいからやめとけ
61 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 22:43:26.15 ] そうなんですか。 別の方法あたってみます。 自分で名前をつけたなら & なんてヤな気配のする文字は使わないんですけどね…… !! とか……
62 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 00:04:50.12 ] !もやめとけ 遅延展開で困るかも
63 名前:39 mailto:sage [2011/09/30(金) 21:25:22.32 ] 先日はお世話になりました。 >>58 お返事遅れてしまい申し訳ありません。どうもありがとうございました。 先ほど試してみたらこれだけで移動する事ができました!ものすごく感動しました! そこで是非とも意味を理解したく:や=や単体での%%の使い方、またはfor %%A in (%*) do (set X=%%A の意味を調べているのですが、なかなか見つかりません。 なので、もうこうなったらbatの優しい参考書があれば購入しようと思うのですが 何か初心者にも分かり易いものはありますでしょうか?
64 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 21:39:24.06 ] for/? set/? call/? 以上で十分
65 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 22:14:41.45 ] 昔なら良書もあったが、いまどきはねぇ・・・ Webなら初心者向きHPも腐るほどあるから、お金出さずに勉強できるよ (古い情報のまま放置のところもあるけど)
66 名前:39 mailto:sage [2011/09/30(金) 22:36:23.51 ] >>64 穴が空くまで読めということですね。ありがとうございました。 >>65 Webの場合は全てのHPを行き来すれば網羅的だと思うのですが この行き来をなくして、馬鹿な私もついていけるような前提から説明して一緒にbatを作り上げるような そんな本であれば購入しようと思っていたのですが、古い情報だとまずかったりするのですね。 HPをめぐって勉強しようと思います。ありがとうございました。
67 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 23:30:56.08 ] >>66 古い情報でもまずいことはあまりないのだが、cmdやコマンドもOSによっていろいろ進化しているから 昔は何行もバッチを書いていたのが今ではコマンド1発でいろいろ出来てしまうことが多々ある。 WinNT系ではWin9xまで(DOS含む)に比べて大幅に機能が拡張されているから、 HPを見つけたらいつ頃書かれたものなのか意識していくといいと思う。(書いていないことが多いが) いまどきから始めるならバッチよりもWSHの方がいいのかなぁ・・・
68 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 15:50:30.91 ] いまどきWSH???
69 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:32:29.20 ] 5.6で機能強化の止まってしまったWHSなぁ
70 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 00:51:43.69 ] 5.7だけど
71 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 00:57:39.22 ] そやな
72 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 02:04:12.37 ] せやな
73 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 19:30:10.04 ] WSHだけど 爺さん婆さんみたいだな ムヒをヒムとか
74 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 20:46:47.70 ] パンツをパンスとか
75 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 20:25:02.09 ] 初めてのプログラムでbatに挑戦したいと思うのですが 下記のような事はbatでも出来ますか? フォルダ名が『レーベル] タイトル』のものと『タイトル』のものが沢山あり これらの中からタイトルが殆ど一致するものを検索し、該当するフォルダについては txtかエクセルに出力し、そこにフォルダ名とパスとサイズとファイル数を表示したいと思ってます。 よろしくお願いします。
76 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 20:50:06.13 ] すいません、フォルダ名には他にも 『[レーベル] タイトル (ジャンル)』というものがありました。 正規表現を使って末尾から一致を探そうと思ったのですが これはちょっと困りました・・・
77 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 21:25:42.61 ] >>76 > タイトルが殆ど一致するものを 殆ど一致て似たものもってこと?「殆ど一致」ではなく「完全に一致」で フォルダ名の書式が [レーベル] タイトル (ジャンル) [レーベル] タイトル タイトル が厳密に守られていて、且つ レーベル、タイトル、ジャンルの文字に "]" "(" の文字が使われて居ないならば やる気さえあれば出来るよ ただこれから始めるような人には敷居がちょっと高いかもね とりあえず"[レーベル] タイトル (ジャンル)"から "タイトル"を抜き出す方法からやってみるといい
78 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 21:41:55.24 ] >>77 タイトルの先頭や末尾に加えてメモが書いてあったりするフォルダもあり また、稀にですがアルファベットや記号で半角全角など違う場合もあるので 殆ど一致であれば全てカバーできるのではないかと、そう表現しました。 フォルダ名の形式についてはタイトル以外は殆ど厳密に守られていると思いますが タイトル(ジャンル)このように半角スペースが入ってないフォルダも結構ありました。 とりあえず敷居は高いとはいえ出来ない事はない、と聞いてやる気が湧いてきました。 ご指摘頂いた「タイトルを抜き出す方法」をまずは学んでみます。 どうもありがとうございました。
79 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 22:45:45.00 ] > アルファベットや記号で半角全角など違う 出来るか出来ないかで言うと出来ないことってあまり無いよ ただ、ものによっては実装するのにすごく手間がかかるので 別の言語を使うほうが楽だったりして現実的ではなかったり if /i で大文字小文字の違いは無視して比較出来るけど 半角全角は無視出来ないから、一旦全角を半角に直して比較、、 とかならやれなくないけど面倒だね フォルダ・ファイル名、一括リネームソフトとかで手直ししてから使うとか もっと言えば、わざわざBATで書いて作らなくても 正規検索で "タイトル"の一致するPATHを書き出してくれる フリーソフトを探せばあるんじゃないかな? BAT書いてみたくて身近なネタがそれだったとかなら別だけど。 目的の為の手段としてBATで書くってなら近いフリーソフトを探したほうがいいよ あと77の方法だけど set の環境変数の置換使って ](を区切り文字みたいに使えば楽に出来るよ set a=%a:*]=% うしろは一工夫すれば出来る
80 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 00:37:27.69 ] >>79 ご丁寧にありがとうございます。 半角全角については結構大変なのですね。 batでなくても難しいみたいなので、今回は未対応で作りたいと思います。 フリーソフトでも正規検索で結果を書きだす事が可能とのことで こちらでも検討してみます。ただ、今は正規表現さえままならない状態であるのと 今回の処理以外にもやってみたいプログラミングがあるので、まずはbat (または他に初心者でもやりやすい言語があればそれで)でやってみます。 お気遣いありがとうございました。 また、紹介して頂いたsetなんですが、もしよろしければ質問させて下さい。 set a=%a:元=先%はどこかで見てメモしたのですが、 set a=%a:*]=%この場合には先がないですよね?この場合には *]を%aで表現できるという事でしょうか?つまり、()の場合には set b=%b:(*=%によって%bで表現できるとことでしょうか? …すいません、自分で検証してみろって話ですね。失礼しました。 後はifを使って%a %b以外で一致する場合には[コマンド1]をするみたいな感じで検討してみます。 沢山のヒントをありがとうございました!
81 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 00:46:04.94 ] すいません、凄い初歩でつまづいたのですが、どうか質問をさせてください。 まずはcmdと正規表現の繋がり、基礎を学ぼうと ykr414.com/dos/dos02.html#09 ここの使用例を参考に、Cドライブ直下にaaaフォルダを置いて、そこに bbb.txt(中身は適当でテキストという文字も入れた)と、試作.batを入れ、batには >findstr テキスト bbb.txt pause と書いて、これをクリックしたのですが ’テキスト’は操作可能なプログラムまたはbatファイルとして認識されていません と表示されてしまいました。 なんとか調べてコマンドプロントからcd/をして C:\aaa>findstr テキスト bbb.txt とした場合には、「アクセスが拒否されました」と表示されてしまいました。 これは何がまずいのでしょうか?こんな調子で先が思いやられますが… どうかよろしくお願いします。
82 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 01:36:09.33 ] > set a=%a:*]=%この場合には先がないですよね?この場合には > *]を%aで表現できるという事でしょうか? set a=ab]cd(ef echo %a% echo %a:*]=% > set b=%b:(*=%によって%bで表現できるとことでしょうか? *は先頭から次の文字までの一致は出来るけど "(*"という風に後方の一致には使えない だから一手間かかる set a=ab]cd(ef set b=%a:*(=% echo %b% call set c=%%a:%b%=%% echo %c:~0,-1% call set c=%%a:%a:*(=%=%% こう書けばset b要らないが わかりにくいかと思って一旦%b%としてる 遅延展開使えばcall使わなくても出来るけど 文字列に"!"が入ってると一旦別の文字へ置換して後で戻したりとかすることになる
83 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 01:42:35.54 ] findstr "テキスト" "bbb.txt"
84 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:56:38.52 ] >>82 見よう見まねでbatを作ってみたのですが とても分かりやすい展開で勉強になりました! 分からない行もありましたが、じっくり解読できるよう励んでみます。 ご丁寧にどうもありがとうございました。 >>83 ありがとうございます、出来ました! batの場合は""が必要なんですね。 cdの操作はカレントディレクトリの移動が出来てないだけでした。 失礼しました。
85 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 06:48:56.02 ] XPと7で処理を分けたい場合ってどうやればいいんですか 環境変数 OS=WINDOWS_NT ってもうなんの意味もない気が…
86 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 07:58:08.97 ] ver
87 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 14:53:12.95 ] >>82 昨日はありがとうございました。 もう殆ど答えを頂いていたのですが、あれから何回も見直して 大方を理解すると共に、cdの抜き出しに成功できました! set a=ab]cd(ef echo %a% set b=%a:*(=% echo %b% call set c=%%a:%b%=%% echo %c% set d=%c:~0,-1% echo %d% set e=*] echo %e% call set title=%%d:%e%=%% echo %title% pause 後は上記の1行目を set full=%1 echo %full% set a=%full:*\=% に変えたらドロップしたフォルダ名からも抽出できました! 今はifとforを調べているのですが もしよろしけば次にやるべきことを教えて頂けないでしょうか? どうかよろしくお願いします。
88 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 17:29:01.73 ] すいません、出来たと思っていたのは "[ab] cd (ef)"ネームのフォルダだけでした。 "[ab] cd"の場合には別途それに合うbatでないと駄目でした。また、 set full=%1 set a=%full:*\=% とさっきは書きましたが、これは後の*]で運よくパスを削って貰っていただけで "cd"ネームのフォルダには対応できませんでした。 どうすればsetにフォルダ名だけを載せれるかわかりません。 それも問題ですが他にも頓挫してる場所がありまして もしよろしければダメ出しをして頂けると嬉しいです。 以下に作ってみたbatを書きます。もしお手数でなければ診てやって下さい。 よろしくお願いします。連投すいません。
89 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 17:31:57.91 ] "abcdef.bat" set full=%1 set a=%full:*\=% set b=%a:*(=% call set c=%%a:%b%=%% set d=%c:~0,-1% set e=*] call set title1=%%d:%e%=%% echo %title1% rem ↑ここまでさっきと同じ。[ab] cd (ef)ネームの場合だけ成功。"[ab] cd"ネームの場合はここまでくる途中で既にボロボロになってるので、そのボロボロを一回放棄(null?どうやって挟む?)が↓のためになるのか検討中。 if i not exist %title1% (call abcd.bat) else call hikakuj.bat rem 他のbatに渡らない。今は↑を試行錯誤中 "abcd.bat" set full=%1 set a=%full:*\=% set b=*] call set title2=%%a:%b%=%% echo %title2% rem ここまでは[ab] cdネームであれば成功。以下略失敗 if i not exist %title2% (call cd.bat) else call hikaku.bat "cd.bat" rem そもそも失敗 set full=%1 set title3=%full:*\=% echo %title3% if i exist %title3% (call hikaku.bat) "hikaku.bat" rem まだ渡ってさえいない if i %title1%==%title2% ()改行if i %title1%==%title3% ()改行if i %title2%==%title3% ()
90 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 19:30:24.24 ] とりあえず "コマンド バッチ" でググれ あと set /? for /? if /? call /? くらいはよく読んでわからなければ試してどういう動作になるか確認して覚えれ バッチにドロップしたフルパスの取得とフォルダ名の取得は set DPATH="%~1" set DNAME="%~nx1" 文字列は常に""で囲まれるようにしないと バッチの中で特別な意味のある"&"なんかの文字が含まれていた場合、誤動作してエラーになる そういった対処しながら"タイトル"を抜き出そうとすると set b=%a:*(=% は set b="%a:*(=% こうなったり。削る側の外側に"を置く。 set d=%c:~0,-1% は set d=%c:~0,-2%" 他にも細かく変更が必要 ](があったりなかったりする場合は該当の文字があるかないか判別して あれば処理をする。といった判定処理が必要になってくる "[レーベル] タイトル (ジャンル)" "[レーベル] タイトル " " タイトル " "タイトル" 処理の流れとしたらこんな感じかな 最後に" タイトル "の先頭末尾 (実際には2文字目と後ろから2文字目) が " 半角空白" " 全角空白"かを判定して真なら削ってループ。偽なら抜ける。 で"タイトル"の取得完了 echo on にして途中で echoして pause入れて確認したりとかしながらがんばれ 複数のパス渡して"タイトル"の重複を比較するとなると "フルパス" "タイトル"を関連付けて環境変数に保持することになるから動的な配列とかかな d.hatena.ne.jp/jak-san/20090308/1236501217 この辺参考になるかもね
91 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 21:00:10.20 ] >>90 とても為になるアドバイスをありがとうございました。 未だ変数、装飾子、文字列の区別も曖昧ですが、今後は文字列を意識して見ていきたいと思います。 また、%~nxは名前.拡張子の表示だと思っていたのですが、フォルダにも使えるのですね! そして、私は%1なら""付きだからと安心していたのですが、%~1でこれを""で囲った方が良いのですね。 今後はそのようにします。そして](の判定ですね。上記を修正したら取りかかりたいと思います。 紹介頂いたURLまでたどり着けるように頑張ります。どうもありがとうございました。
92 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 21:21:41.03 ] >>91 "タイトル"同士を厳密に比較出来なくて良くて 対象フォルダが全て同じフォルダにある パスの書き出しのみ というエクスプローラーで検索と変わらないようなので良ければもっと簡単に出来るよ c:\test\music 以下にあるなら dir /ad /b /s "c:\test\music" | find "タイトル" この結果をテキストに整形しながらリダイレクトするとかでリスト化は可能かな
93 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 22:34:23.34 ] 入力上call set c=%%a:%b%=%% 画面上C:\test\juufuku>call set c=%a:"甲乙&&!!?)"=% なのにecho %c%をすると "[あああ] aaa (甲乙&&!!?)"削れてない・・・orz call set c="%%a:%b%=%%だと認識されないしset b="%a:*(=%との違いが分からないや… 明日set /?から"を探してみよう。 この説明もtxt出力出来れば楽に見れるんだけどな・・・それも明日にしよう >>92 "タイトル"を抜き出す事が出来ましたらさっそくやってみます。 私には今の段階でもかなりキツいので、ここらへんが潮時なのかもしれません。 渡りに船になればよいのですが、ご紹介ありがとうございました。
94 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 23:25:49.60 ] >>93 %変数:置換文字列=置換後文字列% set a=abcdef echo %a:ab=123% echo %a:ab=% call set c=%a:"甲乙&&!!?)"=% これだと置換する文字列は「"甲乙&&!!?)"」 (「」は含まず。以下も同じ) %c%が 「"[あああ] aaa (甲乙&&!!?)"」 だとすると 「甲乙&&!!?)"」なら存在するが 「"甲乙&&!!?)"」は存在しない call set c=%%a:%b%=%% %b%の文字列を""で囲みつつ""を外して使いたいなら %b:~1,-1% こう直せばいい call set c=%%a:%b:~1,-1%=%% > この説明もtxt出力出来れば楽に見れるんだけどな set /? >sethelp.txt リダイレクトでテキストファイルに書き出せばいい
95 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 23:26:46.18 ] "あいう" と書いた時に認識されてるのは「あいう」という文字列ではなく 「"あいう"」という文字列 %a:"あいう"=% で置換されるのは 「123"あいう"えお」であり 「123あいうえお」には反応しない
96 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 16:45:46.83 ] >>94-95 ありがとうございます。もの凄く分かりやすかったです。 echo %a%→"[あ&あ] a&a (甲&乙)" "も普通の文字 echo %b%→ "甲&乙)" "も普通の文字 %b%の「"甲&乙)"」は%a%で存在(完全一致)しないので%a%から%b%は検出できない なので、%b%を「甲&乙)」の形にして、完全一致にもっていく。と理解しましたが どうした訳か上手くいきません・・・orz rem フォルダ名「[あ&あ] a&a (甲&乙)」これを↓のbatにマウント set a="%~nx1" echo %a% set b="%a:*(=% echo %b% 1、call set c="%%a:%b:~1,-1%=%% →C:\test\juufuku>call set c="%a:甲&乙)=% 2、call set c="%%a:%b~1%=%% →C:\test\juufuku>call set c="%a:甲&乙)"=% 1&2、echo %c% →C:\test\juufuku>echo →ECHOは <ON> です。 1&2、rem %c%←この場合はC:\test\juufuku>remとしか表示されす、以降のコマンドもバグッたままでした。 helpを入手しました。どうもありがとうございました。
97 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 18:05:02.34 ] @echo on setlocal disabledelayedexpansion set a="[あ&あ] a&a (甲&乙)" set b="甲&乙)" set b=%b:&=^&% call set c=%%a:%b:~1,-1%=%% echo %c% pause exit /b
98 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 18:59:13.39 ] >>97 "タイトル"を無事に抜けました! とりあえず困った時は&を^&にしてみます!ありがとうございます! ただ、紹介頂いたコマンドでは遅延展開をsetlocalで無効とのことでしたが 私の方ではそれを外してしまいました。遅延展開が良く分からないので調べてみます。 ::成功 rem :ABCDEF set a="%~nx1" echo %a% set b="%a:*(=% echo %b% set b=%b:&=^&% echo %b% call set c=%%a:%b:~1,-1%=%% echo %c% set d=%c:~0,-3%" echo %d% call set title1="%%d:*] =%% echo %title1% →"a&a" rem goto END pause 今からifで"[レーベル] タイトル"と"タイトル"を頑張りたいと思います。 ただ、昨日もとりあえず&がないバージョンでやってみたんですが if /i exist "](" (goto ABCDEF) else (goto ABCD1) この"]("や"]"では判別がうまくいきませんでした。 とりあえず専念してみます。ほんとうにありがとうございました。
99 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 20:39:45.92 ] 発想を変えてforから%title1,2,3%を抜こうと思ったのですが @echo on setlocal disabledelayedexpansion for /D %%X in (*]*"("*) do ( echo a="%%~X" set a="%%~X" echo %a% set a=%a:&=^&% echo %a% ) pause www.dotup.org/uploda/www.dotup.org2111797.jpg こうなってしまいます。これを解決したとして "[レーベル] タイトル"の場合にfor /D in (*]*)これだと先の (*]*"("*) も含まれてしまい上手くいきません。 今はこれが精いっぱいなんですが、このエネルギーを for /D %%X in (*) do (if exist ファイル名 (goto ABCDEF) else goto ABCD) これの形に全力投球しても良いでしょうか? ifのファイル名を何とかforの(セット)みたいに出来ないか検索中です。 方向性が合っていれば良いのですが…どうかよろしくお願いします。
100 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 21:02:23.01 ] すいません、書き方が間違っていました。 正確にはこうでした。 www.dotup.org/uploda/www.dotup.org2111896.jpg
101 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 21:51:38.52 ] @echo on setlocal disabledelayedexpansion set DNAME="[あ&あ] a&a (甲&乙)" echo %DNAME%|find "(" 1>nul if errorlevel 1 ( set DTITLE=%DNAME% ) else ( call :DEL_GENRE ) echo %DTITLE%|find "]" 1>nul if not errorlevel 1 ( set DTITLE="%DTITLE:*]=% ) call :DEL_SPACE echo %DTITLE% pause exit /b :DEL_GENRE set DGENRE="%DNAME:*(=% set DGENRE=%DGENRE:&=^&% call set DTITLE=%%DNAME:%DGENRE:~1,-1%=%% set DTITLE=%DTITLE:~0,-2%" exit /b :DEL_SPACE rem DTITLE前後の空白文字削除処理 exit /b "[あ&あ] a&a 甲&乙)" も "[あ&あ a&a (甲&乙)" も大丈夫だが "[あ&あ a&a 甲&乙)" は失敗する "[あ&あ a&a 甲&乙" だと大丈夫だから ")" のみだとマズいのかも。よくわからん
102 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 22:18:03.36 ] >>101 こんなに沢山書いて頂いて本当にありがとうございます! findと1>nulとif errorleve 1さらにcallまで使用して頂いて とても勉強になります!よく意味を調べて 使えるようになった上で適応させてみます! こんなコマンドがあったんですね!盲目になってました。 今日は寝るまで>>101 のコマンドを解読しようと思います。 ご丁寧にどうもありがとうございました!
103 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 01:58:10.42 ] >>101 > "[あ&あ a&a 甲&乙)" は失敗する if not errorlevel 1 ( set DTITLE="%DTITLE:*]=% ) これがダメ if not errorlevel 1 ( call :DEL_LABEL ) call 使ってここもサブルーチン化
104 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 02:40:16.51 ] if not errorlevel 1 set DTITLE="%DTITLE:*]=% ()使わなければいいんじゃねーの? callしといたほうが無難そうだけどな
105 名前:36 mailto:sage [2011/10/08(土) 03:29:47.11 ] すいません、質問なんですが batって最大でいくつくらい同時に起動しても大丈夫でしょうか? batとは関係ないのですが 以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度) どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして… 同時起動するbatについては処理中には特にPCも重くならないのですが 先のD&Dのような破損やバイナリが変わったらどうしようと思い質問しました。 bat自体の数は1つで下記になります。>>45 さんに作って頂いたものです。 @echo off :loop if "%~n1"=="" goto end cd /d "%~dp1" 2>nul "%cd:\="&set "HIRAGANA=%" move %1 "Z:\hoge\bbb\%HIRAGANA%\" echo %~n1 shift /1 goto loop :end echo end pause 使っているソフトウェアからファイルをこのbatに送る際 ソフトウェアの制約で複数ファイルを送る場合には その複数ファイル個分だけこのbatを多重起動させる必要があるのです。 batを起動できる個数は設定上Simultaneous runs;Unlimitedで無制限ですが 今は不安なので5個程度、10個以上の場合は実際のbatにソフトウェア上からドロップしています。 ファイルは1つ50MB程度で、同一ドライブ内での移動になります。 何か思い当たるところがありましたらコメントを頂けると助かります。 それではどうかよろしくお願いします。
106 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 05:10:28.71 ] > batって最大でいくつくらい同時に起動しても大丈夫でしょうか? OSの仕様や搭載メモリ容量によるかもしれんし俺にはよくわからん。すまんね > 以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度) > どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして… firefilecopy使え ベリファイ出来るしcuiからも使えるからbatに組み込むことも出来る > 使っているソフトウェアからファイルをこのbatに送る際 > ソフトウェアの制約で複数ファイルを送る場合には > その複数ファイル個分だけこのbatを多重起動させる必要があるのです。 パスひとつずつbatに送ってるならもしかして上のスクリプト意味無いんじゃないの? その「使っているソフトウェア」とやらのサポートかスレで聞け
107 名前:36 mailto:sage [2011/10/08(土) 07:55:45.20 ] >>106 いえいえ、とんでもないです。 firefilecopyちょっと実験してみます。 ちなみにPCスペックは下記になります。 CPU core2cuo 2.9GHz メモリ 4G OS vista 64bit >上のスクリプト意味無いんじゃないの? 複数用のbatで1つだけファイルを処理しているので、全く意味が無いわけでは無いですが 殆ど無駄になっている感じではあります。せっかく皆様に教えて頂きながら作ったのに こちらこそ申し訳ないです。ただ、ソフトウェア上から送る場合にはbat複数起動ですが ソフトウェア上から実際のbatにD&Dする場合にはbat1つだけ起動して処理できています。 ただ、これが多少おっくうなので、送るボタン(複数起動)で処理したく伺わせて頂いた次第です。 ありがとうございました。
108 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 08:36:49.94 ] >>107 @echo off if not exist "%~1" goto :eof set fpath="%~1" move %fpath% %fpath:\aaa\=\bbb\% それならこれだけでOK ffc.exe使うならmoveと差し替えて適切なコマンドラインスイッチを追加
109 名前:102です!出来ました! mailto:sage [2011/10/08(土) 12:16:55.81 ] set DNAME="フォルダネームを手入力"については全て問題なく?出来ました。 しかし、ドロップしたフォルダについては"タイトル"(&入り)だけ出来ませんでした。 名前がabc&defだとしたら、一番最初のset DNAME="%~nx1%"で&の手前のabcまでしか入らないみたいでした。 何度も晒して恐縮なんですが、また暫定のbatを下記に書いておきます。 もしよろしければアドバイスを頂るとありがたいです。 @echo on メイン setlocal disabledelayedexpansion set DNAME="%~nx1%" echo %DNAME%|find "(" 1>nul if errorlevel 1 ( set DTITLE=%DNAME% ) else ( call :DEL_GENRE ) echo %DTITLE% echo %DTITLE%|find "]" 1>nul if not errorlevel 1 ( call :DEL_LABEL ) echo %DTITLE% echo %DTITLE%|findstr /r /c:"^. ." 1>nul if not errorlevel 1 ( call :DEL_SFARST ) echo %DTITLE% echo %DTITLE%|findstr /r /c:"^. ." 1>nul if not errorlevel 1 ( call :DEL_BFARST ) echo %DTITLE% echo %DTITLE%|findstr /r /c:". .$" 1>nul if not errorlevel 1 ( call :DEL_SLAST ) echo %DTITLE% echo %DTITLE%|findstr /r /c:". .$" 1>nul if not errorlevel 1 ( call :DEL_BLAST ) echo 完成したタイトル=%DTITLE% pause exit /b
110 名前:続き mailto:sage [2011/10/08(土) 12:19:50.67 ] :DEL_GENRE set DGENRE="%DNAME:*(=% set DGENRE=%DGENRE:&=^&% call set DTITLE=%%DNAME:%DGENRE:~1,-1%=%% set DTITLE=%DTITLE:~0,-2%" exit /b :DEL_LABEL set DTITLE="%DTITLE:*]=% exit /b :DEL_SFARST set DTITLE="%DTITLE:~2% exit /b :DEL_BFARST set DTITLE="%DTITLE:~2% exit /b :DEL_SLAST set DTITLE=%DTITLE:~0,-2%" exit /b :DEL_BLAST set DTITLE=%DTITLE:~0,-2%" exit /b また、現在はいよいよbatクリックでその階層に表示されている、全てのフォルダから"タイトル"を抜く処理に取り掛かっているのですが、これもうまいこといきません。例えば3行目を for /D %%X in (*) do ( 改行 set DNAME="%%~X" に置き換えて、forの〆である「)」をどこにおけば良いのか試行錯誤してるのですが未だ成功しません。また、他には3行目に for /D %%X in (*) do ( call :LOOP ) 改行 pause 改行 exit /b 改行 改行 :LOOP 改行 set DNAME="%%~X" と置き換えてみましたが、%~X自体が無効になってしまいました。ホント質問ばかりで恐縮なんですが、どうか叱咤ご鞭撻のほどよろしくお願いします。
111 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 12:29:40.60 ] DEL_(S,B)FARSTなんて言葉ないですね、デリート(スモール、ビック)FIRSTの意味です。それと >>103 ,>>104 ありがとうございます。さっそく使わせて頂きました。 何度も連投して申し訳ないのですが、もう少しの間だけお相手お願い致します。
112 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 13:48:37.77 ] > ドロップしたフォルダについては"タイトル"(&入り)だけ出来ませんでした。 パスにスペースが無くて&が入ってるとwinのドロップハンドラが""で囲まずにパスを送るからそうなる。winの仕様 例えばdirの結果から使うとか該当ディレクトリにcdしてfor(*)で受け取るとか別の方法考えたほうがいい どうしてもドラッグドロップから使いたいのなら%cmdcmdline%から引数を受け取るという方法があるけど これらのキーワードからどうすればいいか自分で思い付けないようであればやめといたほうがいい 簡単な解決策としてはパスにスペースを入れること c:\test\music以下にあるとしたらc:\test\X music X とか上位のディレクトリにスペース入れれば、「たぶん」問題なくなる > :DEL_SFARST > set DTITLE="%DTITLE:~2% > exit /b > :DEL_BFARST > set DTITLE="%DTITLE:~2% > exit /b 全く同じ処理してるんだからサブルーチン分ける必要ない echo %DTITLE%|findstr /r /c:"^. ." 1>nul if not errorlevel 1 ( call :DEL_SFARST ) echo %DTITLE% echo %DTITLE%|findstr /r /c:"^. ." 1>nul if not errorlevel 1 ( call :DEL_SFARST ) 私ならif "%DTITLE:~1,1%"==" " とかで判定してgotoでループさせるかな スペースひとつとは限らないし。位置も特定されたものを判定だから。 > )」をどこにおけば良いのか試行錯誤してるのですが未だ成功しません。 > for /D %%X in (*) do ( 改行 set DNAME="%%~X" いきなり本番書き上げようとせずにtest.batとか作って必要最小限で構文試せ echo が基本 for /D %%X in (*) do (echo "%%~X" せめてロジックを思い付けれるくらいにはコマンドの動作を理解したほうがいい。丸暗記する必要は全く無いが どんなコマンドがあるとかコマンドの説明書いてるサイトやリファレンスを一通り読んで コマンドごとに簡単なものを書いてみて、もう少し理解を深めることを勧める。forの中でしかfor変数は使えない
113 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 15:19:37.10 ] >>112 骨身に沁み入ります。善処します。 上位のディレクトリに"タイトル(&入り)"を挟んだところ、正常に処理が出来ました。 ラベルを同一にすればよかったのですね。そこまで気が回りませんでした。 >if "%DTITLE:~1,1%"==" "これならかなり絞り込めますね。 先のfindやifの流れから、練習問題として捉えてました。 正規表現に浮かれて盲目になっていたのもありますが、とても参考になりました。 しばらくgotoとforのサンプルをechoを使いながら見てみます。 身の丈に合わない早歩きで不愉快な思いをさせてしまい申し訳ありませんでした。 そしてご丁寧にどうもありがとうございました。
114 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 19:52:00.13 ] >>109 の3行目を下に置き換えたら成功しました。 また、簡単なものですがソートもさせてみました。 for /D %%X in (*) do ( echo "%%~X" set DNAME="%%~X" call :MAIN %DNAME% ) sort aaa.txt >bbb.txt del aaa.txt pause exit /b :MAIN echo %DNAME% rem ここまで rem 以下MAINの下から2行目を置換え echo "%DTITLE:~1,-1% 「Tab*2」 ¥%DNAME:~1,-1%" >>aaa.txt 次はタイトルが同じものだけをサブディレクトリに入れるような そーゆうコマンドに調整していこうと思います。 とりあえず一段落ついてホッとしました。サポートをして頂いた皆様に感謝します。 どうもありがとうございました。
115 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 20:56:39.36 ] > for /D %%X in (*) do ( > echo "%%~X" > set DNAME="%%~X" > call :MAIN %DNAME% > ) @echo off for /d %%X in (*) do ( call :MAIN "%%~X" ) pause exit /b :MAIN echo %1 exit /b callに引数付けてサブルーチンに送るならサブルーチンでは%1で受け取る call :MAIN "%%~X" "YY" "ZZ"とか複数送る場合は%1,%2,%3...となる @echo off for /d %%X in (*) do ( set DNAME="%%~X" call :MAIN ) pause exit /b :MAIN echo %DNAME% exit /b 環境変数にセットするならサブルーチンでも変数名で使える 用途に応じて使いやすいほうを。 set の文は末尾にスペースが入ったりする場合もあるから改行で終わるようにしたほうが無難 改行で終われない場合でスペースが入らない書き方が出来てるか確認するには echo %DNAME%%DNAME% とかで二つ重ねてechoしてみればわかる
116 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 22:48:56.39 ] sortはリダイレクトでファイルに出力した場合は 自分自身をソートするという使い方は出来ないけど /o で出力した場合は自分自身もソートできる。 リダイレクトして元ファイルを削除するなんて事をしなくてもいい。
117 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 23:09:11.12 ] ソートはしらなんだ
118 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 23:12:00.92 ] type aaa | find "aaa" | sort /+1000000 /o aaa
119 名前:デフォルトの名無しさん [2011/10/10(月) 06:31:34.40 ] カーナビのmp3の再生順序が、ファイル名や更新日時などではなく FATテーブルに書き込まれている順序で再生されるのですが、 この並び順を変える良い方法はありませんか?
120 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 08:15:04.51 ] 一昨日のあれから"タイトル"が重複するフォルダの移動に取り掛かっているのですが 全くうまくいかずに心が折れました。色々試したつもりではあるのですが… もしよろしければ、次に何をすべきか、どう組み立てるべきかご教示願えないでしょうか? >>90 さんに紹介頂いた配列変数や、>>115 さんに教えて頂いたcall :ラベル 複数→%1,%2%3 これを活用できないかと考えてはみたのですが、私の力では想像が足りませんでした。 せっかく紹介して頂いたのに申し訳ありません。 どうか智慧をお貸し下さい。お願いします。
121 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:05:15.18 ] >>120 結局どうしたいの? 重複がわかりやすくなって簡単な方法であれば フォルダ名を "[レーベル] タイトル (ジャンル)"→"タイトル [レーベル] タイトル (ジャンル)" とか元のフォルダ名の前にタイトル追加すれば綺麗に並ぶ "タイトル"tab"ディレクトリパス" とテキストにリスト化することだって出来るし ディレクトリを "\タイトル\[レーベル] タイトル (ジャンル)\" と タイトルフォルダ作ってそこへコピーすることだって出来る それに重複「だけ」にこれらの操作を適用するのか全てのディレクトリに適用するのかとか (もちろん面倒なのは「重複だけ」の方) 全てに適用でタイトルフォルダへコピーなら タイトルを比較する必要もなくなる 前にも書いたけど厳密に比較でなく乱暴でよければ dirの結果を"タイトル"でfindしてその結果を"タイトル"フォルダへコピーとかなら 全ての対象フォルダからタイトル抜いて配列orリスト.txtにして"タイトル"を比較とかしなくて済む 方法なんていくらでもあるしやろうと思えば出来るから。 ただ、あなたがどうしたいかによってやり方や難易度は全然変わってくるので どういう動作をさせる&させたいのかはっきりしてくれないとこの先はアドバイスしようがないよ
122 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:14:30.08 ] >>119 それがわかってるなら再生させたい順で転送しなおせば? あとそれってバッチは関係あるの?
123 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:33:58.09 ] >>121 様々なプランを提示して頂いてありがとうございます。 具体的にやりたい事は、C:\test\juu fuku\ここでbatを実行し この階層にある全てのフォルダ(フォルダネームは弄らない方向で)を対象に タイトルが重複するものだけを、C:\test\juu fuku\該当\に移動できるようしたいと思ってます。 面倒になってしまい恐縮ですが、ひとつよろしくお願いします。
124 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 21:13:00.51 ] 1つ目の方法 titlelist.txtに"C:\test\juu fuku"配下のフォルダを対象に"タイトル" "フォルダ名"書き出し titlelist.txtから"C:\test\juu fuku\該当"の行を削除 ここからループ処理 titlelist.txtから1行目が読み込めなければ終了処理 titlelist.txtから1行目の"タイトル"を読み込んで find /c """タイトル""" "titlelist.txt" 結果が1ならtitlelist.txtから1行目を削除してループに戻る 結果が2以上ならfind """タイトル""" "titlelist.txt"の結果をforで2番目のtoken抜き出して"フォルダ名"を順に取り出し move "C:\test\juu fuku\フォルダ名" "C:\test\juu fuku\該当\フォルダ名" titlelist.txtから"タイトル"の行を削除してループに戻る 2つ目 一度全てのフォルダを"C:\test\juu fuku\該当\タイトル\フォルダ名"とする "C:\test\juu fuku\該当\"でdir /ad /bとかで"タイトル"フォルダ名を forで順に取得してdirで"タイトル"フォルダ配下のフォルダ数を判定 "タイトル"フォルダ以下にフォルダがひとつであれば "C:\test\juu fuku\フォルダ名"へ移動 ふたつ以上ならそのまま 上の処理が終わったら"C:\test\juu fuku\該当\タイトル\フォルダ名"を "C:\test\juu fuku\該当\フォルダ名"へと移動して終了 他にも方法はいくらでもあるだろうけどとりあえずこんなところかな。 2つ目の方が簡単だけどコピーする数増えるしコピーで壊れる確率も増える ベリファイする処理混ぜるとかコピーに>>106 が言ってたfirefilecopy使ってベリファイするとかすればいい 自分で無理そうならこちらへ 気軽に「こんなソフトありませんか?」 Part.141 hibari.2ch.net/test/read.cgi/software/1315320625/ ◆こんなソフトウェアつくってください〜Part16〜◆ hibari.2ch.net/test/read.cgi/software/1316551791/
125 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 22:12:28.47 ] > 2つ目 > 一度全てのフォルダを"C:\test\juu fuku\該当\タイトル\フォルダ名"とする "C:\test\juu fuku\TMP\タイトル\フォルダ名" とかのほうがいいな 一旦全てを"C:\test\juu fuku\TMP"へ移動 そこから "C:\test\juu fuku\Not juufuku"と"C:\test\juu fuku\該当"へ振り分ける感じで まあ処理がわかりやすくなれば分けるフォルダ名はなんでもいいよ
126 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 00:02:59.36 ] 質問者は >>80 を見るとバッチファイルにこだわっているわけではないようだし テンプレにも「※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。」とあるように 他の言語を使ったほうがいいんじゃないか? そもそもバッチファイルによる高度なプログラミングは初心者向きではなく、職人芸みたいな感じだし
127 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 00:05:54.23 ] >>124 ,>>125 ,>>126 ありがとうございます。挑戦させて頂いたのですが またもや分からない点が溢れだしました。 しかし、これ以上私のレスでここを埋めてしまうのも忍びないので 一度、誘導して頂いたスレッドで依頼してみます。 ただ、並行して1つ目は理解できるよう挑戦していきたいと思います。 それとWSHについてもROMってみるとよく話題にのぼっているので 私も調べてみます。どうもありがとうございました。
128 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 15:45:30.09 ] 自分も>>101 を試してみようとそのままbatにしてみたのですが echo %DNAME%|find "(" 1>nul find: invalid expression; expected to find a ')' but didn't see one. Perhaps you need an extra predicate after '(' このように表示されてしまいました。 おそらく自分だけ?だと思うので何か環境がまずいのだとは思うのですが 何がまずいんでしょうか?winXPを使ってます。
129 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 16:44:47.21 ] find/? where find
130 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 17:24:09.98 ] >>129 find /?さえ開けない・・・ コマンドプロント開いて%PATH%打ったらどう表示されますか? 多分ここが違うものに変更されて出来なくなったのかなぁ
131 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 17:54:01.17 ] for %I in (find.exe) do echo %~$PATH:I
132 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 18:09:54.10 ] >>131 実行したら C:\Ruby192\bin\find.exe になりました。Ruby192は今日インストールしたやつです。 これからどうすればよいのでしょうか?
133 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 18:43:25.57 ] >>129 where findってそーゆうことだったんですか てっきり英語で聞いてるのかと思ってました、ごめんなさい。 where find C:\Ruby192\bin\find.exe C:\Windows\System32\find.exe これ2つあるからRuby192の方のfind.exe削除しちゃって大丈夫ですかね? 削除しようとしても削除できなったんですけども。 とりあえず環境変数PATHの並び順をRubyの方を%SystemRoot%の後にしてみたら とりあえずうまくいきました。これで問題ないですかね?
134 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 18:44:40.72 ] そもそもなんでrubyの方が前に来てるんだよ
135 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 18:53:36.18 ] 別にPATHに頼らんでも C:\Ruby192\bin\find.exe C:\Windows\System32\find.exe で好きなほうが使えるだろw そんなことも知らなかった?
136 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:16:28.07 ] >>134 なんかインスコする時PATHがどうこうチェックしたったら前になったったった >>135 知らないボクに教えて下さい><どうやるんです?
137 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:19:35.88 ] > 自分も>>101 を試してみようとそのままbatにしてみたのですが おまえ>>127 だろ?なんで別人のフリしてんの? hibari.2ch.net/test/read.cgi/software/1316551791/88-98
138 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:24:39.25 ] >>137 そのスレで知って来たんですけど別人です
139 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:31:12.09 ] そもそもRuby入れてどうするのさ
140 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:40:25.44 ] >>139 なんか色々使いまわしできそうなフリーソフトの内容だったから自分も欲しくなって。 Rubyのソース貼ってあったしちょっとやってみようかなと入れて見ました。
141 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:45:44.76 ] >>136 >>135 に書いてあるだろボケ
142 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:56:13.96 ] バッチも使えないのがRubyなら使える?
143 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 20:49:01.35 ] >>140 人のマネするなら真摯な受け答えと学習の姿勢も見習った方がいいぞ。
144 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 21:22:07.29 ] >>143 > 学習の姿勢も見習った方がいいぞ。 誰を見習うの?>>127 のことを言ってるのならあいつ学習なんてしてなかったと思うが。 あいつが動かないって言って貼ったやつ見たらほとんど試してねーのまるわかりじゃん。 教えたがりのバカもほどほどにしろよと。 hibari.2ch.net/test/read.cgi/software/1316551791/88 > 途中までbatで皆様の助けを得ながら作りましたので > "タイトル"の抜き出しまでですが とか言ってるけど>>101 と>>103 がまるまる書いたんじゃねーかよw
145 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 22:03:54.50 ] まあ、重複を調べるなら初めから他の言語で教えたほうが良かったんじゃとは思う
146 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 00:01:52.28 ] >>144 本当にその通りだと思います。言葉の綾にしても酷すぎました。 >>101 さんと>>103 さん、申し訳ありませんでした。 そしてもう一度、ありがとうございました。 また、お陰様で依頼の品を作って頂く事が出来ました。 紹介して頂いた>>124 さんありがとうございました。 最後に、今までの長きに渡りご指導を頂きました皆様に感謝します。 無知な私に時には厳しく、時には易しく教示して頂いた事を忘れず これらも精進していけたらと思います。本当にありがとうございました。 それでは失礼します。 スレをかき乱してしまい申し訳ありませんでした。
147 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 23:36:51.13 ] rem >>114 のpauseに下記を代入 md "[重複フォルダ]" set DPATH="%~dp0" for /f "delims=, tokens=1,2" %%i in (bbb.txt) do call :sub %%i %%j for /f "delims=," %%k in (ccc.txt) do call :last "%%~k" del bbb.txt&del ccc.txt rem >>110 の最後に下記を挿入 :sub set DNAME=%2 for /f "tokens=1-3" %%a in ('find /c ""%1"" "bbb.txt" ^|find "-"') do ( if %%c==2 echo "%DNAME:~1,-1%",>>ccc.txt ) exit /b :last set DMOVE=%1 move "%DPATH:~1,-1%%DMOVE:~1,-1%" "%DPATH:~1,-1%[重複フォルダ]\" pause exit /b これで重複フォルダのみを移動する事ができました。 教えて頂いたせめてもの誠意として、完成品を書きました。 他にも欲しいとおっしゃる方がいましたので、もしよろしければ使ってみて下さい。 本当は>>124 さんに教えて頂いたものをそのまま書きたかったのですが 私の力では理解が足りず、再現することが出来ませんでした。しかし、大変為になるロジックばかりで このコマンドを作成するにあたり大変お世話になりました。改めてありがとうございました。 それでは失礼しました。
148 名前:デフォルトの名無しさん [2011/10/12(水) 23:50:38.95 ] 192.168.0.1という文字列を引き渡して、最後の1だけを254に 置き換えたいのですが、どうやったらできますでしょうか? forを使ってやってみたのですが、うまく置き換えられません。 よろしくお願いします。
149 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 23:51:22.22 ] >>147 動かないです><
150 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 23:56:17.44 ] >>148 set a=192.168.0.1 echo %a:~0,-1%254
151 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 00:03:12.90 ] >>149 すいません、忘れてました。>>109 のpauseに下記を代入してください。 echo "%DTITLE:~1,-1%","%DNAME:~1,-1%">>aaa.txt これで多分大丈夫だと思います。
152 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 00:20:07.61 ] set a=192.168.0.1 set b=254 for /f "tokens=1,2,3,* delims=." %%A in ("%a%") do set c=%%A.%%B.%%C. echo %c%%b% pause exit /b
153 名前:デフォルトの名無しさん [2011/10/13(木) 22:35:06.20 ] >>148 これだと一桁しかダメでした。説明不足ですみません。 >>152 うまくいきました!ありがとうございました。
154 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 19:58:12.44 ] set a=!?-,.、。!?〜ー☆#♪ for %%x in (! ? - , . 、 。 ! ? 〜 ー ☆ # ♪)do call set a=%%a:%%x=%% echo %a% このようにすると「,」と「?」が残ってしまうのですが その2つも消すにはどうすればよいのでしょうか? また、これは一体何が原因なのでしょうか?
155 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 20:12:15.64 ] エスケープされてないので ,は空白に置換 ?は1文字ファイル名に置換
156 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 23:12:48.73 ] >>155 最初のsetを""で囲んでforのセットに^?^,でいけるかなと思ったんですが駄目でした。 他も色々と試してみたのですが、うまいことエスケープ出来ませんでした。 forの外ならset a=%a:?=%とset a=%a:,=%でエスケープもいらないのですが 仕組みを理解したいのでもうちょっと調べてみます。よく分かりませんが。 ありがとうございました。
157 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 00:55:29.25 ] set a=!?-,.、。!?〜ー☆#♪ for %%x in (! ^^? "?" - "," . 、 。 ! ? 〜 ー ☆ # ♪ ') do call set a=%%a:%%~x=%% echo %a% set a=%a:?=% echo=%a% pause forの()中 ?は "?"はダメで ^^?でエスケープ出来るが %%xに渡してくれない カレントディレクトリに1文字のファイル置けば一応エスケープされてることが確認できる
158 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 01:40:23.71 ] ?はエスケープでけん
159 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 07:59:56.29 ] >>147 for /d /r c:\test %a in ("*タイトル*") do @echo %a
160 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 09:06:03.07 ] >>157 、>>158 ファイル名に使えない=\|/:*<>は試してませんが (! ^ ! ? ☆ ★ ♪ # # $ $ 〜 − ― < > ー - "," " " " " . ・ 「 」 → 、 ” ’ 。 _ & + / \ ・ + "&" % @ @) do なんかは普通に通りました。後は遅延を考慮した""%%""位が特殊な形でした。 危険そうな所は避けているので他にもあるとは思いますが…これらは成功しました。 それでようやく理解しかけているのですが、例えば?と同じく出来なかった%の置換。 doの遅延で2つで1つ状態なので、セットの段階から%%にして、これに他と同じく ""を付けるのですが、他は%%~xで""を外しても大丈夫だったのですが これは""を外して置くと特殊文字化するので、再びここで囲み直し 結果的に""%%""と二重で囲んで成功しました。 これは?にも当てはまって、""?""これで無効化された普通文字というのでしょうか おそらく他もこの仕組みなんだろうと思いました。^自体は^^でした。 アドバイスのおかげで成功出来ました。どうもありがとうございました。
161 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 09:18:12.11 ] >>159 forはある程度理解できるようになったと思っていたのですが、全然浅かったです。 ありがとうございます。解読して挑戦してみます。まだgoto文が苦手なんですよね。 おそらくgoto文も使うのでちょっと腰を据えて学んでみます。ご紹介ありがとうございました。
162 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:22:35.26 ] set a=%%%!?-,. echo %a% for /f %%a in ('echo "%a%"') do @echo %%~a for /f %%a in ('echo %a%') do @echo %%a for /f %%a in ("%a%") do @echo %%a pause 面白いなw
163 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:34:34.66 ] hibari.2ch.net/test/read.cgi/tech/1298873550/32 32 名前:デフォルトの名無しさん[sage] 投稿日:2011/03/09(水) 04:52:28.96 setlocal enabledelayedexpansion set o=me set me=de set de=to set to=u set u=omedetou set omedetou=^^^>^^^>31 説明しても良いが、何故かもう一回展開できてしまって、この理由が全く説明できないから、展開されるタイミングとか勘違いしてるかもしれんが良いか? for /f %%A in ( 'call echo %%%%!%o%!%%%%' ) do call echo %%!%%A!%% endlocal
164 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:44:44.95 ] >>162 どこが?当たり前だのクラッカだが?
165 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:48:55.47 ] hibari.2ch.net/test/read.cgi/tech/1298873550/45 45 名前:デフォルトの名無しさん[sage] 投稿日:2011/03/09(水) 22:13:30.35 >>43 んじゃ、このバッチで復習を setlocal enabledelayedexpansion set o=me set me=de set de=to set to=u set u=omedetou set omedetou=おめでとう for /f %%A in ( 'call echo %%^^^!%%%%!%o%!%%%%^^^!%%' ) do call echo %%A endlocal
166 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:54:44.85 ] つまらん もちっと珍しいことはないのか?
167 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:28:12.86 ] ここを見てると、「(PerlやRubyのような)フリーソフトは危ないから導入禁止」 とかほざいてる馬鹿会社が、いかに罪深いかがよく分かるな。 まあ趣味でバッチを追究するのは、また別の話だが…
168 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:41:20.39 ] >>164 いや、ファイル名に%が付いてるのはどうなるかなと思ってね たいした意味はないよ
169 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:44:12.87 ] べつにちっともこまらんが? あるものを使いこなせない馬鹿社員が、いかに罪深いかがよく分かるな。
170 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:47:22.16 ] >>169 暇な窓際社員は呼んでない
171 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 17:46:30.61 ] forのfile setでは?はエスケープできないね でもfor/fなら?が渡せるよ scripting.cocolog-nifty.com/blog/2008/11/lf-7446.html の要領でfor /f in (複数行)にすればよい
172 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 15:19:28.43 ] 亀レスだけど>>36 これ凄いな・・・職人芸を感じる。 他の言語知らないから普通の事かもしれんが
173 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 16:17:39.50 ] set a=!?-,.、。!?〜ー☆#♪ set b=! ? - , . 、 。 ! ? 〜 ー ☆ # ♪ for /f %%x in ('echo %b: =^&echo %') do call set a=%%a:%%x=%% echo %a%
174 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 17:13:39.45 ] set a=!?-,.、。!?〜ー☆#♪ set b=! ? - , . 、 。 ! ? 〜 ー ☆ # ♪ for /f %%x in ('"echo %b: =&echo %"') do call set a=%%a:%%x=%% echo %a%
175 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 17:34:19.64 ] 何か云えよw
176 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 17:35:27.55 ] 何か
177 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 17:37:14.47 ] これ凄いな・・・職人芸を感じる。
178 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 22:56:12.18 ] >>167 windows鯖いじる仕事だったら普通だけど、、 まあ、本番で使ってるのはもっとシンプルなバッチばっかりだけどな。
179 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 05:53:06.23 ] 2>nul "%cd:\="&set "HIRAGANA=%" これなにをやってるの?さっぱりわからない…
180 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 11:34:00.25 ] set dir=G:\ほげ1\ほげ2\ set dir=%dir:~0,-1% 2>nul "%dir:\="&set "target=%" echo %target% pause フォルダ名を取得してるんじゃない
181 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 15:36:37.01 ] %~nxIを使えば済むところを物好きな
182 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:13:38.98 ] >>181 %~nxIだとカレントディレクトリ名でなく、そこにあるフォルダ名になると思うんだが
183 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:22:55.35 ] 置換の方がfor使って書くより単純だけどな。 ちなみに最後の文字が\だと%~nxiもNGだからね…
184 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:28:36.69 ] あたま悪いの?
185 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:35:08.24 ] >>184 頭悪い本人乙
186 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:35:29.48 ] >>184 あたま良いの?なら書いてみてよ
187 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:36:36.04 ] for %%I in ("%~dp1.") do set HIRAGANA=%%~nxI より cd /d "%~dp1" 2>nul "%cd:\="&set "HIRAGANA=%" とは物好きな
188 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:37:04.21 ] まあ待て。本人は頭がいいと思ってるのかもしれないけど、 知らない方がいいってこともある。
189 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:40:29.12 ] どっからcdなんて出てきたと思ったらえらい昔のレスじゃないか… 安価付けろボケ
190 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:48:52.08 ] ボケはおまえだけだが?
191 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:51:22.28 ] >>187 これ凄いな・・・職人芸を感じる。
192 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 17:11:58.24 ] >>191 もう許してやれよww
193 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 17:42:56.14 ] >>187 あたま悪くてごめんなんだけど ("%~dp1.")これはどうしてdp1の後ろに.がついてるの? いや確かにこれがないと取得できないんだけど 何かをドロップしなくても"."になって取得できるし そもそもの"."の意味もよく分からなくって、そこを教えてもらえると嬉しいです。
194 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 17:58:04.27 ] >>191 > これ凄いな・・・職人芸を感じる。 一銭にもならん職人芸だけどな。
195 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 18:02:09.59 ] dir . すると . .. があるだろ? a\b\c\.はa\b\cを指す。 a\b\c\..はa\bを指す。 つまり、\.は\.を削除、\..は\〜\..を削除したものと同じ というのがOSのパス名のコンベンションなんだよ
196 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 18:06:37.06 ] ×職人芸を感じる ○職人技を感じる と思ってたんだが違うのか? それでネタにされてたんだと思ったがw >>193 横レスで俺もよく分からんけど"."でカレントディレクトリを1つ上位のパスに戻してるんじゃないのか? 例えばcd ..だと1つ前に戻るけど、forの場合には1個でいいみたいな。試しに".."だと2つ前に戻った。 >>195 なるほどd
197 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 18:29:39.96 ] >>195 dirをしたときの.と..もずっと意味分かってなくて 今までは仕方なくそれを含めて計算してたんですが なるほど、ようやく意味が分かりました。ありがとうございました! >>196 ありがとうございます。試してみます。
198 名前:デフォルトの名無しさん [2011/10/19(水) 20:12:37.19 ] FOR文の中にGOTOのラベルって書いたらNGですか? FOR /f "usebackq tokens=*" %%j IN (`reg query "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"`) DO ( IF "! REG.EXE VERSION 3.0" EQU "%%j" goto Skip IF "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" EQU "%%j" goto Skip 処理色々 :SKIP ) こんな感じでかいたらエラーになっちゃいます。
199 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 20:15:32.28 ] gotoは書けるが、ラベルは複文の中に書けない つまり脱出のみ
200 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 20:43:35.56 ] IF "! REG.EXE VERSION 3.0" NEQ "%%j" ( ... ) でいいんじゃないの。 インデント増えるけど。 ややこしい処理書きたくなったら for %%i ... do call :eachline %%i してサブルーチンに飛ばしちゃうと色々楽。
201 名前:デフォルトの名無しさん [2011/10/19(水) 21:57:06.94 ] >199 >200 なるほど〜、勉強になりました。 ありがとうございます。
202 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 17:43:31.29 ] ちょっと教えてください あるディレクトリ以下のファイルを処理したくて、とりあえず dir /b /s /a-d cd > list.txt でファイル一覧を作りました 中身はこんな感じ test\test11 test12\texta test1\test13 test14\textb test2\test15 test16\textc で、その一覧をforで処理しようと思ったら、空白までしか読んでくれない for /F %i in ( list.txt ) do コマンド どうしたらファイルの中の空白を含む文字列を正しく読み込めますか?
203 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 17:48:11.55 ] いったんファイルに吐いているのは、多少加工するためです 前と後ろを少し切るためなんですが、コマンドでやると面倒そうなので、 エディタの置換でやっています
204 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 17:53:37.29 ] 自己解決しました for の /Fが余計だった 頭使わずにコピペしてると駄目ですね スレ汚し失礼しました
205 名前:デフォルトの名無しさん mailto:sage [2011/10/23(日) 18:16:44.27 ] 何言ってんだか
206 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 09:41:38.83 ] 学校で宿題が出ました、助けて下さい>< 実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。 よろしくお願いいたします。 実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。 テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような パスを変数に代入する記述があった場合 そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt" という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。
207 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 10:21:55.23 ] >>206 hh.exe ms-its:ntcmds.chm::/ntcmds.htm
208 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 11:07:34.88 ] 少しは考慮に値するレベルならまだしも、一行で終わるようなのはもう帰れとしか言いようがない。
209 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 22:23:47.19 ] 1行じゃ終わらんでしょ
210 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 22:25:49.99 ] 仕様があいまいで書く気にならんな
211 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 22:30:56.11 ] 語句解析とか無理
212 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 22:33:49.07 ] > 現在存在するディレクトリにある全てのテキストファイル えっ?
213 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 22:39:45.43 ] >>212 現在バッチファイルが存在するディレクトリ バッチファイルと同階層のディレクトリ内の
214 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 23:37:14.09 ] 助けなかったらどうなるの?
215 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 23:54:16.44 ] つまりバッチファイル自身も書き換えるのか
216 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 23:56:59.44 ] >>215 拡張子がtxtのものだけでお願いします。
217 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 00:06:34.90 ] そのまま解釈すれば バッチでは無理なレベル
218 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 00:13:41.08 ] バッチの宿題やるまえに日本語の勉強しなきゃ
219 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 00:45:50.58 ] なの宿題のわけないが狙いは何だ?
220 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 00:49:53.39 ] バッチではできないが正解でわ
221 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 01:05:34.80 ] 説明がわかりにくいようですまんかった。 画像にしてみた。 up3.viploader.net/ippan/src/vlippan241698.jpg viploader.net/ippan/src/vlippan241699.jpg 画像の、C:\aaa\aaa\aaa\aaaとかの部分をC:\Users\workspaceに書き換えたいというわけです。 >>217 >>220 バッチではムリなのか・・・ 最初Pythonでやろうと思ったんだが、うちの会社のマシン、標準でPythonが入ってないから わざわざこれやるためにインスコするのも何だしなあと思って バッチならどのマシンでも実行出来るかなと思ったんだが・・・。 何か他に最適な言語はありますか。 >>219 パスを読んでくるようなスクリプトを他のディレクトリに移動させるとエラーが出ることがあって 今は毎回パスを手動で書き換えたりしてるんだけど、ボタンポチで書き換えられた方がいいかなあと。。 プログラム板は宿題スレが多いからこういう形で質問してみました。
222 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 01:23:34.64 ] それくらいならバッチでできるだろ for/? set/? 規模見積もり0.005KS 工数見積もり0.002人月
223 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 03:39:47.92 ] だからキモの部分は1行で終わるって…
224 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 03:45:15.11 ] 無理だって
225 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 04:02:35.67 ] 出来るよ passはpathの間違いか?まあ変数名なのでどっちでもいいが。 ただ2枚目の画像のようにtxtの中身がpathを記述したものだけなのか?それ以外の行があるのか? ひとつの行で指定されているpathはひとつのみ?;区切りで複数のpathが指定されてたりするのか? によって面倒さが変わってくる
226 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 04:07:57.60 ] 相対パス使えよ
227 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 04:13:52.72 ] 何が無理なんだ?バッチに不可能はないが
228 名前: ◆GisVTRdvfxOl mailto:sage [2011/10/26(水) 04:47:39.91 ] www1.axfc.net/uploader/Sc/so/286933.zip&key=221 txt書式が変わると対応不可 エスケープ文字は非対応 スペースと日本語には対応させたつもり
229 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 05:16:38.97 ] >エスケープ文字は非対応 バッチの宿題やるまえに日本語の勉強しなきゃ
230 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 16:31:13.72 ] WinTabberって良さげなツール見つけたんだけど AVGでWin32/Heurが検出される。 たぶん誤検出で大丈夫だと思うんで試しに誰か踏んでみてくれ。
231 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 16:45:25.13 ] 断る
232 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 19:18:03.62 ] >>バッチならどのマシンでも実行出来るかなと思ったんだが・・・。 この条件なら WSH 使えばいい話
233 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 19:28:24.00 ] >何か他に最適な言語はありますか。 WSHは言語じゃない
234 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 19:35:38.57 ] そんなこといったらバッチファイルも言語じゃないだろ
235 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 20:02:33.21 ] >>234 じゃバッチファイルの言語はなんだ?言ってみろ
236 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 21:14:32.23 ] バッチ
237 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 22:01:34.34 ] バッチは基本的にコマンドの羅列でしかないので厳密には言語じゃないけど、 一般的には言語(スクリプト)として扱われることが多い・・・てことじゃない? unixのシェルスクリプトも同じ扱い。
238 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 22:48:51.96 ] >>228 thx!!!!!ありがとうございます!! バッチファイルを今まで書いたことなかったので お願いしたのだけれど、やっぱり機能追加とかしたいので結局自分でも覚えなきゃいけないな・・・ 仕事でバッチを頻繁に使うわけでもないので若干面倒臭い。。 >>232 >>233 すみません、語彙力不足で・・・。 上でお願いしたようなことが出来るのなら言語じゃなくても何でも良いです。 ただ共有して使うつもりなのでインストールとかが必要なものは面倒なので要らない感じです。 WSHってのでバッチよりサクッと出来るならその方が個人的には嬉しいです。
239 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 23:23:21.05 ] 最近スレの質が下がったな 日本語変なやついるし 検証もしないで出来ないとか無理とかいうやついるし 全角英字とか()
240 名前:デフォルトの名無しさん mailto:sage [2011/10/26(水) 23:35:01.96 ] 出来ないというか普通はsedとか使うんじゃないの
241 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 00:32:18.73 ] >>239 出来ると思うならやってみろよ
242 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 08:41:46.72 ] 出来ると思うならやってみろよ(キリッ
243 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 17:46:44.38 ] どうでみいいから好きにしてよ(キリッ
244 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 23:02:47.57 ] 出来ないと思うなら証明してみろよ(キリッ
245 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 23:39:38.13 ] うちも履歴が止まったが保存日数減らしたら再開したわ
246 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 00:15:34.97 ] このスレはあなたにとって役に立ちましたか? ○ 非常に役にたった ○ 役にたった ○ どちらともいえない ○ 役に立たなかった ○ 全く役にたたなかった
247 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 01:56:16.55 ] 非常に腹がたった
248 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 11:58:38.57 ] ユーザー名がtestであるときに cd C:\Users\testと打たないで cd /~test見たいな感じでC:\Users\testに移動できる書き方ってありませんか?
249 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 12:13:54.46 ] エスパー回答 cd %USERPROFILE%\test
250 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 12:42:02.05 ] 宇宙飛行士じゃないけど cd /d %USERPROFILE%
251 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 12:53:08.99 ] ありがとうございます!
252 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 13:01:01.75 ] pushd使え
253 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 13:04:50.44 ] pushdとpopdっていうのがあるんですね これ便利ですね!ありがとうございます!
254 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 06:25:29.84 ] hogehogeという名前のフォルダを右クリックの「送る」に登録したバッチファイルに送ると、 WinRARで圧縮すると同時に圧縮したファイル名の先頭にその時の日付と時刻を 「(yy-mm-dd_hh-nn) hogehoge.rar」 このように追加したいのですがどういう書き方をすれば良いでしょうか?
255 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 07:16:57.68 ] cd /d "%~dp1" set "ymdhm=%date:~2,2%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%" set "path=%path%;C:\Program Files\WinRAR" winrar a "(%ymdhm%) %~nx1.rar" "%~nx1"
256 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 10:14:55.58 ] "C:\Program Files\WinRAR.exe" a -ag+{(}YY-MM-DD_HH-MM{) } "%~1"
257 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 11:03:26.79 ] 7-zipを使っております c:\code\の中のファイルで新しく更新されたファイルのみを c:\backup.7zに追加・更新したいのですが それを手動でやってたのですがバッチファイルでこういうのをクリックしたら自動的にできるようには出来ませんか?
258 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 12:56:16.55 ] hh.exe ms-its:C:\Program Files\7-Zip\7-zip.chm::/cmdline/syntax.htm
259 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 15:06:31.79 ] >>255 完璧に動きました。 バックアップ用に使います。最高です。 ありがとうございました。 >>256 WinRAR自体に日付と時刻をファイル名に付加するパラメータがあったんですね。 ありがとうございます。
260 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 15:51:50.41 ] >>259 pushd "%~dp1" "C:\Program Files\WinRAR\WinRAR.exe" a -ag+(YY-MM-DD_HH-MM) " %~nx1.rar" "%~nx1"
261 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 11:18:59.37 ] Windows8でコマンド使おうとすると いつまでバッチ使ってるんだPowerShell使えやって警告が出るみたいだな Windows9あたりでcmdは廃止になるかもしれないな
262 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 18:19:04.70 ] なんのために?
263 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 18:30:20.91 ] PowerShellってvista以降なら標準で入ってるものですか? もし標準で入っているならPSに移行してみたいですが
264 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 20:34:51.75 ] >>261 mjd?batしか使かった事ないし腹立ってきた。 PowerShellとか難しそう
265 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 20:36:13.45 ] エディションによる
266 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 22:04:24.96 ] homeエディションなら問題ないですかね?
267 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 22:38:42.34 ] homeエディションなら問題なく入ってない
268 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 13:11:33.76 ] バッチファイルのソースによく書かれている nx〜〜とかってどういう意味ですか?変数とは違うものなんでhそうか あと~~みたいな上の方に出てるニョロニョロと、dpってやつが何者なんでしょうか。 初心者の質問ですみません・・・。
269 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 13:54:52.82 ] ntcmds.chmのバッチ パラメータを使用するを読むんだ
270 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 15:43:44.64 ] batファイルを為まくってたのに努力が水の泡になる困った PSに移行するべきかRubyとかPerlとかPythonを使うべきか
271 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 15:46:05.16 ] >>270 ほんとそうだよな。せっかく今まで覚えてシコシコ作りまくってたのに 腹立つわマジで
272 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 16:26:22.70 ] command.comはなくなるだろうが、cmd.exeがなくなるものか、あほども
273 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 16:41:16.63 ] >>269 バッチファイル初心者だから、ntcmds.chmって何だろうと思って 調べてみたんだが、コマンドのヘルプみたいなもんか。 Win7では日本語のヘルプは無いらしい・・・。 本当にPowerShellっての覚えた方が良いってことか d.hatena.ne.jp/IIJIMAS/20101101/1288542425#c
274 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 16:43:43.01 ] 俺もRuby,Perl,Pythonで書きたいところなんだが 会社のマシンってこいつらが標準でインスコされてないことがあるんだよな…
275 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 16:49:09.86 ] >>274 「ウィルスの危険性があるので導入は認めませんキリッ」(by糞管理部門)
276 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 16:49:35.83 ] >>272 どういうことですか? 2つはOSによって名前が違ってますが片方がはいっているものではないのですか? なくならないんですか?
277 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 16:50:31.25 ] プログラミングできない人が多い会社(おれ以外プログラミングってなに?レベル)の場合HSP導入するべき?
278 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 17:06:34.98 ] >>277 HSPはあくまでゲーム製作用スクリプトの趣が強いかと とりあえずはWSH辺りが相場なんじゃないかね
279 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 17:37:56.28 ] >>273 for /?
280 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 18:01:03.13 ] >>276 command /?
281 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 18:45:15.02 ] WSHってPower shellに置き換えられる過去の遺産になるんじゃないっけ
282 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 18:48:03.85 ] すれ違い
283 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 07:08:39.26 ] ちょっと変な質問ですが start myprog のコマンドはstartですが myprog でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう 別のスクリプトで start("myprog") => start myprogを実行する と一緒に s = exec("myprog") => myprogを実行して出力を返す s = run("myprog") と言ったメソッドを定義したいんですがその名前は何がいいのかなと
284 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 08:15:27.21 ] >>284 大雑把な説明だけど。 myprogがOSからみて実行ファイル(.exe、.com(笑)等)であればOSのプロセス管理機能の 管轄で実行されるので、特に暗黙のコマンドというものはない。 myprogがデータファイル(.txt等)であれば、OSに登録されている拡張子割当を元に 該当プログラムに"myprog"をパラメータとして勝手に渡して実行してくれる。 拡張子に割り当てられたプログラムが暗黙のコマンドになる。 (バッチファイルもこのパターンに相当する) どちらの場合もstartコマンド有無は特に関係ない。 後者のパターンで"start myprog"を実行した場合でも、startコマンド実行後myprogに割り当てられた プログラムが起動してmyprogがパラメータとして渡されるので、この場合も「暗黙のコマンド」が存在することになる。 拡張子割当の検索はバッチの範疇では無理・・・だと思う(レジストリを見なきゃならん)。 見当違いなことを言っていたらごめん。
285 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 09:24:59.10 ] 拡張子割り当てはassocとかftypeとか?
286 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 15:57:27.19 ] >>284 アンカミス 見当違い >>283 >start myprog >のコマンドはstartですが の引数もコマンドです。 >myprog >でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう myprogです。
287 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 19:08:03.54 ] >>284 callだよーん
288 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 19:17:40.95 ] C:\doc1.0\bin C:\doc2.0\bin という二つのパスがあります このうち前者のほうをシステムのパスに登録しているのですが batファイルでパスを後者に切り替えるにはどう書くのでしょうか?
289 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 19:21:27.08 ] set path=%path:C:\doc1.0\bin=C:\doc2.0\bin%
290 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 19:31:54.97 ] 289様ありがとうございます pathはC:\doc1.0\bin以外にもjavaなどのパスやらインストールしたソフトが勝手に登録したパスもありますが ご教示いただいたコードのC:\doc2.0\binの部分にそれらを足したほうがいいのでしょうか? それともC:\doc1.0\binというパスを見つけたらC:\doc2.0\binに置換するという動作でしょうか?
291 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 19:59:48.22 ] set /?
292 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 17:54:49.91 ] batファイルを起動してから毎時00分に指定したdosコマンドを実行したいのですがタスクスケジューラを使わずにbatファイルでできますか?
293 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 18:09:19.93 ] %TIME%の分を取り出して比較して これを繰り返せばよい 適当に待ちを入れて
294 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 22:44:52.61 ] :loop sleep 60-現在の秒数 タスクを実行 goto loop
295 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 23:04:41.04 ] 'sleep' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
296 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 23:09:40.73 ] waitfor sleep /t 60-現在の秒数
297 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 23:12:44.67 ] 'waitfor' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
298 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 23:25:22.75 ] msg %username% /time:60-現在の秒数
299 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 23:38:21.08 ] 送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか ら、Ctrl+Z キー、Enter キーを押します。
300 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 23:38:48.90 ] 送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか ら、Ctrl+Z キー、Enter キーを押します。 ^Z セッション名の取得エラー 1702
301 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 23:55:48.28 ] msg * /time:60-現在の秒数 sleep
302 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:18:03.47 ] セッション名の取得エラー 1702
303 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:34:43.64 ] :loop if not 60-現在の秒数 == 00 goto loop タスクを実行 :loop2 if 60-現在の秒数 == 00 goto loop2 goto loop
304 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:46:53.69 ] コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。
305 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:48:02.09 ] 役立たずばかりだな
306 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:50:05.81 ] おまえの役に立ってたまるかぼけ
307 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 01:00:26.80 ] おれんちはsleepあるからいいよw
308 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 19:30:14.31 ] 1秒スリープ echo WScript.Sleep(1000) >sleep.vbs cscript //Nologo sleep.vbs
309 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 20:33:07.77 ] >>294 >>296 osのバージョンによっては入っていないんだな >>301 セッション名の取得エラーって知っているか? >>303 アホか負担が高すぎる >>307 何も解決してない答えだな 汎用性がないわ >>308 これは使えるな
310 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 23:24:06.28 ] 厳密じゃなくて適当に1秒待ちで良いなら ping -n 2 127.0.0.1 1>nul OS制限はまず無いし
311 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 00:06:16.93 ] start /wait "" mshta vbscript:Execute("GetObject(""winmgmts:{impersonationLevel=impersonate}""). ExecNotificationQuery(""select * from __InstanceModificationEvent where TargetInstance isa 'Win32_LocalTime' and TargetInstance.Minute = 0 and TargetInstance.Second = 0"").NextEvent:Close")
312 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 00:15:53.25 ] pingは環境によってFWでブロックされて止まってしまう
313 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 00:24:34.55 ] アホには>>303 がちょうどよいw
314 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 00:41:31.13 ] mshta javascript:setTimeout('close()',10000)
315 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 10:04:22.81 ] そもそも最初は、「毎時00分に」なのに「00秒に」と誤解した上に、途中から「1秒待ち」の話になってる。 へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
316 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 15:37:58.48 ] 応用のできないアホはスルーで
317 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 15:40:21.60 ] msまで追求するのが漢道
318 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 16:12:00.10 ] >>315 へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
319 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 17:19:17.93 ] >>316 応用? 00分の検出と、1秒待ちってぜんぜん違う機能だぞ。 どう応用するのか、見せてもらえるかな?
320 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 17:26:48.84 ] >>319 なんでその2つを同じ階層で考える?
321 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 17:32:09.01 ] 応用のできないアホはスルーで
322 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 17:36:30.86 ] まぁまぁ落ち着けよお前ら 一番悪いのは>>303 なんだから
323 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 17:50:30.16 ] >>320 え゛っ、応用じゃないの? (w 応用見せてみと言うと階層が違うとか、なんだかねぇ。
324 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 18:00:38.70 ] おい単芝vipに帰れよ
325 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 18:21:54.10 ] HP機だと c:\hp\bin\sleep.exe が使えるよ
326 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 18:25:01.24 ] >>324 お前が帰れよ、つーかででくんな。
327 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 18:32:56.02 ] powershell start-sleep
328 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 18:42:28.32 ] 'powershell' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
329 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 18:43:43.94 ] 'c:\hp\bin\sleep.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
330 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 19:01:18.78 ] hpの事なんて聞いてねえよ!
331 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 19:05:48.99 ] おまえなんかに言ってないよw 自我肥大するんじゃねーよw
332 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 23:10:10.73 ] 自我肥大はスルーで
333 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 23:18:48.73 ] pause /t:n
334 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 23:59:17.74 ] >>292 やったな、おい!大漁じゃねーか!雑魚ばっかりだけど!
335 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 00:35:05.56 ] これってそんなに難しい質問なのか
336 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 00:45:48.84 ] 応用のできないアホには
337 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 03:33:48.01 ] choice /t 10 /d y
338 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 03:47:51.65 ] diskpart /t 15
339 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 05:32:44.27 ] >>333 続行するには何かキーを押してください . . . >>337 'choice' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 >>338 DiskPart はパラメータを処理できませんでした。 詳細については、'diskpart /?' を使用してください。
340 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 09:26:48.83 ] cmd.exe組み込みコマンドと同名のプログラムがPATH中に存在するとき、 組み込みコマンドを指定する方法はありますが? mkdirはmdに変更することで逃げられますが、この方法が使えないとき はどうすればいいでしょうか?
341 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 13:42:17.35 ] 似たような機能のtoolを入れる
342 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 14:41:11.23 ] >>340 うそこけ 組み込み優先でないってか?
343 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 16:03:37.77 ] >>341 それすると何がどうなるって?ばかか
344 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 16:30:39.06 ] >>340 逆ならいくらでもあるが
345 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 16:39:27.54 ] >>340 setlocal set path= 組み込みコマンド endlocal
346 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 17:28:38.33 ] >>342 うーん。試してみたらコマンドプロンプトは組み込み優先でした。 実はnmakefileの中だったのです。>>345 を採用することにしますた。 set path= & 組み込みコマンド
347 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 17:35:24.19 ] 最初からそう言え cmd /c 組み込みコマンド
348 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 22:14:14.00 ] timeout /t 10
349 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 06:18:57.26 ] NDWord: /t
350 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 10:59:35.06 ] 'NDWord:' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
351 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 12:48:26.59 ] 整合性レベルの低で起動する簡単な方法ないですか?
352 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 12:57:18.84 ] %~tIは更新日時のようですが、作成日時は取れないんですか?
353 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 13:30:43.72 ] start /low
354 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 13:56:05.67 ] for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (set a=%i%j&call echo %a%)
355 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 14:04:16.98 ] %i%jじゃ繋がっちゃうだろ
356 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:16:09.49 ] "%~nx1"が"ファイル"だとだめだろ
357 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:24:25.23 ] "eol= "ってやればうまく行きそうだが、行かん。遺憾だ
358 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:39:46.47 ] eol=の仕様は謎だな
359 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:46:13.61 ] findstr /r /c:"^[^ ].*%~nx1"
360 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:59:25.95 ] for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (if not defined a set a=%i %j&call echo %a%)
361 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 22:05:59.46 ] だからー "%~nx1"が"ディレクトリ"だとだめだろ
362 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 22:08:54.13 ] find "/" がええかも
363 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:34:25.37 ] for eolでggったら"delims= eol= "でいいみたいね
364 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 01:56:38.52 ] そのじゃディレクトリの作成日時は取れんな
365 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 12:30:43.59 ] start cmd /c pause とすれば、別プロセスで開始したコマンドの終了を待たずに次に進めるけど、 (start cmd /c pause & start cmd /c pause) | sort などとパイプすると、startしたアプリをすべて終了するまで次に進まなくなってしまうのを回避する方法ありません? (start cmd /c pause & start cmd /c pause) > hoge.txt リダイレクトなら普通に次に進めるのですが…
366 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 16:12:04.51 ] 意味不明だな (start cmd /c pause & start cmd /c pause) | sort で止まるのは当然だろw何がしたい? start cmd /c "pause | sort" とか?
367 名前:365 mailto:sage [2011/11/23(水) 17:35:31.29 ] >>366 確かにそのスクリプトじゃ何がしたいのか意味不明だけど、ようは、 [a.cmd] Echo 処理1開始 Rem 処理1 Echo 処理2開始 Rem 処理2 Echo 処理3開始 start "" "重い処理3cmd" Echo 処理4開始 start "" "重い処理.4cmd" pause exit /b ってのがあって、そのスクリプトに対し、 call a.cmd | tee "log.log" 的なことをしたのです。 a.cmd 内では、pause まで進むのにもかかわらず、 重い処理3cmd, 重い処理4cmd が修了するまで、 call a.cmd | tee "log.log" の次に進みません。 call a.cmd だけなら問題なく次に進むのだけど、何でそうなるのかが自分にはよくわからんのです。
368 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 18:33:00.23 ] こういうこと? ttp://scripting.cocolog-nifty.com/blog/2007/09/messagebox_5566.html
369 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 18:45:04.00 ] >ProcessStartInfo.UseShellExecute=trueでプロセスを起こすと、 >ファイルハンドルを引き継がないようです。 ってことは ショートカット作って start "" "重い処理3cmd.lnk" だな
370 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 21:55:29.35 ] rundll32.exe url.dll,FileProtocolHandler "重い処理3.cmd" でもええんじゃね
371 名前:365 mailto:sage [2011/11/23(水) 22:04:00.88 ] >>368-369 ありがとうございます!! > ttp://scripting.cocolog-nifty.com/blog/2007/09/messagebox_5566.html > どうもパイプの前のプロセスにパイプのハンドルの複製が残っているのでは? なるほど… ショートカットで、ばっちし うまく動きました。
372 名前:365 mailto:sage [2011/11/23(水) 22:12:02.17 ] >>370 なるほど! 手っ取り早くてイイですね!
373 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 20:05:50.79 ] cmd.exeのバグだな
374 名前:デフォルトの名無しさん mailto:sge [2011/11/24(木) 23:51:22.85 ] そうだな
375 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 19:02:04.82 ] hou 窓の杜 - 【REVIEW】UnixのコマンドをWindowsのコマンドプロンプトで利用可能にする「Gow」 www.forest.impress.co.jp/docs/review/20111206_496043.html
376 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 21:04:34.69 ] コマンドプロンプトで使えても、複数行の引数とかで困りそうな…
377 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:05:30.91 ] お願いします。 Windows7です。 host.txtが <ホスト名A>,<IPアドレス> <ホスト名B>,<IPアドレス> というようなパターンで記載されております。 キーボード入力→入力を変数に格納(%host%)。 ・変数%host%と一致する行を、host.txtの1列目から探す、見つかったら一致する行の2列目を変数ipに格納 という処理を行いたいのですが、まったく方法が思いつきません。 お知恵を拝借いたしたく。 よろしくお願いします。
378 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:30:42.76 ] set /p host="> " for /f "tokens=1,* delims=," %%a in (host.txt) do ( if "%%a" == "%host%" set "ip=%%b" ) echo %ip%
379 名前:377 mailto:sage [2011/12/15(木) 00:03:14.03 ] >>378 勉強になります。そのまま使わせていただきます。 ありがとうございます。
380 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 08:11:06.17 ] Windows2008使用です。 バッチ上から、システム環境変数(本来、マイコンピュータ右クリックでたどっていって編集するもの)を編集したいです。 reg add で編集(追加)はできるんですが、同じバッチ内(コマンドプロンプト内)では、反映されてません。 これを反映させられるようにしたいです。 pathを編集したいわけじゃないので、フルパスにしたからといって解決するものでもないです。 どなたかご存知の方いらっしゃいましたらご教授お願いします。
381 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 09:34:10.72 ] >set /?
382 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 09:58:29.01 ] 馬鹿登場
383 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 10:26:35.05 ] reg addしたものと同じものをsetしなおすのが手っ取り早いとは思うけどな。 start "" cmd.exe /c "%~0" %* とかやって独立したプロセス立ち上げると環境変数って新規のが使われるんだっけ? そうなったら今度はローカルで変更した環境変数まで消えちゃうんだけど。
384 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 14:42:17.97 ] setx/?
385 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 17:15:10.74 ] 'setx' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
386 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 17:59:03.37 ] setx.exeはServer 2003以降、Vista以降で有効の模様。2000/XPでは使えない。
387 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 18:26:27.91 ] 2000/XPは使わない。
388 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 11:08:09.34 ] すいません以前ここでcdは使うな。代わりに○○を使えって教わったのですがそのコマンドが忘れました どなたか教えてください
389 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 11:24:55.46 ] >>252-253 か? 別にcdでもいいよ
390 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 11:41:51.36 ] cd /d かもよ
391 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 11:58:44.93 ] pushdとか?
392 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 12:45:07.22 ] >>389-391 先生方ありがとうございます それです
393 名前:デフォルトの名無しさん [2011/12/26(月) 18:39:34.18 ] hoge_012.txt hoge_12345.txt hoge_abcd.txt みたいなファイル名のファイル群から、hoge部分を消したいんですが どう書けばいいですか? ren hoge_*.txt _*.txt ってやると _oge_012.txt _oge_12345.txt _oge_abcd.txt とリネームされました 期待する結果は _012.txt _12345.txt _abcd.txt です
394 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 22:06:51.92 ] >>393 ファイル名の先頭のhogeを除去したいなら for /f "tokens=1,* delims=_" %%a in ('dir /a-d /b ^| findstr /r "^hoge.*_.*"') do (echo "%%a_%%b" "_%%b") こんな感じかな ファイル名のどこかのhoge部分を除去したいなら、置換を利用して for /f "delims=" %%a in ('dir /a-d /b ^| find "hoge"') do (call :renhoge "%%a") goto :eof :renhoge set "name=%~1" set name=%name:hoge=% echo "%~1" "%name%" set name= goto :eof こんな感じかな リネームするときはechoをrenに置き換えてね
395 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 22:24:34.78 ] >>394 できました!ありがとう ワイルドカードで簡単に出来るものだと思ってました
396 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 16:34:39.16 ] できるよ
397 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 01:02:03.81 ] カレントフォルダにあるすべてのファイルに対して AABBBtxt→AA-BBB.txt AACCCtxt→AA-CCC.txt のように3バイト目にハイフンを入れたいです。 AAは必ず同じ文字列となります。 ren AA* AA-* としたらAA-BB.txtとなりBが1個きえてしまいました。 どのようにしたらよいでしょうか
398 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 01:08:57.22 ] まず set x=AABBBtxt をAA-BBB.txtに変えてみな それができればあとはできるだろ?
399 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 02:20:05.30 ] > 3バイト目にハイフンを入れたいです。 set a=%~1 set b=%a:~0,2%-%a:~2% echo %b%
400 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 02:22:35.04 ] > AAは必ず同じ文字列となります。 set a=%~1 set a=%a:AA=AA-% echo %a%
401 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 11:18:02.60 ] batファイルからカラーダイアログを呼び出せることって無理ですか?
402 名前:397 mailto:sage [2011/12/29(木) 00:13:43.43 ] >>398-400 ループ処理が難しそうですが、なんとかできそうです。 ありがとうございました。
403 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 02:26:05.21 ] mshta "about:<script>function b(){new ActiveXObject('Scripting.FileSystemObject' ).GetStandardStream(1).Write(d.ChooseColorDlg().toString(16));close();}</script> <body onload='b()'><object id='d' classid='clsid:3050f819-98b5-11cf-bb82-00aa00b dce0b'></object></body>"|more
404 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 16:14:43.54 ] 【質問】 ・1-18までカウントしていく関数(サブルーチン?)を作りたいです。 調べて自分なりに試しているのですが、上手くいかずに行き詰ってしまいました。 下記のように、1-9までは01-09のように0を付加して表示したいです。 01/18 処理結果 02/18 処理結果 【 OS 】 ・Windows XP Professinal SP3 【構文】 SET /A CNT = 1 SET /A IND = 18 CALL :ZERO %CNT% :ZERO IF "%1" LEQ "9" ( SET /A DD = %1 SET /A DD += 100 SET /A ABC = %DD:~-2% ECHO %DD:~1,2%/%IND% SET /A CNT+=1 ) EXIT /B よろしくお願いします。
405 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 17:07:34.22 ] > 1-18までカウントしていく関数(サブルーチン?)を作りたいです。 仕様がよくわからん。18超えたらどうするの? 01,02,03,・・・17,18とechoさせたいわけじゃないよね? 処理結果とあるけど、別の処理をループさせてのカウントかな? だとすればわざわざサブルーチンにしなくても set CNT=101 で101-118をカウントして %CNT:~-2% で表示させればいい @echo off set CNT=100 :loop set /a CNT+=1 echo %CNT:~-2%/18 echo 処理結果 if not %CNT%==118 goto :loop pause
406 名前:450 mailto:sage [2012/01/05(木) 18:39:55.01 ] >>405 レスありがとうございます。 教えていただいた方法でできるようになりました。 どうもありがとうございました! SQLiteのVACUUMとREINDEXのバッチ作成の際に、01/18: ファイル名.拡張子 と表示して、 現在何個あるうちの何番目を処理中かどうか、というのを表示させたく作成中でした。 その際に、1-9までについては先頭に0を付加したかったのですが、書式的なもののやり方 が分からずにいました。 ※1/18ではなく、01/18のように。 【バッチ内容】 SET ADDONS = addons.sqlite SET /A CNT = 100 SET /A IND = 18 CALL :loop %CNT% %ADDONS% REM ここに 01/18: addons.sqlite と表示させたい。 sqlite3.exe ..\..\%ADDONS% VACUUM sqlite3.exe ..\..\%ADDONS% REINDEX :loop SET /A CNT += 1 ECHO %CNT:~-2%/18: %2 EXIT /B 【希望結果内容】 01/18: addons.sqlite
407 名前:404 mailto:sage [2012/01/05(木) 18:43:23.40 ] >>404 です。 >406の名前欄が間違っていました。 失礼しました。 ※教えていただいてできたので良かったのですが、 >>404 でなぜうまく動作しないのか謎でモヤモヤが。 どうもありがとうございました。
408 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 21:09:16.86 ] >>407 if "12" leq "9" echo 文字列の比較は一桁目から
409 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 21:11:30.07 ] ×一桁目 ○左
410 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 22:31:16.99 ] コマンドプロンプト上で for /L %i in (1,1,10) do @(set /a 123) とやると 123123123123123123123123123123 と改行挟まずに出力されるんですが、これのメカニズムを誰か説明してください。
411 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 22:46:19.69 ] set が改行を剥いでいるんじゃね。 set /P とかで、入力は改行で終了するだろうけど、結果には改行が入っていない方が便利だし。
412 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 23:14:53.08 ] setが改行を出さないだけだろ
413 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 19:02:34.30 ] :loop execcommand sleep 600 goto loop というループがあって 真ん中あたりでユーザーがその挙動を変えられるようにしたいんだけど 何も入力がなければループを妨げない、 入力があったらキーを set key=? して call :setoption するにはどうすればいいでしょう。
414 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 19:47:08.87 ] >>413 www.vector.co.jp/soft/dos/util/se053514.html こういうツール使うとか これがまともに動くかどうかわからないから試してダメだったら 似たようなの探すか、作って配布してくれ
415 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:36:27.20 ] choice/?
416 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 22:04:41.80 ] tomeout/?
417 名前:デフォルトの名無しさん [2012/01/12(木) 22:42:42.89 ] treeを入れるとそのディレクトリのファイルをツリー形式で出力されますが これに加えてファイル名+サイズ名+最終更新日を出力したいのですが可能でしょうか?
418 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 23:00:03.63 ] dir /s を整形するとか。。めんどくさそうだけど。
419 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 23:03:13.11 ] vbs とかで作った方が楽かと。
420 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 23:18:18.22 ] バッチでは?
421 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 01:17:12.05 ] ttp://www1.axfc.net/uploader/Sc/so/309130.jpg ttp://www1.axfc.net/uploader/Sc/so/309131.zip こんなのどう 普通にtreeするのに比べるとめちゃくちゃ遅いけど 表示のスタイルは tree /a /f を参考に ファイルの表示は dir /a-d /t:w を行ごとに
422 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 05:19:27.39 ] >>417 www.vector.co.jp/soft/win95/util/se247619.html
423 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 06:58:49.41 ] >>422 スレチ
424 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 15:57:19.14 ] >>415-416 choiceはできそうだけど、timeoutはどう判定すんだ?
425 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 17:00:32.46 ] むりぽ
426 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 22:16:52.32 ] 画面で区別できんだからバッチでもできるっしょ
427 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 02:31:56.51 ] だめぽ
428 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 00:23:57.26 ] %1に渡したファイルやフォルダがルートにあるのかどうかを判定するのってどう書けばいいですか? %~1が3文字だったら、とか思いついたけどもっと上手い方法だったり定石があるなら教えてください
429 名前:428 mailto:sage [2012/01/15(日) 00:25:03.61 ] 訂正します > %~1が3文字だったら %~dp1が3文字だったら
430 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 00:36:58.61 ] UNCとかにも対応したいなら set a=%cd% push .. set b=%cd% popd して比較するとか
431 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 01:41:37.76 ] "%~p1" == "\" だとダメなの?
432 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 09:17:31.43 ] >>430 ありがとうございます UNCのことはすっかり失念していました cdでUNCはカレントに出来ないと言われて困りましたけど pushd "%~dp1" で勝手にネットワークドライブの割り当てをやってくれて カレントディレクトリを移すことが出来ました >>431 それでよかったですよねありがとう pushd "%~dp1" if exist "%cd%\%~nx1" (call :ROOTEXP "%cd%\%~nx1") else echo ファイル見つからない pause exit :ROOTEXP echo "%~1" echo "%~dpnx1" if "%~p1"=="\" (echo ルートディレクトリにあるよ) else echo ルートじゃないよ exit /b 一応、これで意図した動作になりました ルートにあるファイルやフォルダの場合、echo "%~1" がZ:\\test.txt のように\\となるのですが 正常に動いてるみたいですし、"%~dpnx1"で正しいパスは取れるのですが この書き方で問題が出るケースはありますでしょうか?
433 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 20:29:01.37 ] 空きメモリか使用メモリを標準出力でゲットするコマンドないですか。 memはさすがに消滅していたw
434 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 21:04:49.82 ] wmic
435 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 00:29:25.23 ] tasklistの各行の出力結果を合計してみるとか
436 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 03:38:43.26 ] それはねーよ
437 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 12:21:08.71 ] wmic調べてみます。ありがとうございました。
438 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 12:27:17.34 ] wmic os get freephysicalmemory
439 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:08:24.54 ] for /f %%i in ('wmic os get freephysicalmemory') do set x=%%i echo %x% ECHO は <ON> です。
440 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:35:24.25 ] for /f "eol=F" %i in ('wmic os get freephysicalmemory') do echo %i
441 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:49:41.37 ] ECHO は <ON> です。
442 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 21:14:43.83 ] for /f "skip=1" %i in ('wmic os get freephysicalmemory') do if not defined mem set mem=%i echo %mem%
443 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:58:50.04 ] for /f %i in ('wmic os get freephysicalmemory') do (call set x=%i) & if defined x call set mem=%i echo %mem%
444 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 03:36:44.19 ] 'wmic' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
445 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 14:12:06.16 ] Windows 2000以降のOSではWMIが標準で実装されている Windows 2000にはwmic.exeは用意されていない
446 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 15:37:33.32 ] それを言うならXP以降だろw 以降はそれも含むんだから
447 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:17:43.40 ] win2kはwmiコンポーネント実装済みだけどwmicは同梱されていないって事じゃね?
448 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 19:55:57.58 ] それを言うなら>>446 阿呆だろw
449 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 00:35:34.90 ] xp homeはwmic入ってないのか
450 名前:デフォルトの名無しさん [2012/01/22(日) 15:35:57.54 ] D:\MUSIC\(複数アーティスト)\(各々に複数アルバム)\Resize\Folder.jpg という階層で Folder.jpgを1つ上のディレクトリに上書き移動して、Resizeフォルダを削除したいのですがうまくできません。 ご教示いただけないでしょうか、一所懸命初めてバッチ書いてみましたがたぶん見当はずれです cd /d D:\MUSIC for /d %%A in (*) do ( cd %%A for /d %%B in (*) do ( cd %%B\Resize move /y Folder.jpg ..\Folder.jpg cd .. rd /s /q Resize ) )
451 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:36:07.61 ] >>450 cd /d d:\music dir /a-d /b /s Folder.jpg >list_fjpg.txt dir /ad /b /s Resize >list_Resize.txt 処理するファイルが上のリストで問題ないようならこれで出来ると思う for /f %%a in ('dir /a-d /b /s Folder.jpg') do move "%%~a" ".." for /f %%b in ('dir /ad /b /s Resize') do rd /s /q "%%~b" Resizeフォルダ以外にもFolder.jpgがあって上のがダメなら dir /a-d /b /s Folder.jpg|findstr /e /l /i "\Resize\Folder.jpg" >list_fjpg.txt これでたぶん大丈夫だと思うけど試してダメだったらfindstrのオプションとか工夫してみて
452 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:36:27.77 ] cdをpushdやpopdに変えて試してみてね
453 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:49:17.51 ] >>450 cd /d "D:\MUSIC" for /d /r %%a in (*) do ( pushd "%%a" call :movejpg "%%~na" popd ) goto :eof :movejpg if not "%~1" == "resize" (if not "%~1" == "Resize" goto :eof) move Folder.jpg ..\ cd ..\ rmdir resize goto :eof
454 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:51:54.76 ] jpgを拾うようにした自前のものがよく似ていたので1行目だけ編集したのを貼ってみる。 cd /d D:\MUSIC for /r /d %%i in (*) do ( if exist "%%i\resize" ( move "%%i\resize\*.jpg" "%%i" rd /s /q "%%i\resize" ) ) 趣旨が違うかもしれないが。
455 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 18:06:41.19 ] >>454 のを少し弄って cd /d D:\MUSIC for /r /d %%i in (*) do ( if exist "%%i\resize\folder.jpg" (move /y "%%i\resize\folder.jpg" "%%i"&&rd /s /q "%%i\resize") ) これで質問者の要求仕様を満たすんじゃね?
456 名前:450 [2012/01/23(月) 09:47:50.42 ] みなさんありがとうございます! せっかくなので環境をコピーして4つとも試してみましたがどれもうまくいきました! バッチファイルが綺麗に完走するのってピタゴラスイッチ的な爽快感がありますね
457 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 13:55:01.20 ] 2chブラウザのkakikomi.txtを自動で編集して、 日付データと本文部分だけを残すというbatファイルをつくりました find /v "Subject:" <kakikomi.txt >kakikomi2.txt find /v "URL :" <kakikomi2.txt >kakikomi3.txt find /v "From :" <kakikomi3.txt >kakikomi4.txt find /v "Mail :" <kakikomi4.txt >kakikomi5.txt というゴリ押しで一応目的は達成できたのですが、時間もかかるし無駄が多い気がします もっとスマートな書き方もあるのでしょうか? kakikomi.txt内の書き込みデータは、 -------------------------------------------- Date : 2012/01/01 00:00:00 Subject: スレッドタイトル URL : ... From : Mail : 本文 -------------------------------------------- のくり返しになっています
458 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 14:34:47.86 ] findstr/?
459 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 14:37:22.65 ] findstr /b /v "Subject: URL FROM MAIL" "kakikomi.txt" >"kakikomi2.txt" 本文の行頭に同じ文字列があったらその行も消えるけど>>457 よりはマシと思う
460 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 14:49:55.56 ] >>459 ありがとう!次回からは書いてくれたものを使ってみます
461 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 23:44:16.41 ] フォルダ内のtest*.batを順に実行したいのですが、10回callする毎に標準出力に メッセージを出したく思います ↓を実行すると毎回echoが実行されてしまうのですがどう修正すべきでしょうか? set /a N=1 for /F %%a in ('dir .\test*.bat /b') do ( call %%a set /a N = %N% + 1 if "%N%"=="10" do ( echo ---------- set /a N=1 ) )
462 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:15:29.97 ] >>461 echo onで実行されたバッチがどうなってるか見りゃわかるけど… 遅延環境変数でググってみ。
463 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:56:33.67 ] for /f %%a in ('dir /b test*.bat') do ( call %%a call :COUNT ) pause&exit :COUNT set n+=1 if %n%==10 (echo ----------&set n= ) exit /b
464 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:59:13.37 ] > set n+=1 set /a n+=1
465 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 09:22:44.38 ] 遅延環境変数のことを失念していました(ノ∀`) サンプルまで書いていただいてありがとうございます
466 名前: 忍法帖【Lv=5,xxxP】 mailto:sage [2012/01/28(土) 20:05:08.71 ] Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか? 95とかならexec.batをいじるとできるそうですがいい方法無いですかね マウスでカチカチみんな設定してるの?
467 名前: 忍法帖【Lv=5,xxxP】 mailto:sage [2012/01/28(土) 20:06:15.39 ] Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか? 95とかならexec.batをいじるとできるそうですがいい方法無いですかね マウスでカチカチみんな設定してるの?
468 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 20:08:12.26 ] setx
469 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 20:37:47.45 ] autoexec.batだろ
470 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 20:50:34.72 ] >>467 GUIだけどキーボードだけで設定ダイアログまで行けるぞ Windowsキー → 「環境変数」と入力 → 上に「環境変数の設定」が出て来たらEnter
471 名前: 忍法帖【Lv=5,xxxP】 mailto:sage [2012/01/28(土) 21:30:25.20 ] Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか? 95とかならexec.batをいじるとできるそうですがいい方法無いですかね マウスでカチカチみんな設定してるの?
472 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 21:43:58.44 ] >>469-471 >>468 で完璧な回答が出てるのに… メクラ?
473 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 22:00:05.37 ] exec.batってなんだよ
474 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 22:02:10.08 ] >>472 自分で調べる気がないってことでしょ。 スルーでいいよ。
475 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:33:43.17 ] コンソールで使える日本語TTフォントはMSゴシックしかないの?
476 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 00:12:38.08 ] fixed98epsonマジオススメ
477 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 20:37:29.16 ] 標準で入ってるものではMSゴシックだけ?
478 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:41:10.62 ] レジストリいじれば好きなTTフォント使える。 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont でググれ
479 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:41:35.10 ] ほんとかよ 使えなかったが?
480 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 23:24:15.61 ] 俺は使えてる、XP x64。 レジストリ微妙に何か間違ってるか、プロンプトを間違えているとか? 64bit OS で 32bit の cmd.exe を常用してる? ↓が『64bit OS で 32bit の cmd.exe 』の場合 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
481 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 23:27:13.38 ] プッ
482 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 03:05:05.71 ] コマンドプロンプトから引数を与えたときはちゃんとaiueo.txt作れるんだけど ドラッグアンドドロップでやるとaiueo.txtを作ってくれない どうしたらD&Dで引数受け取ったとき出力をファイルに書き出せる? aiueo.bat ------------------- setlocal set a=aiueo.txt if not exist %a% (echo Aiueo > %a%) date /t >> %a% time /t >> %a% echo %1 >> %a% endlocal
483 名前:482 mailto:sage [2012/02/01(水) 03:12:11.39 ] ごめんなさい自己解決しました バッチファイルのあるフォルダじゃないとこに保存されてた・・・
484 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 04:40:16.31 ] >%~dp0%a%
485 名前:482 mailto:sage [2012/02/03(金) 03:10:09.37 ] d
486 名前:忍法帖 [2012/02/05(日) 01:47:02.01 ] --------終了-------
487 名前:忍法帖 [2012/02/05(日) 01:47:36.54 ] --------終了-------
488 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 03:25:30.09 ] 質問をさせて下さい。 親フォルダにbatを置いて実行し、batの力でそこから子フォルダ、よく孫フォルダ、たまに曾孫 稀により下のバラバラな階層にある複数の最下層フォルダを、順々にカレントディレクトリ にしたいのですが、どうやればよいのでしょうか? やりたいことは最下層フォルダにあるファイル数が10個未満の場合に その最下層フォルダを任意の場所に移動したいのです。 最下層フォルダからの個別移動に関しては最後の削除あたりがうまくいきませんでしたが それ以外はこのスレを参考にして、なんとか動かすことができました。ありがとうございます。 後は親から複数の最下層フォルダに辿り着ければ何とかなりそうなのですが… どうか知恵をお貸しください。よろしくお願いします。 個別の処理.bat for /f %%a in ('dir /a-d ^|find "個のファイル"') do ( echo %%a if %%a LSS 10 ( call :IDOU ) else ( echo 10個以上ある ) ) exit /b :IDOU echo このフォルダ内のファイル数は10個未満 for %%I in ("%~dp1.") do ( md "%%~nxI" set DNAME="%%~nxI" move *.* "%~dp0%%~nxI" move "%~dp0%%~nxI" "C:\Users\XXX\Desktop\移動先\" cd .. pause del "%~dp0%%DNAME:~1,-1%" ) exit /b
489 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 05:35:08.76 ] >>488 カレント配下のディレクトリ全てで最下層であるかどうかの判定 for /d /r %%a in (*) do ( for /f "usebackq" %%b in (`dir /ad "%%a"^|find "個のディレクトリ"`) do ( if %%b==2 (echo "%%a" の下にディレクトリはないよ) ) ) pause exit /b > 最下層フォルダからの個別移動に関しては最後の削除あたりがうまくいきませんでしたが echo on にしてみれば何が悪いか分かるはず
490 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 05:35:19.42 ] >>488 :IDOUをcallするときに引数いれてないけど、:IDOUの中で%~dp1って使う意味はあるの? それとsetするときはset v="〜"じゃなくてset "v=〜"ってしたほうがいいと思うよ そうすれば変数の中にダブルクォーテーションが入らない delのところも普通に%DNAME%と書けるようになる ところでdelのところ%の数がおかしいんじゃないか? 削除がうまくいかない原因はそれではなかろうか 最下層の判定は、そのディレクトリ内のディレクトリの個数調べればいいんじゃね ディレクトリを順に回りたければ for /d /r %%a in (*) do (pushd "%%a" 〜) とか for /f "delims=" %%a in ('dir /ad /s /b') do (pushd "%%a" 〜) とか? こんな感じで実行したところからサブディレクトリを全部回ってくれるんじゃないかな
491 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 05:40:35.55 ] レスがかぶっちゃった delはファイルじゃなくてディレクトリ消したいのか だったらそもそもdelじゃなくてrmdirにしないと
492 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 06:14:41.60 ] >>488 set MVDIR="C:\Users\XXX\Desktop\移動先" for /d /r %%a in (*) do ( for /f "usebackq" %%b in (`dir /ad "%%a"^|find "個のディレクトリ"`) do ( if %%b==2 ( for /f "usebackq" %%c in (`dir /a-d "%%a"^|find "個のファイル"`) do ( if %%c lss 10 ( move "%%a" "MVDIR" ) )))) pause exit /b
493 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 11:23:22.56 ] 実行しなくてもわかる、1個目はリネーム、2個目以降は上書き確認でストップ
494 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 12:29:44.08 ] >>489 以前はusebackqも/rも難しく考えて良く分からなかったのですが このような身に沁みて実用的なアドバイス頂いたお陰で身近な存在になれました。 ググッて他の実用例を見ながら勉強します。ありがとうございます。とても参考になりました。 後はecho onについてなんですが、これは最初の行に@echo onと書くだけで良いのでしょうか? 現在はecho 変数 かアヤシイ直後にpauseでcmd画面の直前を確認する位しか方法が分かりません 初歩的な質問ですみませんが、もしよろしければご指導頂ければ助かります。 >>490 カレントフォルダ名を取得しようとしたforになりますが%~dp0.ですね、失礼しました。 それとsetについてですが、二重の"のうち1つを削る様な場面では有効でしたが 例えばset "v=v&v"とするとecho "%v%"では大丈夫でも%v%ではバグるみたいでした。 もし私のやり方が間違っていたらごめんなさい…けど便利ですね。 これからは使わせて頂きます。最下層判定と合わせてありがとうございました。
495 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 12:31:41.87 ] >>491 cdの行を消してrmdir "%~dp0"としてみましたが出来ませんでした。 「プロセスはファイルにアウセスできません。別のプロセスが使用中です。」 との事だったので、そもそもの消すフォルダからbatを実行したのでは難しそうと思い 試しにrmdir "C:\Users\owner\Desktop\移動先\新しいフォルダ" としてみたら無事に消す事が出来ました。ありがとうございます。 >>492 ありがとうございます!無事に出来ました! 粋な"MVDIR"のお陰でもう忘れないと思います。 後はじっくり解読しながら使いこなせるよう頑張ります。 わざわざ全文書いて頂きどうもありがとうございました。 >>493 >2個目以降は上書き確認でストップ 483では出てきませんでしたが、確かに他の書き方だと出てきました。 てっきり削除確認のY/Nかと思ってましたが上書きだったんですか… 思いもしませんでした。ご指摘どうもありがとうございました。
496 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 13:04:19.85 ] >>494 echo %v%でばぐるのかな これは&を^&に置換するか、 setlocal enabledelayedexpansion としておいて、echo !v!とかすればちゃんと&も表示されるよ
497 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:07:11.18 ] 置換するにも、遅延しないとできねえよ
498 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 18:25:43.69 ] windowsのスタートアップの中でバッチファイルを動かして、他のマシンにマジックパケットを 送りたいんですが、どうもその時点で無線LANが繋がってないようで、対象マシンがWakeUp してくれません。 バッチ処理を遅延するにはどうしたらよいですか?
499 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 19:04:48.67 ] ping -n timeout
500 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 21:01:48.95 ] Vista 以降ならむしろ、スタートアップじゃなくてタスク向きな気がする。
501 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 21:15:45.22 ] :loop ping -n 1 "192.168.0.1"||goto :loop
502 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 21:29:06.33 ] powershell -command { start-sleep -s 5 } なんでWindowsって意地でもsleep標準装備しないんだYO!
503 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 21:52:33.59 ] >>502 これ以上Unixからパクるのはプライドが許さないから なんちてw
504 名前:498 mailto:sage [2012/02/09(木) 22:27:55.28 ] みなさま、ありがとうございます。 とりあえず、対象マシンがスリープ状態なので、ping に応答しません timeout と powershell-command {start-sleep -s 120 } を試してみたんですが、起動後ならうまく動くんですが、 スタートアップから起動すると、うまく行きません 電文の送信に失敗しました、とか一瞬表示されてパケットは送られていないようです。
505 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 22:36:54.27 ] スタートアップだから動かないってことはないだろう 最終行にpause入れて何がどう駄目なのか調べてデバッグするしか
506 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 22:42:57.44 ] > 対象マシンがスリープ状態なので、ping に応答しません 無線LAN親機とかデフォルトゲートウェイにpingしてLANが繋がってからマジパケ送ればいい
507 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 15:18:28.31 ] システムのパスにbatファイルから一時的に追加する書き方を教えてください
508 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 15:36:47.43 ] sex
509 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 17:29:08.94 ] set PATH=c:\bin;C:\tool;%PATH%
510 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:16:11.19 ] path /?
511 名前:498 mailto:sage [2012/02/10(金) 20:59:56.43 ] >505,506 そうか、pingは自分のethを試すためだったんですね。 powershellもぐぐってやっと動く用になりました。 ありがとう
512 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:09:40.46 ] >>502 PowerShellを標準装備するようにしたから、わざわざcmd用に作る必要がないってだけじゃね? まあたいした手間でも全然ないとは思うが
513 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 15:44:36.41 ] 質問なんですが、 ping 192.168.0.4 | find "Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)" echo %errorlevel% 上記をbatで行うと、pingが0%lossでも戻り値が1になってしまいます。 ただ上記のコマンドをプロンプトで実行→echo %errorlevel%で確認すると戻り値は0となります。 これは何故なんでしょうか?
514 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 15:56:01.63 ] ローカルにサーバを立ててましてIPが127.0.0.1になります サーバが動いているかをbatファイルで監視して、サーバが落ちたらbatファイルを終了すると方法を伝授してください
515 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 15:59:23.21 ] >>513 バッチファイルにも(0% loss)ってそのまま書いてる? もしそうなら%を%%にしてやってみて
516 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 18:21:04.29 ] >>515 出来ました!ありがとう御座います でも「0%」だと何かの変数を展開しようとするんですかね? それを新たに%を付けて文字列として扱う用にしてるとか… どっちにしろ""で囲んだら変数は展開されないっていう認識だったのでそれも間違いみたいですね… 勉強してきます
517 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:05:54.56 ] wgetを使ってソフトの最新バージョンをDLできるバッチを作成したいと思ってるのですが ファイルのリンクがttp://hoge/更新日付/a-z,0-9を含む不規則な文字列/v1.0.0.zip のような場合で不規則な文字列に対応させるにはどう記述すればいいでしょうか 日付は%date%で置き換えられるのが分かりましたが今回の件で詰まってしまいました・・・
518 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:06:05.33 ] >>514 @echo off :pingchk ping 127.0.0.1 -n 2 if errorlevel 1 goto end if errorlevel 0 goto pingchk :end これで行けるかと 相手先ノードへのping間隔を多くしたいならlocalhostへのpingでsleepにしておけばいいと思います
519 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:35:28.07 ] @echo off :re ping 0.0.0.1||goto re :end
520 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 20:47:39.62 ] for /f "tokens=4 delims=/" %%a in (target.html) do (echo ttp://hoge/更新日付/%%a/v1.0.0.zip)
521 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 01:24:18.48 ] >>517 直リン or 不規則な部分、の入ったページがあるならそのページをゲットして URL を抜き出す or フルのURLを生成、すればいいじゃない
522 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 11:55:51.46 ] >>518 ありがとうございます!
523 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 11:59:26.64 ] >>518 試してみたんですが、動きませんでした Windowsにapacheを入れてサーバ起動後にbatファイルを起動して、サーバを終了させても batファイルが終了しませんでした
524 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 12:13:29.84 ] 鯖が生きてるかどうかとpingが通るかは別だろ もっとまともなスクリプト使ってチェックするか wgetしてファイルの中身チェックするか wget localhost/test.htm || echo 死んでる
525 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 13:22:54.48 ] >>523 @echo off :pingchk tasklist | findstr apache.exe if errorlevel 1 goto end if errorlevel 0 goto pingchk :end
526 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 13:31:34.25 ] >>520-521 ありがとうございます for /f "tokens="勉強になりました 調べまくってようやく521さんの答えにたどり着いたとこでした
527 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 13:52:56.86 ] >>524 サーバが停止してたら127.0.0.1にアクセスできなくなるのですがこれは通らないものなんですかね? >>525 プロセスを監視する方法がいいのかもしれません そのまま実行するとcpu100%になってしまうので1秒スリープをいれたいのですが @echo off :pingchk ping 198.162.0.0 -n 1 -w 1000>nul tasklist | findstr httpd.exe if errorlevel 1 goto end if errorlevel 0 goto pingchk :end とやって1秒スリープを入れてるのですがスリープされません ping 198.162.0.0 -n 1 -w 1000を単品でdosに打つとタイムアウトはしたので存在しないipであります
528 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 14:31:07.38 ] >>527 > サーバが停止してたら127.0.0.1にアクセスできなくなるのですが そのアクセスとはHTTPアクセスであって、応答無くなるのは それはwebサーバが停止しているだけの話で PCそのものネットワークが有効か調べるpingとは直接関係ないから。
529 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 16:47:17.56 ] ヘタすると、OS死んでても ping 応答する奴すらあるし。
530 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:38:45.91 ] >>526 おめ >>527 ちょい外れるけど 198.162.0.0 への ping がキモ過ぎる…… Apache ならサービスで起動しておいてサービスの状態を監視する方がスマートだと思う。 sc <サーバー> query Apache2.2 | findstr "RUNNING" 1>nul 2>&1 if エラーレベル なんちゃら みたいに。
531 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 02:49:03.22 ] テスト copy a Ā
532 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 02:52:17.36 ] Microsoft Windows XP [Version 5.0.2195] (C) Copyright 1985-2001 Microsoft Corp. >copy a Ā Ā was unexpected at this time. なんでこうなるの?
533 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 03:05:39.01 ] >copy a Ă 1 file(s) copied. これはokなのに…
534 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 06:17:53.00 ] codepageは?
535 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 08:09:38.30 ] D:\>chcp 現在のコード ページ: 932 D:\>copy a Ā Ā の使い方が誤っています。 D:\>copy a Ă 1 個のファイルをコピーしました。 なんだろこれ
536 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 09:54:38.86 ] 調べてみたらこんな感じ switch (c){ case '&': case '<': case '>': case '|': return 0x100; default: return c; }
537 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 11:08:50.01 ] Ā = Ā
538 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 11:14:57.58 ] Ā = Ā
539 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 12:17:59.80 ] C:\proc\data\ ディレクトリ内にある 音響.txt さくら.txt 夕暮れ.txt 冬籠もり.txt 花 暦.txtなどの複数ファイルのうち、 ひとつずつloop+moveで処理したいと思っています find "C:\proc\data\" -maxdepth 0 -name "txt" -exec set input_file = {} \; call "C:\proc\resize.bat" "%input_file%" move %input_file% "C:\proc\data\move\" txtでファイルを検索し、moveでresize.bat適用後にファイルを移動させることで 最終的にC:\proc\data\内のファイルがなくなって処理終了、と考えているのですが 最初のfindコマンドが「操作可能なプログラムまたはバッチ ファイルとして認識されていません」と表示されてしまいます おそらく最初のコマンドがunixコマンドなのだと思うのですが dosコマンドで同じように、特定のフォルダからファイルのパスをひとつだけ検索して変数に置き換えられるコマンドにするにはどうすればいいでしょうか よろしくお願いします
540 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 12:36:31.32 ] for %f in (C:\proc\data\*.txt) do echo %f 次回は「バッチファイル」で検索してから質問する事。 > find "C:\proc\data\" -maxdepth 0 -name "txt" -exec set input_file = {} \; > call "C:\proc\resize.bat" "%input_file%" > move %input_file% "C:\proc\data\move\" そもそも、findがあっても動かねーだろ。w
541 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 14:12:40.98 ] それ以前にfindが無いってのはどういうこと? win98にはあったような…。win95位前は覚えてないんだけど。
542 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 14:22:32.94 ] winのはfindはコマンドが違うし別物 どこからか落としてきて使えないことはないけどfor /f使うのがめんどくさい
543 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 14:27:51.28 ] いやそれは知ってるけどさ、元からある奴は消さなきゃ無くならないだろ。 最初からないっていう環境はあんの?
544 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 15:51:48.05 ] >>539 の事だから、どんなことやってるか凡人には想像もできない。 するだけ無駄だから「無い」はそのまま受け入れよう。
545 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 16:11:39.69 ] forfiles使えよ
546 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 17:14:35.31 ] >>540 うまくいきました!ありがとうございます! やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね
547 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 17:37:03.90 ] >やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね だって
548 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 17:45:33.75 ] UNIXを知ってると自慢したいだけだろw
549 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 17:54:23.44 ] 一応forfilesがunixのfindもどきなんだけどね。 一応findstrがunixのqgrepもどきなんだけどね。
550 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 18:49:41.24 ] technet.microsoft.com/ja-jp/interopmigration/bb380242
551 名前:デフォルトの名無しさん mailto:saga [2012/02/15(水) 19:02:11.46 ] こんなゴミのリンク貼るなよ。 >>550 サポートされているオペレーティング システムWindows 2000 Service Pack 3/Windows 2000 Service Pack 4/Windows Server 2003/Windows XP
552 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 20:19:45.98 ] すいません、教えてください。 バッチファイルの中の処理でファイルを作成するステートメントを書きます。 次のステートメントの処理が始まるのは、先のファイル作成の完了(ディスク上にファイルができる)の後ということでよいでしょうか。 コマンドプロンプトを考えれば、そうなると思うのですが、念のため。例えば外部ディスクへの書き込みまちなどをしている間に、次の処理が始まるということはないでしょうか。 初歩的な質問ですがお願いします。
553 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:16:05.18 ] 普通に考えれば分かるだろ?
554 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:33:11.21 ] へえ?どう分かるんだ。教えろ。
555 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:40:23.55 ] 基本的に逐次処理されるよ ただしstartコマンドは/waitしない限りプロセスを起動して終了を待たずすぐ制御を返す
556 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:44:12.61 ] 当たり前すぎて、つまらないレスですね
557 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:47:07.31 ] 前のコマンドの終了を待たずに次のコマンドを実行するってことは 前のコマンドの実行開始とほぼ同時に次のコマンドを、更にその次を…ってことで 全てコマンドを同時実行するに等しい
558 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:52:43.88 ] 書き込み量が多くてバッファに残ってるのに 次の処理が始まる可能性は?
559 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:56:07.57 ] >>558 頭悪そう
560 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 21:58:16.11 ] 頭悪いひとが悩むようには作られてないってことだよw普通に考えれば
561 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:03:42.82 ] プロセスから見て終了していても、 実際には終了していない場合もある
562 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:15:24.97 ] 下手の考え休むに似たり
563 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:18:41.49 ] 具体的に反論してくれないとつまらん。 頭良いんだろ?お前ら
564 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:19:44.80 ] お前を楽しませてどうするbkk
565 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:23:41.72 ] つまんね
566 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:30:17.34 ] start hoge nanika matiawase hoge ってどうやればいい?
567 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 22:34:21.30 ] 頭悪いんで質問の意味が分からん
568 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 23:19:12.92 ] start hoge.bat nanika hoge.bat start /w hoge.exe matiawase hoge以下でやりたかったこと
569 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 23:20:08.67 ] わからんならスルーしろよw
570 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 23:29:55.10 ] それだと matiawase hoge以下でやりたかったこと が nanika のあとにならんだろ
571 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 23:31:59.90 ] echo ^G はどうやりぃい?
572 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 00:15:55.68 ] hoge|nanika matiawasego だな
573 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 00:20:12.51 ] >>569 誰に言ってるんだよ 俺は知らんぞ
574 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 07:54:23.11 ] 552の質問をしたものです。 別プロセスを起動しない限り、先の処理の完了をもって次の処理が始まる ということですね。何をもって完了というところが、疑問だったのですが、 基本的には、ファイル作成なら作成完了で制御情報が返ってきて、プロセス が完了と判断すると考えることにしました。 皆様レスありがとうございました。
575 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 21:26:17.89 ] 下手の考え休むに似たり
576 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:38:44.25 ] copy 巨大ファイル なんてやってると、copyから復帰してもガリガリやってるな
577 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 00:40:52.49 ] >>576 遅延書き込みのせいかも ttp://d.hatena.ne.jp/FukayaAruto/touch/20080228/xp_vista ttp://d.hatena.ne.jp/NyaRuRu/touch/20080306/p1
578 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 12:51:23.53 ] hou >for %i in ("<html></html>") do echo %~i > index.htm >type index.htm <html></html>
579 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 10:43:13.48 ] 親フォルダは削除せずに、サブフォルダだけを削除する方法ってありますか? 今は仕方がないので rd C:\aaa /s /q mkdir C:\aaa という風にしています。
580 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 11:17:08.69 ] for /d %d in (c:\aaa\*) do rd /s /q %d
581 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:33:05.60 ] cd C:\aaa rd . /s /q
582 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:55:32.97 ] cmdのカレントディレクトリって何故かロックされるんだよな Explorerからの削除を妨害されて何度泣いたことか
583 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 18:20:43.56 ] カレントディレクトリが勝手に削除されたら困るだろが?
584 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 19:24:16.57 ] >>580 ありがとうございます 空フォルダが残ってしまいませんか? >>581 ああ!たしかにこれで充分ですね!
585 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 19:30:49.87 ] cd, pushは必ず結果をチェックしないといつか泣きをみるぞ cd C:\aaa || goto error rd . /s /q ... :error pause goto :eof
586 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 20:23:36.15 ] んじゃ cd C:\aaa && rd . /s /q
587 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 02:42:34.41 ] 最後に goto :eof とか書くのは意味あるのか?
588 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 02:52:17.45 ] cd の後に rd . /s /q とか怖いぞ cd /d にしたほうが安全
589 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 03:40:34.17 ] バッチは途中でエラーがあっても突っ走るから怖いぞー
590 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 20:46:15.45 ] ビビッテンジャネーヨ!
591 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:13:52.68 ] >>587 その後に別のエラー処理を追加するケースとかを想定してんじゃね?
592 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:07:30.67 ] cdやpushdなんてせずにフルパス指定すればいいじゃん(いいじゃん)
593 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:08:54.73 ] どうしてもカレントディレクトリを変える必要があるのって どんなケース?
594 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:48:49.77 ] 更新日時の更新はどうやるんだっけ?
595 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:55:28.36 ] ロックしたいからカレントディレクトリを変えてるんだろ RD フルパス指定だと、それ自体が消えちゃう もちろん他の方法もあるだろうけど
596 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:16:36.08 ] type nul >>594
597 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:23:27.14 ] 作成日時の更新はどうやるんだっけ?
598 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:34:16.63 ] WSHで
599 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:42:12.15 ] >>596 試したら更新されなかった
600 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:28:12.37 ] cd /d "%~dp1" copy %1 +
601 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 17:08:20.85 ] 対策法を見つけはしたが、皆さんならどうするのか聞かせて。iは、コマンドラインを想定。 set i="a" /? "b c" if "%i%"==""a" /? "b c"" (echo YES)
602 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 18:10:01.03 ] 待ち時間作るときって WSHでやるかpingでやるかどっち使ってる?
603 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 18:30:05.89 ] sleep
604 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 18:58:53.54 ] timeout.exe 、2003以降なら標準で使えるし 『何かキーを推せば続行』がお手軽なので timeout.exe が使えないか使えない可能性がある、待ちの確認やスキップが不要、なら ping
605 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 19:01:34.24 ] こんな便利なものがあったのかthx
606 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 22:27:48.98 ] >>600 cd使うなってよ
607 名前:デフォルトの名無しさん [2012/02/24(金) 03:35:01.15 ] oshiete.goo.ne.jp/qa/3913616.html これをフルPath指定ではなく、前方一致(もしくは部分一致)にするには、どうしたらよい? www.tkssoft.com/cmd/cmd027.html と組み合わせれば良いのかなー…と思ってるんだけど。 Forをネスト??
608 名前:607 mailto:sage [2012/02/24(金) 03:47:13.89 ] ↓こんな感じにしてみるも、うまくいかず… set Folder1=c:\src set Folder2=c:\dst for /f %%z in (c:\copy\list.txt) do call :add1 %%z :exit pause exit /b :add1 set DATA01=%1 cd /d %Folder1% for /d /r %%a in ( * ) do copy "%%a\*%DATA01%*" "%Folder2%" exit /b pause
609 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 03:53:12.74 ] >>606 カレントディレクトリにファイルが有るんなら cd は不要だよ copy /b %1 + nul %1 これは更新されない copy %1 + nul %1 これは更新されるがファイルにゴミ(0x1A)が付く
610 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 10:19:43.13 ] >>601 @echo off set i="a" /? "b c" :: jは比較用 set j="b" /? "c" :: \"a\" /\? \"b c\" を作る set "t=%i%" call set "t=%%t:"=\"%%" call set "t=%%t:?=\?%%" :: YES1だけ出たらおk echo %i% | findstr /r /c:"%t%" >nul 2>nul && echo YES1 echo %j% | findstr /r /c:"%t%" >nul 2>nul && echo YES2 pause
611 名前:607 mailto:sage [2012/02/24(金) 16:13:35.83 ] 自己解決。 :: --------------------------------- set path set src=c:\copy\src set dst=c:\copy\dst :: --------------------------------- main script echo ------ Search and Copy Start ------ for /f %%z in (list.txt) do call :copy1 %%z :exit pause exit /b :copy1 set search1=%1 echo %search1% cd /d %src% for /R %%i in (%search1%*) do ( copy %%i %dst% ) exit /b pause :: --------------------------------- end
612 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 16:23:09.36 ] exit /b pause <==== これは何のお呪いですか? :: --------------------------------- end
613 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 17:16:06.15 ] お祝いです
614 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 18:18:43.22 ] 確かにexitの直後のpauseは何の意味がって感じではあるな
615 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 19:41:10.39 ] cd /d "%~2" とかで引数で受けるならサブルーチンでcdする意味あるだろうけど cd /d %src% だとcallする度にcdするのは効率悪いから mainのforの前でcdしてしまったほうがいいね
616 名前:607 mailto:sage [2012/02/25(土) 00:47:22.76 ] >>612-615 指摘さんくす いちおう修正版投下しとくね ※list.txtがバッチファイルと同じディレクトリにあるから、ちょっと面倒だった… :: --------------------------------- set path set src=C:\Users\xxxxx\Desktop\copy\src set dst=C:\Users\xxxxx\Desktop\copy\dst set list=list.txt :: --------------------------------- main script echo ------ Search and Copy Start ------ set listpath=%~dp0list.txt cd /d %src% for /f %%z in (%listpath%) do call :copy1 %%z :exit pause exit /b :copy1 set search1=%1 echo %search1% for /R %%i in (%search1%*) do ( copy %%i %dst% ) exit /b :: --------------------------------- end
617 名前:607 mailto:sage [2012/02/25(土) 00:48:07.87 ] set listいみねぇな…まぁいいや… いろいろありがとノ
618 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:10:40.37 ] おお、\" で、echo findstr を使うのかー!成る程。ありがとう。 恥を忍んで聞きますが、set "a=b" や、call set が不要に思えます。想定したものがあれば教えて下さい。 対策したのも、あげておきます。spaceだけを置き換えました。他のtabとかも置き換えると、行数が増えます。 set i="a" /? "b c" set Jyouken="a" /? "b c" set Jyouken=%i%==%Jyouken% set Jyouken=%Jyouken: =_SPACE_% if %Jyouken% echo YES!
619 名前:601 mailto:sage [2012/02/25(土) 11:39:22.21 ] 618 に 名前:601 とか >>610 つけるの忘れました。 618 がちょっと、舌足らずなので追加します。 >>610 これだけでも動くので、不要に思えました。 set i="a" /? "b c" set Jyouken="a" /? "b c" set Jyouken=%Jyouken:"=\"% echo %i% | findstr /r /c:"%Jyouken%" >nul 2>nul && echo YES1
620 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:37:13.64 ] 拡張子によって処理を分岐させるにはどう書けばいいですか?
621 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:47:11.60 ] 質問者が手を抜いてるのに それに答えるアホが現れるかどうか
622 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:52:48.57 ] 拡張子を判定してgotoすればいいです。
623 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:55:31.07 ] >>620 どこにその文字列が格納されているかによるけどサンプルをいくつか if "%~x1"==".bat" ... goto label%~x1 ... :label.bat for %%i in (foo.bat) do call :label%%~x1
624 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 16:32:51.65 ] すみませんお騒がせしました 昨日調べて作ってみたのが動かなかったんですが なぜかさっきもう一回試したら動きました if "%~x1"==".rar" goto RAR if "%~x1"==".7z" goto 7Z shift :RAR rar x -y -ep1 "%~1" "%~dp1" goto END shift :7Z 7z x -y "%~1" -o"%~dpn1" goto END
625 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 16:38:37.73 ] linuxのwgetみたいなのってbatだけでは無理ですか?
626 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 16:47:10.24 ] ってよく考えたら2つの比較なら if "%~x1"==".rar" (rar" x -y -ep1 "%~1" "%~dp1") else (7z x -y "%~1" -o"%~dpn1") でよかったですね
627 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 17:10:54.72 ] >>625 1.Powershellでごり押し 2.bat|cmdとwshでハイブリットごり押し スクリプトのみはちょっときついかもね
628 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 17:27:47.53 ] Powershellというのでやってみます
629 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:34:30.84 ] >>609 > copy /b %1 + nul %1 > これは更新されない 更新されるが?
630 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 21:31:05.12 ] >>625 opensourcepack.blogspot.com/2010/05/wget-112-for-windows.html こういうWindowsバイナリを使わずにってこと?
631 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 08:06:00.39 ] それ使っていいなら、こんなスレで質問しないと思うが… バッチ / スクリプトのみではちょっと無理でしょ。 MSXML2.ServerXMLHTTP + スクリプトあたりが無難だと思うが。
632 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:33:59.21 ] あー聞き方が曖昧だった。 Windowsバイナリ使わずに技術的に可能ならやってみる、ってこと? を聞いてみたかっただけ。どこまでやってみるのか分からないけど 再帰、階層、ミラー、etc,...、とか考えるだけでしんどそうなのに挑むのかと。
633 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:55:11.72 ] 本当に本人かどうかはわからんけど、>>628 で Powershell でやってみると言ってるよ。 > 再帰、階層 むしろここら辺はスクリプトでも扱いやすいと思うけど。
634 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 06:27:04.19 ] バッチに送った複数のファイルやフォルダのパスをソートしたいのですが @(for %%a in (%*) do @echo "%%~fa")|sort ですと "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\4フォルダ" "C:\TMP\abc\5フォルダ" のようになってしまいます。これをエクスプローラーの並び順のように "C:\TMP\abc\4フォルダ" "C:\TMP\abc\5フォルダ" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\3ファイル.txt" としたいのですがどう書けばいいですか
635 名前:デフォルトの名無しさん [2012/02/29(水) 10:40:52.94 ] >>629 俺のは更新されない なんでだろうな
636 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 10:46:38.26 ] vbs呼び出して頑張って自分でソートする
637 名前:デフォルトの名無しさん [2012/02/29(水) 11:56:21.97 ] フォルダに他の属性が無いなら @(@for %%a in (%*) do @if "%%~aa" == "d--------" @echo "%%~fa") | sort @(@for %%a in (%*) do @if not "%%~aa" == "d--------" @echo "%%~fa") | sort
638 名前:デフォルトの名無しさん [2012/02/29(水) 12:02:28.55 ] forとechoの前の@は不要だな
639 名前:ホイミン mailto:sage [2012/02/29(水) 14:54:02.18 ] R:\Ue\Shita>dir /b /s .. ファイルが次の様にあります。 R:\Ue\Shita 上フォルダの中に下フォルダが有り、 R:\Ue\Ue1.txt それぞれ、ファイルが有ります。 R:\Ue\Shita\Shita1.txt このうそつきを実行します。\じゃないところに注意。 R:\Ue\Shita>for %i in (../*) do @echo "%~fi" "R:\Ue\Shita\Ue1.txt" 適当にパスを付けた、有りもしないファイルが表示されます。 >>634 僕も考えてみたよ。637も同じだけど、複数のディレクトリーにまたがる場合は、分ける必要が有るよ。 for /f "delims=" %%a in ('(dir /ad /b /on %* ^& dir /a-d /b /on %* ^) 2^>nul') do echo;"%%~fa"
640 名前:ホイミン mailto:sage [2012/02/29(水) 15:06:06.53 ] でも dir /b /og の方が便利そうだね。 ごめんよ、ややこしくして。
641 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:59:08.48 ] ちょっと質問なんですが wget (url) -O ffd.txt type ffd.txt|findstr xhmikosr.exe 1> ffd1.txt for /f "tokens=3-4 delims=_" %%a in ('findstr "xhmikosr.exe" ffd1.txt') do set ver=%%a_%%b wget -N -c (url) innounp.exe -x "ffdshow_%ver%_xhmikosr.exe" move {app}\*.dll C:\Program Files\ffdshow で最後のmoveのとこでコマンド構文が間違ってますといわれるんですが 何が間違ってるんでしょう
642 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 16:00:18.81 ] こうだろうな。 move {app}\*.dll "C:\Program Files\ffdshow"
643 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 16:47:28.73 ] >>642 またやってしまった・・・ ダブルクォーテーションですね ありがとうございました
644 名前:デフォルトの名無しさん [2012/02/29(水) 20:21:18.27 ] >>640 おまえ、全然試してないだろ そのバッチ作ってD&Dしてみろボケ
645 名前:ホイミン mailto:sage [2012/03/01(木) 08:22:30.49 ] >>644 コマンドプロンプトで test.bat .\* 等と、色々やって試したんだけどね、足りなかったね。 dir がフォルダーを展開してしまうのには、書き込んでから気付いたんだけど、くどいので訂正しなかたんだよ。 使えない書き込みだから、みんな無視するだろうと思っていたよ。 一々反応してくれるのはありがたいけど、君は社会性が無いようだね。
646 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 08:25:30.43 ] @echo 便所の落書きに(ry&pause
647 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 11:51:26.33 ] 便所の落書きだか知らんが どう試したんだよw 全然ダメだろw
648 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 13:03:21.98 ] @echo 便所の落書きに^(ry&pause
649 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 15:15:45.41 ] dirの/oは引数をソートしないよ
650 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 15:54:15.80 ] 複数のファイルをバッチにD&Dしたら 引数の順番って、どう決まるの? echo %* マウスカーソルの位置のファイルが一番目?
651 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:29:17.92 ] そうよ 2番目以降は並び順、ラップラウンド
652 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:30:26.30 ] ついでに言うと、1番目ファイルでカレントディレクトリ
653 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:10:40.16 ] バッチにD&Dしたら、カレントディレクトリは %HOMEDRIVE%%HOMEPATH%が既定値なのでは?
654 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:25:46.89 ] なのではって?そうなるのか?OSは?
655 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:30:35.02 ] すまん。俺のPCは古い化石なんで、Win2000 他のは違うんかも
656 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:04:32.12 ] カレントディレクトリはバッチに落とした場合とバッチのショートカットに 落とした場合で異なる。
657 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:38:45.35 ] ショートカットの場合はプロパティで確認できる。 D&Dしたファイルとは無関係なようです
658 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:40:18.10 ] ショートカットで設定してなければバッチと同じ 当たり前だろ
659 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:56:50.35 ] だから何? おれはショートカットの話は別にどうでもいいんだが
660 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:15:31.22 ] カレントディレクトリはバッチに落とした場合とVBSに 落とした場合で異なる。
661 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:16:24.16 ] だから何? おれはVBSの話は別にどうでもいいんだが
662 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:20:45.18 ] 他人のレスの真似するなよ。
663 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:36:25.83 ] なんでvbsは違うんだ?
664 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:39:43.76 ] だから何? おれはVBSの話は別にどうでもいいんだが
665 名前:デフォルトの名無しさん mailto:saga [2012/03/02(金) 02:53:26.53 ] >>659 お前バカだろ。起動時のカレントディレクトリはあてにしてはいけないという事だ。 つまり、>>652 の情報は何の意味もない。
666 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:54:30.97 ] なんでスレタイ読めないの? おれはVBSの話は別にどうでもいいんだが
667 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 03:39:03.93 ] VBSのドロップハンドラがへぼいんだろ
668 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 08:52:29.56 ] >>665 お前バカだろ。当たり前だろ
669 名前:ホイミン1 mailto:sage [2012/03/02(金) 11:52:24.56 ] >>649 おお、そうなんだ勉強になったなあ。確認したんだけどなあ。 でもそんなにも僕はうっかり者だったのかと、もう一度確認したけど、ソートされているみたいだよ。 なにか勘違いしているかな? dir が使えなかったのは、変わらないけど。 R:\Ue\Shita>dir /b /on fortest.bat "Shit a2.txt" dirfile.bat dirfile.bat fortest.bat Shit a2.txt Drug and Drop は absolute で渡されるからいいんだけど、relative path を使った short cut の上に D'nD する際に問題になって、調べた事があるよ。 Drug and Drop は vista 以降で変更されているようだよ。 current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、vista 以降では %~dp1 らしいね。 参考 www.hirax.net/diaryweb/2009/06/04.html
670 名前:ホイミン2 mailto:sage [2012/03/02(金) 12:05:26.19 ] まとめてみたよ。XP では確認した(けど、でもばっちり確認したわけじゃあないから、低レベルな事を言わないで訂正してくれ)よ。 Current Directory in the various cases of launching ______________________ , 2000, _ XP,VISTA,SEVEN DrugAndDrop___________ , HOME, HOME, _ %1, _ %1 DoubleClick___________ ,Lnchd,Lnchd,Lnchd,Lnchd DrugAndDrop On ShortCut, HOME, HOME, _ %1, _ %1 DoubleClick Of ShortCut,Lnchd,Lnchd,Lnchd,Lnchd -Anotation -ShortCut is in case of the blank of "Start In". If not blanked, current directry follows it. - HOME: %HOMEDRIVE%%HOMEPATH% - _ %1: Directory of the 1st argument -Lnchd: Launched directory (in case of short cut, directory of short cut) drug and drop の際の問題といえば、全角スペース(他にも有)を含む "file name.txt" などのファイルを Drug and Drop するとクオートされないよね。他にも知ってる問題があったら、教えて。
671 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:15:09.54 ] コマンドとか以前に × Drug ○ Drag
672 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:16:55.25 ] >current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、 explorer processのcurrent directoryでは?
673 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:33:17.13 ] moveでフォルダ移動のときフォルダ名指定に*使えないのは嫌がらせでしょうか
674 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:06:48.04 ] 仕様です
675 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:56:48.46 ] >>669 俺は >>649 じゃないが、dir の /og は引数をソートしないようだ。 他は知らない。 というか間違いを書き込んで放置している奴が、 他人に社会性云々などと言える立場かよ。 レベルが低くて悪かったね。 便所の書き込みでした。
676 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 01:24:11.63 ] ドラッグ&ドロップ 前提のバッチファイルならバッチの冒頭とかに cd /d %~dp0 や cd /d %~dp1 とかを状況次第で必要に応じて書き加えていそうなもんだが。 OS による挙動の違いで問題、とかいってる前にしないのかね。
677 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 01:49:25.89 ] >>669 dir /b /on test\2\2.txt test\1\1.txt 2.txt 1.txt
678 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 03:30:18.27 ] どうでもいいっす
679 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 05:21:31.12 ] バージョンの違いだろwあほども
680 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 09:01:15.54 ] 低レベルな事を言わないでくれってさ
681 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 10:50:21.10 ] >>676 バッチファイルでcd前提の処理は UNCパスで実行された場合、想定外の動作になる バッチファイルは相対ダメ ゼッタイ絶対パス指定すべし
682 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 11:08:26.87 ] どうでもいいっす
683 名前:634 mailto:sage [2012/03/03(土) 12:11:55.59 ] >>637 ありがとうございます 教えて頂いた方法でやりたいことが出来ました 好奇心から、異なるディレクトリのものをまとめて送れるランチャーやファイルのリストなどから 同様のことが出来ないものかと機能拡張を試みて試行錯誤していてお礼が遅くなりました 申し訳ございません 改めまして再度質問です。よいお知恵があればご助言お願いします arg.tmpの内容 list.txt 表示したい結果 "C:\TMP\aaa.txt" "C:\TMP\abc" "C:\TMP\abc" "C:\TMP\abc" "C:\TMP\aaa.txt" "C:\TMP\aaa.txt" "C:\TMP\abc.txt" "C:\TMP\abc.txt" "C:\TMP\abc.txt" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\4フォルダ" "C:\TMP\abd.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\5フォルダ" "C:\TMP\bbb.txt" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\4フォルダ" "C:\TMP\abc\4フォルダ" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\5フォルダ" "C:\TMP\abc\5フォルダ" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abd.txt" "C:\TMP\abd.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abd\123.txt" "C:\TMP\abd\efg" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abd\456.txt" "C:\TMP\abd\123.txt" "C:\TMP\abd\efg" "C:\TMP\abd\efg" "C:\TMP\abd\456.txt" "C:\TMP\abd\123.txt" "C:\TMP\bbb.txt" "C:\TMP\bbb.txt" "C:\TMP\abd\456.txt" arg.tmpのソートの方法がまずいということはわかるのですがどうすればいいのやら。。 以下に書いたバッチを貼ります。少し長いですがご容赦願います
684 名前:634 mailto:sage [2012/03/03(土) 12:12:59.66 ] @echo off set argpath= set arglist= call >"%~dp0list.txt" @(for %%a in (%*) do @echo "%%~fa")|sort /o "%~dp0arg.tmp" for /f "usebackq" %%b in ("%~dp0arg.tmp") do call :sub1 %%b call :sub2 rem del "%~dp0arg.tmp" pause&exit /b :sub1 if not defined argpath ( set argpath="%~dp1" set arglist=%1 exit /b ) if %argpath%=="%~dp1" ( set arglist=%arglist% %1 exit /b ) call :sub2 set argpath="%~dp1" set arglist=%1 exit /b
685 名前:634 mailto:sage [2012/03/03(土) 12:13:15.16 ] :sub2 set arglistfile= for %%c in (%arglist%) do call :sub3 "%%~ac" "%%~fc" if not defined arglistfile exit /b for %%d in (%arglistfile%) do >>"%~dp0list.txt" echo "%%~fd" set arglist= exit /b :sub3 set attr=%1 set attr=%attr:~1,1% if "%attr%"=="d" ( >>"%~dp0list.txt" echo "%~2" ) else ( set arglistfile=%arglistfile% "%~2" ) set attr= exit /b
686 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 12:38:57.51 ] 絡んだおれがバカだった 絶対パスで好きにしてくれ
687 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 13:57:54.46 ] てかいまどきバッチファイルなんか書いてる奴らが総じて底辺。
688 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 14:00:13.55 ] >>679 テキトーなことぬかすなボケ
689 名前:634 mailto:sage [2012/03/03(土) 15:20:00.58 ] arg.tmpの内容を "%%~dpa" "%%~fa" としてソートし :sub1 の%1を%2とすることで解決出来ました こっちのほうが効率がいいとかありましたら指摘お願いします。以下、修正したバッチです @echo off set argpath= set arglist= set tmpfile="%~dp0arg.tmp" set output="%~dp0list.txt" call >%output% @(for %%a in (%*) do @echo "%%~dpa" "%%~fa")|sort /o %tmpfile% for /f "usebackq delims=" %%b in (%tmpfile%) do call :sub1 %%b call :sub2 del %tmpfile% exit /b :sub1 if not defined argpath ( goto :jump ) if %argpath%=="%~dp2" ( set arglist=%arglist% %2 exit /b ) call :sub2 :jump set argpath="%~dp2" set arglist=%2 exit /b
690 名前:634 mailto:sage [2012/03/03(土) 15:20:35.76 ] :sub2 set arglistfile= for %%c in (%arglist%) do call :sub3 "%%~ac" "%%~fc" if not defined arglistfile exit /b for %%d in (%arglistfile%) do >>%output% echo "%%~fd" set arglist= exit /b :sub3 set attr=%1 set attr=%attr:~1,1% if "%attr%"=="d" ( >>%output% echo "%~2" ) else ( set arglistfile=%arglistfile% "%~2" ) set attr= exit /b
691 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 18:01:42.04 ] うざ
692 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 19:48:23.70 ] %~dpは早退なのかよ
693 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 20:02:34.08 ] 遅刻なのかよ
694 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 20:06:23.02 ] dir /b /on test\2\2.txt test\1\1.txt 1.txt 2.txt
695 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:11:40.93 ] dir /b /on z:\z.txt y:\y.txt z.txt y.txt
696 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:39:04.11 ] dir /b /on z:\* y:\* z.txt y.txt
697 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 22:59:19.02 ] dir /b /on test\2\2.txt test\1\1.txt |sort 1.txt 2.txt
698 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:33:17.02 ] >dir /b /on a.txt b.txt a.txt b.txt >dir /b /o-n a.txt b.txt b.txt a.txt
699 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:34:32.16 ] >>698 確かに引数をソートしてるな
700 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:37:41.92 ] >dir /b /on a b a.txt b.txt a.txt b.txt >dir /b /o-n a b b.txt a.txt b.txt a.txt
701 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:38:36.31 ] ディレクトリ単位にソートってことだろ?
702 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 10:23:07.77 ] >>689 俺もバッチ作ってみた @echo off & cd /d "%~dp0" del tmp1 tmp2 list.txt > nul 2>&1 (for %%i in (%*) do @echo "%%~dpi","%%~fi")| sort /o tmp1 set /a a=10000 & set b="" for /f "delims=, tokens=1,2" %%i in (tmp1) do ( set c=%%i& set d=%%~aj& set e=%%j& call :x) for /f "delims=, tokens=2" %%i in ('sort tmp2') do echo %%i>> list.txt del tmp1 tmp2 & goto :eof :x if not %b% == %c% set b=%c%& set /a a+=1 if %d:~0,1% == d (set /a f=0) else set /a f=1 echo %a%%f%,%e:~0,-1%>> tmp2
703 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 15:41:04.60 ] うざ
704 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 16:17:47.60 ] >>689-690 はファイル名に%文字があると誤動作する
705 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:03:47.92 ] どの行?
706 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:07:01.85 ] あの行
707 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:09:41.44 ] たぶんcallの引数の%が化ける
708 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:27:26.60 ] 引数渡しやめて環境変数渡しにすればよい
709 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 23:36:02.16 ] >>704 ファイル名の%ってどうやって環境変数記号でないと判断させればいいの? ファイル名内の%の位置を調べて存在したら ^でエスケープするしかない?
710 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 23:38:42.64 ] %のエスケープは%%だよ
711 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:00:12.25 ] なんでお前らいまだにバッチファイル書いてるの?
712 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:12:58.43 ] バッチファイルは基本だよ
713 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:36:58.96 ] >>709 %%
714 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:42:23.44 ] for変数と混同するんじゃね
715 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 15:40:43.79 ] このバッチに名前が%文字を含むファイルをD&Dしてごらん 違いが分かるよ @echo off set a="%~nx1" call :x %a% call :x %%a%% pause goto :eof :x echo %1
716 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 23:46:11.91 ] setlocal enabledelayedexpansion set a="%~nx1" set a=!a:%%=%%%%! echo %a% call :x %a% call :x %%a%% pause exit :x echo %1
717 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 23:48:22.26 ] @echo off for %%i in (%*) do (set a=%%i& call :x %%a%%) pause & goto :eof :x echo %1
718 名前:デフォルトの名無しさん [2012/03/05(月) 23:49:44.92 ] ^%
719 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 00:07:24.36 ] @echo off for %%i in (%*) do set a=%%i& call :x pause & goto :eof :x echo %a%
720 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 00:10:12.82 ] いつまでやってんだよカス
721 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 00:14:24.77 ] サンキューカッス
722 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 00:27:17.77 ] もっと面白いネタは無いのか
723 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 00:42:25.31 ] ない
724 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 01:06:38.12 ] とっく枯渇してるので、蒸し返しばっか
725 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 01:13:44.33 ] でもスレを覗くんですね
726 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 01:28:48.52 ] でもってなにがでもだ?
727 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 01:34:13.80 ] 新しい知見を得るために覗いていたのか?
728 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 16:34:55.54 ] よほど無知なんだろ
729 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 17:10:05.33 ] スレ立てるまでもない質問スレで教えていただいたUNIXコマンドがあります cat `find あるディレクトリ -name test.txt` > 一つのファイル これはあるディレクトリ以下の全てのサブディレクトリを含めて、test.txtというファイルの内容を一つのファイルにまとめるコマンドです Windowsでも同じようにやりたいのですが copy ファイル1.txt+ファイル2.txt・・・・ marge.txt といった感じに+でいちいち書いていくのが面倒なのでよい方法内でしょうか?
730 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 17:55:25.05 ] for /r ディレクトリ %i in (*) do type %i>>test.txt
731 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 18:14:10.14 ] まんまじゃねーか
732 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 18:18:00.13 ] え?なんかやる事とやってる事が違うくね?
733 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 18:30:45.73 ] こまけーことはいいんだよ!
734 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 22:36:25.51 ] >>730 試してみたんですが > の使い方が誤ってます ってエラーがでます
735 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 22:53:00.85 ] 試す前に、なにやってるかくらい読めよ
736 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:03:27.10 ] すいませんコマンドの部分だけ変えてやったら出来たんですが全てのファイルを一つにコピーできません for /R %%a in (test.txt) do copy /B %%a+test.txt test.txt
737 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:33:28.10 ] 変えるなよバカ
738 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:40:45.65 ] 試す前に、for/?くらい読めよ
739 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:42:24.85 ] だったらまともに動くものを書いてくださいよ
740 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:43:45.37 ] 応用のできない奴に何を教えても無駄
741 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:52:11.61 ] それってあなたが書けないだけですよね?
742 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:54:03.40 ] あぶく銭は身に付かない
743 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:56:28.18 ] >>741 その手には乗らないよ
744 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 23:57:57.96 ] じゃあ邪魔しないでくださいよ
745 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:00:54.15 ] 邪魔なんかしてないよw猫に小判なだけだろ
746 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:04:26.64 ] 別にバッチファイルの勉強しているわけじゃないのに くだらないクイズやナゾナゾなんて必要が無いんですよ 質問に答えられないなら邪魔でしかありません
747 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:08:04.61 ] くだらない質問に誰が答えるって?
748 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:09:55.18 ] いやにのびてると思ったら……
749 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:15:04.29 ] 別にバッチファイルの勉強しているわけじゃないので くだらない質問なんて答える必要が無いんですよ
750 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:16:51.61 ] バッチも使えないならUNIX使ってりゃいいじゃん
751 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:19:23.33 ] いや俺の認識だとむしろバッチだから使えないだと思う 普通に(無意味に)難しいよ、バッチは
752 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:20:15.83 ] 答えられない人はせめて邪魔しないでもらえますか
753 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:22:00.94 ] 俺、答えられるけど答える気ないだけだから邪魔してもいいよね?
754 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 00:24:14.98 ] それは答えられないと等しいですよね 答えられるのなら答えてるわけですから スレの無駄なんて無能さらすのはツイッターでやってください
755 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:07:56.12 ] marge.txt くすっ
756 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:13:23.19 ] >>729 には教えるだけ無駄 できないと等しいですよね できるならやってるわけですから スレの無駄なんて無能さらすのはツイッターでやってください
757 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:22:21.14 ] 便りの無いのは良い便り
758 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:29:04.83 ] 俺っちは>>730 で動いたが、感謝の念もない無礼な輩が多いな
759 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:42:48.04 ] 動く、という事と、 期待した結果は別なんじゃないかな。
760 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:43:55.08 ] エラーが出たら直せばいいと思うよ不通 それしないで逆切れするなんて以上
761 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:48:04.61 ] 期待した結果になるように直せばいいと思うよ不通 それしないで逆切れするなんて以上
762 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 01:49:14.40 ] 逆に、MS-DOSしかしらない人に UNIXのシェルで作れって言ったら似たような事になると思うよ。
763 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 02:45:02.24 ] ならんと思うよ。 man findとかちゃんと調べるもん
764 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 02:53:36.94 ] 馬鹿は何やっても駄目だから諦めた方がいいよ
765 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 03:03:25.28 ] クレクレ君に答えを与えないでくださいw
766 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 03:06:41.93 ] やるんじゃなかったなw
767 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 03:42:53.07 ] >>729 ,734,736,739,741,744,746,752,754 幼稚園からやり直せ
768 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 11:23:59.92 ] ファイルの結合はcopyだろ 誰がtypeでDOSに文字をかけと言った
769 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 16:33:17.37 ] だってcatじゃん
770 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 16:35:26.05 ] 便所の書き込みに何を言ってる
771 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 16:38:23.60 ] 自演ならもう少し面白くやってくれくれくん
772 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 16:45:22.53 ] だったらDOSじゃなくてDOGだろ?
773 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 18:08:10.27 ] >>755 中学英語からやり直せw
774 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 18:23:21.56 ] for /r ディレクトリ %i in (test.txt) do type %i>>marge.txt
775 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 18:31:08.06 ] くそ!どいつもこいつもバカにしやがって!!!!!!!!!
776 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 18:57:22.39 ] 真夜中に2ちゃんでレスの応酬ってw しかもバッチスレw 出遅れたわw
777 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 19:06:17.90 ] 遅延展開やねw
778 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 19:38:22.80 ] シフトワーカーはバッチがお好き
779 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 20:48:16.79 ] こういうのはどうかけますか? Cドライブに存在する全てのgitフォルダが何個存在するかカウント
780 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 21:08:57.30 ] エクスプローラで検索したほうが早くないか
781 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 21:44:47.11 ] 単純に検索するとゴミ箱の中まで漁る
782 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 07:03:14.49 ] cd /d c:\ dir /s /b /ad .git | find /v /c ""
783 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 07:36:08.58 ] set n=0 for /r c:\ %%i in (.) do if "%%~nxi"=="git" set /a n+=1 echo %n%個
784 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 07:47:05.53 ] >>782 の訂正版 cd /d c:\ dir /s /b /ad git | find /v /c ""
785 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 10:39:13.31 ] >>783 ifの前に@を付けろ >>781 for /r はゴミ箱の中まで検索してるな 名前が偶然に一致するなんて、まず無いだろうが
786 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 10:51:38.35 ] >>783 nxiってなに?
787 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 11:19:32.20 ] >>786 n x i だけじゃないから、自分で調べろ for /?
788 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 07:11:46.74 ] >>782 の訂正版 dir /s /b /ad c:\git | find /v /c "" これでワンライナーOKだった
789 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:31:33.67 ] >>784 ,>>788 それ、c:\git というフォルダがあったら その中身しか検索しないよ
790 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:28:30.28 ] ここで出てきたテクニックをwikiにまとめていただけませんか?
791 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:32:24.24 ] いただけませんか?とか書きこんでる間にwikihouseかどっか借りてコピペしてけばいいだろ
792 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:55:03.16 ] えええ俺がwiki借りるの面倒くさいです
793 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:50:20.55 ] dir abc* ってやると先頭がabcから始まるファイルがヒットすれば表示されますが ファイルの途中にabcが存在するようなファイルもヒットさせる方法を伝授してください xxxabcxxx.txt abc.xxx.txt xxx.abc.txt とか 拡張子が無いファイルとか拡張子にabcが来ることは無いと考えていただいて結構です
794 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 13:04:14.56 ] dir *abc*
795 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:40:42.38 ] うそこくでねー
796 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:49:29.44 ] ほんとだ
797 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:05:44.51 ] 以前はウソだった。最近のcmd.exeは可能。いつからウソじゃなくなったか知らない。
798 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:14:51.52 ] 少なくともxpは本当。
799 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:19:08.35 ] 今試したら、98SEでも行けた。 大昔(DOS2とかCP/Mとかの時代)はNGだったのは確かだが、 いつOKになったんだろ?
800 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:29:00.75 ] *abc* ぐらい試してから質問しろよ
801 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:32:20.65 ] 試したら質問しないだろw
802 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:38:06.29 ] 16bit DOSの場合は dir *abc*.*
803 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 17:55:31.57 ] バッチファイルでも「最新の情報に更新」(F5キー)を使えますか? デスクトップのファイルを定期的に別のフォルダに移すバッチファイルを書いたんですが、 ファイルが消えても更新するまでアイコンが残ってしまって・・・
804 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 17:57:57.63 ] ahk呼んでsendcontrolでもしたら
805 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 17:58:23.49 ] 山口美江さんが亡くなった・・・ おまえらが急に老けたとか言うから
806 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 17:58:43.96 ] ごめん誤爆
807 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 18:03:59.92 ] >>803 ふつー残らんよ でもどうしてっつーなら createobject("shell.application").windows().item().refreah
808 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 18:13:03.08 ] バッチでクリップボードの文字列を引数として渡すことはできますか?
809 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 18:23:21.58 ] for /f %%i in ('〜') do echo %%i ってこと? '〜'に cscript.exe 〜〜 mshta.exe 〜〜 powershell.exe 〜〜 ってすりゃいい どれでも得意なのでどぞ
810 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 18:36:11.79 ] C:\2012\以下のサブディレクトリも含む全てのファイルの更新履歴が 2012年2月1日0時0分0秒以降になっているものをリストアップするのはbatでできますか?
811 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 18:38:05.77 ] forfiles/?
812 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 18:43:25.00 ] Aフォルダに入っているファイルを Bフォルダにバックアップしたいと考えてます そこでBフォルダには入っていてAフォルダにないファイルを一覧にしたいのですが どうやるのでしょうか?
813 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 18:51:10.75 ] for + if または dir + findstr
814 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:43:18.94 ] >>804 ありがとうございます ごめんなさい、難しくてよくわかりません;; >>807 ありがとうございます、教えてもらった方法でできました! 'createobject'は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出るのですが、これはこれでいいんでしょうか? WIN7を使っています。
815 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:37:42.34 ] 正常
816 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:41:47.70 ] > refreah
817 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 21:39:36.03 ] > refresh.vbs
818 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 22:07:54.59 ] CSVファイルを読み込んで、ちょっとした処理をしたかったのだけど、 読み込む対象のファイル名に半角スペースが入っていた場合どうすればいい? ここを参考にしたんだけど、 ttp://vaindespair.blogspot.com/2009/04/blog-post_09.html 半角スペース入りのファイル名だとうまくいかないのです。 ・・・と書いてて閃いたw FOR /F "tokens=1,3 delims=," %%a IN ( 'type "hannkaku space irino file.csv"' ) DO (
819 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 22:22:23.19 ] FOR /F "usebackq tokens=1,3 delims=," %%a IN ( "hannkaku space irino file.csv" ) DO ( だよーん
820 名前:818 mailto:sage [2012/03/09(金) 22:29:58.17 ] ありがとう!
821 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 22:58:55.52 ] forでcsvって難しくないか? "abc,def","pqr","xyz" ってなのがあったらモー駄目だろ?
822 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 03:16:58.48 ] >>812 set a="c:\tmp\Aフォルダ" set b="c:\tmp\Bフォルダ" set list="c:\tmp\B-A_list.txt" call >%list% for /f "usebackq delims=" %%b in (`dir /a-d /b %b%`) do @if not exist %a:~0,-1%\%%b" >>%list% echo %b:~0,-1%\%%b"
823 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 03:26:27.10 ] set a="c:\tmp\Aフォルダ" set list="c:\tmp\B-A_list.txt" call >%list% cd /d "c:\tmp\Bフォルダ" for /f "delims=" %%b in ('dir /a-d /b') do @if not exist %a:~0,-1%\%%b" >>%list% echo "%%~fb"
824 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 04:11:12.36 ] findstrは?
825 名前: 忍法帖【Lv=14,xxxPT】 mailto:sage [2012/03/10(土) 20:05:58.09 ] 質問です。よろしくお願いします。 バッチファイル(あひゃ.bat)を優先度低で実行させるために start /b /belownormal あひゃ.bat と書かれているcmdファイルを作成し、それを実行させているのですが、 あひゃ.batが終了してもDos窓が閉じません。 終了後に自動で閉じるようにするにはどうしたら良いのでしょうか?
826 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 20:10:47.82 ] start /b /belownormal cmd /c あひゃ.bat
827 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 20:31:41.10 ] あひゃ.bat に echo %cmdcmdline% を入れてみりゃ理由がわかる
828 名前:825 忍法帖【Lv=14,xxxPT】 mailto:sage [2012/03/10(土) 21:12:23.08 ] 早速のレス、感謝します。 >>826 サンの方法で見事にDos窓が自動で閉じました。 >>827 サンのとおりに実行したらなんとなく解ったような気がします。 cmd /k と cmd /c の違いですね。help startとかhelp cmdを読んでないのがバレバレ(;´∀`) なんとなく思い込みでstartコマンドの/bオプション(ウインドウを作成しない)を付けたのですが、 実はコレ無くても良かったみたいです。(じ、実は/bオプションの意味もよく解っていないっ!(∀`*ゞ) とにかく期待通りに動いたので満足です。 お二方ともありかとうございました。
829 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 21:13:49.52 ] batを起動しっぱなしにして タスクマネージャのタスク名に指定した名前(例えばメモ帳を立ち上げて「無題 - メモ帳」など)が出たら ログに書き込むというのはbatで出来ますか?
830 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 21:18:31.36 ] tasklist
831 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 22:28:53.73 ] wmic process get name
832 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:15:58.30 ] >>808 WSHと組み合わせないと無理だったはず
833 名前:818 mailto:sage [2012/03/11(日) 23:14:37.36 ] >>821 そこまで本気なことをするには荷が重いものだと理解してます。 (できるかもしれないけど、数ヵ月or数年後の自分に理解ができない、と思うので)
834 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 00:12:38.31 ] >>808 clip.exeか類似ソフト使えば出来る
835 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 04:15:25.41 ] 内蔵のclip.exeじゃだめだけどな
836 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 06:41:41.28 ] スレタイ(ry
837 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 16:34:50.59 ] >>832 WSHったってIE使ったりして大変だろ? >>809 お勧めは?
838 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 17:24:09.19 ] >>837 > WSHったってIE使ったりして大変だろ? ならば>>809 のは全部同類だから「大変」だ
839 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 18:01:20.27 ] そうなのか? 簡単に書けるものってないのか?
840 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 18:50:35.07 ] powershellなら簡単よ
841 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 23:45:56.93 ] for /f "usebackq tokens=1,* delims=[]" %i in (`mshta "javascript:close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(clipboardData.getData('Text')));"^|find /v /n ""`) do @set "c[%i]=%j" これでどうだろう
842 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 02:24:40.37 ] まあまあやね
843 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 02:31:28.01 ] 及第点やね powershell版もできたら満点や