【.cmd】 バッチファイルスクリプト %8 【.bat】
四十年勤め上げた會社を退職し早二十年、何やら張り合いの無い日々を送る内、大學生の孫に「退屈しのぎに遣って見たまへ」と勸められた弐チヤンネル。 當初は「こんな電腦掲示板、何たる幼稚加減」と莫迦にしてゐたものの、遣つて見ると存外に面白ひ。 華やかな色彩の髪と目を持つうら若き乙女に「ゆとり乙」と何度と無く罵られるにつけ、食ふや食はずやで慌しく過ぎ去つた學生時代が自ずと思ひ返され、「戰爭さえ無ければ、小生もこのやうな青春が送れたやも知れぬ」と獨りごちることも屡々。 すつかり虜となつた今では、孫の部屋から白銀色の電腦計算機をせしめては書齋に篭もり存分に「祭り」を堪能する毎日を送つている。 同年代の友人達が癡呆や重い病に惱まされるなか、老いて尚矍鑠としてオフ會に向かえるのも、ひとえに弐チヤンネルのおかげかと思えば、再三に渡る「半年ROMつてろ」の罵り文句も、何やら「まだまだ死ぬには早いよ」と言われているようで愉快極まりない。 ひとつ間違えれば自らが乗り込んでいた機體と同じ名前を持つコテハンに出會える日を樂しみにしつつ、今日もデスプレヱに向かう。 それでは、弐ゲツト。
>>1 乙であります
forでのリネームについての質問なんですが、例えば
フォルダのみ先頭に()を付ける場合
for %%A in (*) do (
ren "%%A" "()""%%A"
)
と考えたんですが、bat自身だけが()追加でフォルダは何も変わりませんでした。
ren "%%~A" "()""%%~nA"
かと思ったんですが、これは「ファイル」名であって「フォルダ」名じゃないんですかね…
上記の場合はどうすればよいのでしょうか?
for /d %%a in (*) do (ren "%%a" "() %%a")
>>4 フォルダ=ディレクトリ名だったんですね。
お恥ずかしい限りです。ありがとうございました。
フォルダ⊃ディレクトリ ファイルフォルダ=ディレクトリ
親フォルダにある複数の子フォルダの中で 子\孫\ファイル(子フォルダ内には孫フォルダしかない)場合に 子\ファイルという構造に直したいのですが この場合どのように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\親\*\" ] ホント初心者ですいません… どうかよろしくお願いします。
>>7 あのさあ、自分で調べたり試したりする気の無いやつには
よほど暇なひきこもりの教えたがりしかレスしてくれないと思うよ
cd "\Users\owner\Desktop\親\*\"
1行目のこれすら思ったように動いてないんじゃない?
コマンドの書き方が間違えてるかどうかなんて
1行ずつ確認すればいいだけなんだからさ
> 子フォルダ内には孫フォルダしかない)場合に
この部分がたぶん君には出来ないと思うけど
今はそれ以前の問題だから出直しておいで
>>8 大変失礼を致しました。出直してきます。
申し訳ありませんでした。
孫フォルダが在るか無いかはdir /adすればいいから簡単だけど 孫フォルダしかないってどうやって判定すんの?
11 :
7 :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 問題外でしたらすいません。
> 4if [not] exist if exist a.txt () if not exist a.txt () [] は要らないよ
>>12 読み取れる内容が沢山あるのだと思いますが、私のレベルでは
とりあえず*.*と*は使えない、かもしれない、という次元なので
もうちょっとしっかり読めるように精進したいと思います。
ご紹介ありがとうございました。
>>13 今まで即オチだったのですが、[]を外して*.txtにしたら無事に処理が終わりました。
後は*.txt以外の拡張子や、フォルダが2つ以上ある場合には処理をしないでおきたいのですが
私のレベルでは今が精いっぱいみたいです…。アドバイスありがとうございました。
>>8 >> 子フォルダ内には孫フォルダしかない)場合に
>この部分がたぶん君には出来ないと思うけど
お恥ずかしながら、案の定出来ませんでした。どうかご教示願えないでしょうか?
>>14 ファイルにアーカイブ属性が付いていることを前提にできれば
カレントフォルダが子フォルダのときに `dir /aa /b` でforループで回して、
1件以上ヒットしたらファイルがあるってことで判定できるんじゃないかな?
ヒットフラグ保持は環境変数を使う。
軽く考えただけなので 抜けがある or 間違っている かも知れんがw
>>15 DIRを使った事がなく意義もよく理解できてないので仰る意味が分からないのですが
時間をかけて理解していこうと思います。ありがとうございました。
dir /a-d >nul 2>&1||dir /ad |find "個のディレクトリ" これの結果が3ならフォルダが1個しかないってことになるんだが tmp.txtに一旦書き出すとかしないと受け取れないものなのかな? 別バッチなりサブルーチン化してパス引数にして投げたら フォルダひとつなら1それ以外なら0を返すとかにしたほうがいいかもな
dir /a-d >nul 2>&1||for /f "tokens=1,*" %%a in ('dir /ad ^|find "個のディレクトリ"') do ( if %%a==3 (フォルダひとつの時の処理) ) これでいけるんじゃない?
19 :
11 :2011/09/17(土) 08:12:02.15
>>19 よかったね、おめでとう!そしてありがとう!
横からdさせてもらったw
実は俺も初心者なんだけど例えば
>>11 のカレントフォルダの移動をもっと楽に、
または汎用的にどこのフォルダに置いても出来る方法ってないですかね?
>>20 試作中みやすく失敗しないようにフルパスで書いてたんですが
>汎用的にどこのフォルダに置いても出来る方法
であれば最初の行にset pass=%~p0を置く事で可能になります。
後は該当箇所に代入してけば親フォルダ\当該batである限りは自動でやってくれると思います。
処理したい親フォルダが沢山ある場合には
set 任意の文字=親フォルダのパスをコピペ
これで複数のbatを作って一か所に置いておくのも便利だと思います。
それで今は、これらをさらに1つのbatで命令できるように考え中です。
私も初心者ですがお互い頑張りましょう!
> 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 :2011/09/17(土) 11:52:51.52
訂正 if exist %1 (goto :loop) ↓ if exist "%~1" (goto :loop) こうしないと最後に%1がないよと怒られる、、かな?
> 構文の意味も合わせて今日はdirの勉強をしたいと思います。
>nul 2>&1
http://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 ()
のコマンドの中だとパイプをエスケープしないとエラーになる
他には & ) とかもエスケープが必要かな
あとは各コマンドのヘルプなりググるなりがんばれ
>>23-24 全部CDの後に代入だったんでp0で間に合うかなと思ったんですが訂正しておきます。
それとset DPATH="%~dp1"は目から鱗な使い方でした。bat同士のまとめ方まで紹介して頂いて
本当に助かります。ありがとうございます。
今から出かけるので試作は遅れますが、是非とも参考にさせて頂きます。
色々とありがとうございました。
>>25 >>18 の構文がnul以降からずっとチンプンカンプンだったので感動しました。
記号だけでぐぐっても検索できないので非常に勉強になります。
有益すぎる解説をありがとうございました。とても学びやすいです。
後は理解できるよう励みたいと思います。多謝!
27 :
さん :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
for /f %%I in ('PowerShell Get-ExecutionPolicy') do set PSpolicy=%%I
30 :
28 :2011/09/19(月) 01:56:42.65
>29 早々の回答ありがとうございます。 batのforの使い方を初めて知りました。 恥ずかしながらforはループ関数だと思っていました。 一つ経験値上がったと思います。 本当にありがとうございました。
>>29 とは別人ですが・・・
>>30 いや、forはループ関数だよw
>>29 はPowershellの結果の出力が1行しかないから1回だけまわるループ。
コマンドの出力内容がカウンタ変数(%%I)に格納されるから都合がいいってこと
バッチはforが単なるループ関数ではないと知る事が最初の一歩
policy変えずに実行すりゃいいのにね
すいません、質問です。下記のような処理をしたいのですが どう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でググッてみたのですがカレントフォルダ内はあっても カレントフォルダ自体?の名前をどうやれば取得できるのか分かりませんでした。 どうかご指導のほどよろしくお願いします。
>>34 ファイル選択して右クリ→batに送る だから
複数ファイルをバッチにドロップしたいってのはわかった
ファイルをmoveさせたいんだとは思うけど
バッチにどういう処理させたいのかがわからん
具体例示して書け
cd /d "%~dp1" 2>nul "%cd:\="&set "HIRAGANA=%"
>>35 すいません、単に移動したいだけなんです。利用目的は
aaaフォルダは作業中フォルダでbbbフォルダは作業完了フォルダ
bbbにはaaaのバックアップ(txt以外)を取っていて
aaaの個別フォルダ内で、完了時に右クリから送りたい
(bbbフォルダで同名の個別フォルダを探すのが面倒)
というのがbat作成の動機でもあります。
気概のない処理でごめんなさい><
>>36 ありがとうございます!できました!!!!
39 :
34 :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は一瞬しか立ち上がりませんでした。 引き続き恐縮なのですが、どうかアドバイスを頂けないでしょうか? ご指導ご鞭撻のほどよろしくお願いします。
>>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 :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 アドバイスありがとうございます!
さっそくやってみたいと思いますが、ちょっと眠気が…
寝てしまったらすいません。けどありがとうございました!
なんか抜けてたんで。。 > とか設定するようにしておけば > ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ とか設定するようにしておけば後で対象のパスが変わっても修正が楽になる どうしても右クリ送るで対象のパスをバッチに送って%*で受け取りたいってわけじゃないなら バッチで対象のパスを探させたほうが楽じゃないかな ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ
> ここでCをmove %%A "Z:\hoge\bbb\"
> で%HIRAGANA%を省くと全ての選択ファイルをbbbフォルダには移動してくれました。
> ここから先はどうすればよいのか分からないですが…
遅延展開で調べてみ
Acd /d "%%~dpA"
B2>nul "%cd:\="&set "HIRAGANA=%"
で
echo off で見たら
Bが上手く動いてないはずだと思うよ
だから
>>40 で言ったようにcall使ってサブルーチン化
44 :
39 :2011/09/27(火) 03:58:24.64
>>42 >>43 わざわざありがとうございます。よく読んで勉強したいと思います。
すいません、あと、自分で言って何なんですが
文頭の「●」や「処理」をコマンドで取り込むのは
出来れば最終手段の方向でお願いします。
というのも、テキストファイルだけなら良いのですが、他にも編集する拡張子があって
それらは別のソフトで編集しながら、そこで付けたタグやメタデータから
ソートして集めて反転、これをソフトからbatにボタンでドロップして移動する頻度の方が多く
●や処理などのリネームはtxtは良いのですが他が二度手間になってしまうので…
せっかくのアドバイスに難癖をつけてしまって申し訳ありません。
ただ、とても参考になりました。echo offと遅延展開、それとサブルーチン化
dirの使い方など勉強になります。初めての事ばかりですが試行錯誤してみます。
調べてみます。ありがとうございました。
@echo off :loop if "%~n1"=="" goto end rem ここに処理を書く echo %~n1 shift /1 goto loop :end echo end pause
46 :
39 :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 :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 :2011/09/27(火) 05:55:13.36
あれ!?え!どうして!!?
>>45 からまた始めたのですが、さっきは失敗したのに何故か成功しました!
おそらく最初のforでinを忘れたように、何か文字が抜けてたんだと思います。
ありがとうございました!これで完璧に達成できました!
皆様本当にありがとうございました!
これでやっと寝れる・・・6時か・・・・・・眠眠打破かってきます
けど凄い嬉しい目がしゅわしゅわする
バッチかWSHかで高速なAND検索って出来ないですかね? 今は単語毎にfindで探してerrorlevelを見て、全部の単語でerrorlevelが0だったら マッチという風にやってるんですが、これが正直遅いです。
findstr
findstrをfindと同じ使い方をしたらもっと遅いんですが… 単純に指定しただけではOR検索になる仕様ですし、 正規表現でAND検索をやるには前後の組み合わせを変えてOR検索するという 馬鹿みたいな表記になり、2語程度が限界ですが。
orのfindstr出力をfindでandする
言っている事がよくわからない… aaa bbb ccc ddd でAND検索を現状は サブルーチンに渡して :sub echo %hoge% |find "%~1" if errorlevel 1 goto :eof shift goto :sub みたいなことやってるわけなんだけど… findstrの出力をfindでandする? 2語の話じゃないですよね?
最初からそれ書けあほ ファイル処理だと思うだろがばか 環境変数の:=置換を使えぼけ
ファイルの検索だったとして、結局同じだけどどういう意味だったの?
ファイルの検索だったとして、結局同じだけどアホには無理
多分自分で間違えてるの気付いてないんだと思うけど。
>>39 for %%A in (%*) do (
set X=%%A
call move %%A %%X:\aaa\=\bbb\%%
)
ドロップしたファイル名を set で取り込みたいのですが & が含まれているときに そのファイル名全てを受け取るにはどのようにすればいいのでしょうか?
ファイルかフォルダ名に空白を入れとけ でなきゃ難しいからやめとけ
そうなんですか。 別の方法あたってみます。 自分で名前をつけたなら & なんてヤな気配のする文字は使わないんですけどね…… !! とか……
!もやめとけ 遅延展開で困るかも
63 :
39 :2011/09/30(金) 21:25:22.32
先日はお世話になりました。
>>58 お返事遅れてしまい申し訳ありません。どうもありがとうございました。
先ほど試してみたらこれだけで移動する事ができました!ものすごく感動しました!
そこで是非とも意味を理解したく:や=や単体での%%の使い方、またはfor %%A in (%*) do (set X=%%A
の意味を調べているのですが、なかなか見つかりません。
なので、もうこうなったらbatの優しい参考書があれば購入しようと思うのですが
何か初心者にも分かり易いものはありますでしょうか?
for/? set/? call/? 以上で十分
昔なら良書もあったが、いまどきはねぇ・・・ Webなら初心者向きHPも腐るほどあるから、お金出さずに勉強できるよ (古い情報のまま放置のところもあるけど)
66 :
39 :2011/09/30(金) 22:36:23.51
>>64 穴が空くまで読めということですね。ありがとうございました。
>>65 Webの場合は全てのHPを行き来すれば網羅的だと思うのですが
この行き来をなくして、馬鹿な私もついていけるような前提から説明して一緒にbatを作り上げるような
そんな本であれば購入しようと思っていたのですが、古い情報だとまずかったりするのですね。
HPをめぐって勉強しようと思います。ありがとうございました。
>>66 古い情報でもまずいことはあまりないのだが、cmdやコマンドもOSによっていろいろ進化しているから
昔は何行もバッチを書いていたのが今ではコマンド1発でいろいろ出来てしまうことが多々ある。
WinNT系ではWin9xまで(DOS含む)に比べて大幅に機能が拡張されているから、
HPを見つけたらいつ頃書かれたものなのか意識していくといいと思う。(書いていないことが多いが)
いまどきから始めるならバッチよりもWSHの方がいいのかなぁ・・・
いまどきWSH???
5.6で機能強化の止まってしまったWHSなぁ
5.7だけど
そやな
せやな
WSHだけど 爺さん婆さんみたいだな ムヒをヒムとか
パンツをパンスとか
初めてのプログラムでbatに挑戦したいと思うのですが 下記のような事はbatでも出来ますか? フォルダ名が『レーベル] タイトル』のものと『タイトル』のものが沢山あり これらの中からタイトルが殆ど一致するものを検索し、該当するフォルダについては txtかエクセルに出力し、そこにフォルダ名とパスとサイズとファイル数を表示したいと思ってます。 よろしくお願いします。
すいません、フォルダ名には他にも 『[レーベル] タイトル (ジャンル)』というものがありました。 正規表現を使って末尾から一致を探そうと思ったのですが これはちょっと困りました・・・
>>76 > タイトルが殆ど一致するものを
殆ど一致て似たものもってこと?「殆ど一致」ではなく「完全に一致」で
フォルダ名の書式が
[レーベル] タイトル (ジャンル)
[レーベル] タイトル
タイトル
が厳密に守られていて、且つ
レーベル、タイトル、ジャンルの文字に "]" "(" の文字が使われて居ないならば
やる気さえあれば出来るよ
ただこれから始めるような人には敷居がちょっと高いかもね
とりあえず"[レーベル] タイトル (ジャンル)"から
"タイトル"を抜き出す方法からやってみるといい
>>77 タイトルの先頭や末尾に加えてメモが書いてあったりするフォルダもあり
また、稀にですがアルファベットや記号で半角全角など違う場合もあるので
殆ど一致であれば全てカバーできるのではないかと、そう表現しました。
フォルダ名の形式についてはタイトル以外は殆ど厳密に守られていると思いますが
タイトル(ジャンル)このように半角スペースが入ってないフォルダも結構ありました。
とりあえず敷居は高いとはいえ出来ない事はない、と聞いてやる気が湧いてきました。
ご指摘頂いた「タイトルを抜き出す方法」をまずは学んでみます。
どうもありがとうございました。
> アルファベットや記号で半角全角など違う 出来るか出来ないかで言うと出来ないことってあまり無いよ ただ、ものによっては実装するのにすごく手間がかかるので 別の言語を使うほうが楽だったりして現実的ではなかったり if /i で大文字小文字の違いは無視して比較出来るけど 半角全角は無視出来ないから、一旦全角を半角に直して比較、、 とかならやれなくないけど面倒だね フォルダ・ファイル名、一括リネームソフトとかで手直ししてから使うとか もっと言えば、わざわざBATで書いて作らなくても 正規検索で "タイトル"の一致するPATHを書き出してくれる フリーソフトを探せばあるんじゃないかな? BAT書いてみたくて身近なネタがそれだったとかなら別だけど。 目的の為の手段としてBATで書くってなら近いフリーソフトを探したほうがいいよ あと77の方法だけど set の環境変数の置換使って ](を区切り文字みたいに使えば楽に出来るよ set a=%a:*]=% うしろは一工夫すれば出来る
>>79 ご丁寧にありがとうございます。
半角全角については結構大変なのですね。
batでなくても難しいみたいなので、今回は未対応で作りたいと思います。
フリーソフトでも正規検索で結果を書きだす事が可能とのことで
こちらでも検討してみます。ただ、今は正規表現さえままならない状態であるのと
今回の処理以外にもやってみたいプログラミングがあるので、まずはbat
(または他に初心者でもやりやすい言語があればそれで)でやってみます。
お気遣いありがとうございました。
また、紹介して頂いたsetなんですが、もしよろしければ質問させて下さい。
set a=%a:元=先%はどこかで見てメモしたのですが、
set a=%a:*]=%この場合には先がないですよね?この場合には
*]を%aで表現できるという事でしょうか?つまり、()の場合には
set b=%b:(*=%によって%bで表現できるとことでしょうか?
…すいません、自分で検証してみろって話ですね。失礼しました。
後はifを使って%a %b以外で一致する場合には[コマンド1]をするみたいな感じで検討してみます。
沢山のヒントをありがとうございました!
すいません、凄い初歩でつまづいたのですが、どうか質問をさせてください。
まずはcmdと正規表現の繋がり、基礎を学ぼうと
http://ykr414.com/dos/dos02.html#09 ここの使用例を参考に、Cドライブ直下にaaaフォルダを置いて、そこに
bbb.txt(中身は適当でテキストという文字も入れた)と、試作.batを入れ、batには
>findstr テキスト bbb.txt
pause
と書いて、これをクリックしたのですが
’テキスト’は操作可能なプログラムまたはbatファイルとして認識されていません
と表示されてしまいました。
なんとか調べてコマンドプロントからcd/をして
C:\aaa>findstr テキスト bbb.txt
とした場合には、「アクセスが拒否されました」と表示されてしまいました。
これは何がまずいのでしょうか?こんな調子で先が思いやられますが…
どうかよろしくお願いします。
> 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使わなくても出来るけど 文字列に"!"が入ってると一旦別の文字へ置換して後で戻したりとかすることになる
findstr "テキスト" "bbb.txt"
>>82 見よう見まねでbatを作ってみたのですが
とても分かりやすい展開で勉強になりました!
分からない行もありましたが、じっくり解読できるよう励んでみます。
ご丁寧にどうもありがとうございました。
>>83 ありがとうございます、出来ました!
batの場合は""が必要なんですね。
cdの操作はカレントディレクトリの移動が出来てないだけでした。
失礼しました。
XPと7で処理を分けたい場合ってどうやればいいんですか 環境変数 OS=WINDOWS_NT ってもうなんの意味もない気が…
ver
>>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を調べているのですが
もしよろしけば次にやるべきことを教えて頂けないでしょうか?
どうかよろしくお願いします。
すいません、出来たと思っていたのは "[ab] cd (ef)"ネームのフォルダだけでした。 "[ab] cd"の場合には別途それに合うbatでないと駄目でした。また、 set full=%1 set a=%full:*\=% とさっきは書きましたが、これは後の*]で運よくパスを削って貰っていただけで "cd"ネームのフォルダには対応できませんでした。 どうすればsetにフォルダ名だけを載せれるかわかりません。 それも問題ですが他にも頓挫してる場所がありまして もしよろしければダメ出しをして頂けると嬉しいです。 以下に作ってみたbatを書きます。もしお手数でなければ診てやって下さい。 よろしくお願いします。連投すいません。
"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% ()
とりあえず "コマンド バッチ" でググれ
あと
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入れて確認したりとかしながらがんばれ
複数のパス渡して"タイトル"の重複を比較するとなると
"フルパス" "タイトル"を関連付けて環境変数に保持することになるから動的な配列とかかな
http://d.hatena.ne.jp/jak-san/20090308/1236501217 この辺参考になるかもね
>>90 とても為になるアドバイスをありがとうございました。
未だ変数、装飾子、文字列の区別も曖昧ですが、今後は文字列を意識して見ていきたいと思います。
また、%~nxは名前.拡張子の表示だと思っていたのですが、フォルダにも使えるのですね!
そして、私は%1なら""付きだからと安心していたのですが、%~1でこれを""で囲った方が良いのですね。
今後はそのようにします。そして](の判定ですね。上記を修正したら取りかかりたいと思います。
紹介頂いたURLまでたどり着けるように頑張ります。どうもありがとうございました。
>>91 "タイトル"同士を厳密に比較出来なくて良くて
対象フォルダが全て同じフォルダにある
パスの書き出しのみ
というエクスプローラーで検索と変わらないようなので良ければもっと簡単に出来るよ
c:\test\music 以下にあるなら
dir /ad /b /s "c:\test\music" | find "タイトル"
この結果をテキストに整形しながらリダイレクトするとかでリスト化は可能かな
入力上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 "タイトル"を抜き出す事が出来ましたらさっそくやってみます。
私には今の段階でもかなりキツいので、ここらへんが潮時なのかもしれません。
渡りに船になればよいのですが、ご紹介ありがとうございました。
>>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
リダイレクトでテキストファイルに書き出せばいい
"あいう" と書いた時に認識されてるのは「あいう」という文字列ではなく 「"あいう"」という文字列 %a:"あいう"=% で置換されるのは 「123"あいう"えお」であり 「123あいうえお」には反応しない
>>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を入手しました。どうもありがとうございました。
@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
>>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)
この"]("や"]"では判別がうまくいきませんでした。
とりあえず専念してみます。ほんとうにありがとうございました。
発想を変えて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
http://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の(セット)みたいに出来ないか検索中です。
方向性が合っていれば良いのですが…どうかよろしくお願いします。
@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 甲&乙" だと大丈夫だから ")" のみだとマズいのかも。よくわからん
>>101 こんなに沢山書いて頂いて本当にありがとうございます!
findと1>nulとif errorleve 1さらにcallまで使用して頂いて
とても勉強になります!よく意味を調べて
使えるようになった上で適応させてみます!
こんなコマンドがあったんですね!盲目になってました。
今日は寝るまで
>>101 のコマンドを解読しようと思います。
ご丁寧にどうもありがとうございました!
>>101 > "[あ&あ a&a 甲&乙)" は失敗する
if not errorlevel 1 ( set DTITLE="%DTITLE:*]=%
)
これがダメ
if not errorlevel 1 ( call :DEL_LABEL )
call 使ってここもサブルーチン化
if not errorlevel 1 set DTITLE="%DTITLE:*]=% ()使わなければいいんじゃねーの? callしといたほうが無難そうだけどな
105 :
36 :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程度で、同一ドライブ内での移動になります。
何か思い当たるところがありましたらコメントを頂けると助かります。
それではどうかよろしくお願いします。
> batって最大でいくつくらい同時に起動しても大丈夫でしょうか? OSの仕様や搭載メモリ容量によるかもしれんし俺にはよくわからん。すまんね > 以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度) > どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして… firefilecopy使え ベリファイ出来るしcuiからも使えるからbatに組み込むことも出来る > 使っているソフトウェアからファイルをこのbatに送る際 > ソフトウェアの制約で複数ファイルを送る場合には > その複数ファイル個分だけこのbatを多重起動させる必要があるのです。 パスひとつずつbatに送ってるならもしかして上のスクリプト意味無いんじゃないの? その「使っているソフトウェア」とやらのサポートかスレで聞け
107 :
36 :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つだけ起動して処理できています。
ただ、これが多少おっくうなので、送るボタン(複数起動)で処理したく伺わせて頂いた次第です。
ありがとうございました。
>>107 @echo off
if not exist "%~1" goto :eof
set fpath="%~1"
move %fpath% %fpath:\aaa\=\bbb\%
それならこれだけでOK
ffc.exe使うならmoveと差し替えて適切なコマンドラインスイッチを追加
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 :
続き :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自体が無効になってしまいました。ホント質問ばかりで恐縮なんですが、どうか叱咤ご鞭撻のほどよろしくお願いします。
DEL_(S,B)FARSTなんて言葉ないですね、デリート(スモール、ビック)FIRSTの意味です。それと
>>103 ,
>>104 ありがとうございます。さっそく使わせて頂きました。
何度も連投して申し訳ないのですが、もう少しの間だけお相手お願い致します。
> ドロップしたフォルダについては"タイトル"(&入り)だけ出来ませんでした。 パスにスペースが無くて&が入ってると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変数は使えない
>>112 骨身に沁み入ります。善処します。
上位のディレクトリに"タイトル(&入り)"を挟んだところ、正常に処理が出来ました。
ラベルを同一にすればよかったのですね。そこまで気が回りませんでした。
>if "%DTITLE:~1,1%"==" "これならかなり絞り込めますね。
先のfindやifの流れから、練習問題として捉えてました。
正規表現に浮かれて盲目になっていたのもありますが、とても参考になりました。
しばらくgotoとforのサンプルをechoを使いながら見てみます。
身の丈に合わない早歩きで不愉快な思いをさせてしまい申し訳ありませんでした。
そしてご丁寧にどうもありがとうございました。
>>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
次はタイトルが同じものだけをサブディレクトリに入れるような
そーゆうコマンドに調整していこうと思います。
とりあえず一段落ついてホッとしました。サポートをして頂いた皆様に感謝します。
どうもありがとうございました。
> 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してみればわかる
sortはリダイレクトでファイルに出力した場合は 自分自身をソートするという使い方は出来ないけど /o で出力した場合は自分自身もソートできる。 リダイレクトして元ファイルを削除するなんて事をしなくてもいい。
ソートはしらなんだ
type aaa | find "aaa" | sort /+1000000 /o aaa
119 :
デフォルトの名無しさん :2011/10/10(月) 06:31:34.40
カーナビのmp3の再生順序が、ファイル名や更新日時などではなく FATテーブルに書き込まれている順序で再生されるのですが、 この並び順を変える良い方法はありませんか?
一昨日のあれから"タイトル"が重複するフォルダの移動に取り掛かっているのですが
全くうまくいかずに心が折れました。色々試したつもりではあるのですが…
もしよろしければ、次に何をすべきか、どう組み立てるべきかご教示願えないでしょうか?
>>90 さんに紹介頂いた配列変数や、
>>115 さんに教えて頂いたcall :ラベル 複数→%1,%2%3
これを活用できないかと考えてはみたのですが、私の力では想像が足りませんでした。
せっかく紹介して頂いたのに申し訳ありません。
どうか智慧をお貸し下さい。お願いします。
>>120 結局どうしたいの?
重複がわかりやすくなって簡単な方法であれば
フォルダ名を "[レーベル] タイトル (ジャンル)"→"タイトル [レーベル] タイトル (ジャンル)"
とか元のフォルダ名の前にタイトル追加すれば綺麗に並ぶ
"タイトル"tab"ディレクトリパス" とテキストにリスト化することだって出来るし
ディレクトリを "\タイトル\[レーベル] タイトル (ジャンル)\" と
タイトルフォルダ作ってそこへコピーすることだって出来る
それに重複「だけ」にこれらの操作を適用するのか全てのディレクトリに適用するのかとか
(もちろん面倒なのは「重複だけ」の方) 全てに適用でタイトルフォルダへコピーなら
タイトルを比較する必要もなくなる
前にも書いたけど厳密に比較でなく乱暴でよければ
dirの結果を"タイトル"でfindしてその結果を"タイトル"フォルダへコピーとかなら
全ての対象フォルダからタイトル抜いて配列orリスト.txtにして"タイトル"を比較とかしなくて済む
方法なんていくらでもあるしやろうと思えば出来るから。
ただ、あなたがどうしたいかによってやり方や難易度は全然変わってくるので
どういう動作をさせる&させたいのかはっきりしてくれないとこの先はアドバイスしようがないよ
>>119 それがわかってるなら再生させたい順で転送しなおせば?
あとそれってバッチは関係あるの?
>>121 様々なプランを提示して頂いてありがとうございます。
具体的にやりたい事は、C:\test\juu fuku\ここでbatを実行し
この階層にある全てのフォルダ(フォルダネームは弄らない方向で)を対象に
タイトルが重複するものだけを、C:\test\juu fuku\該当\に移動できるようしたいと思ってます。
面倒になってしまい恐縮ですが、ひとつよろしくお願いします。
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
http://hibari.2ch.net/test/read.cgi/software/1315320625/ ◆こんなソフトウェアつくってください〜Part16〜◆
http://hibari.2ch.net/test/read.cgi/software/1316551791/
> 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\該当"へ振り分ける感じで まあ処理がわかりやすくなれば分けるフォルダ名はなんでもいいよ
質問者は
>>80 を見るとバッチファイルにこだわっているわけではないようだし
テンプレにも「※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。」とあるように
他の言語を使ったほうがいいんじゃないか?
そもそもバッチファイルによる高度なプログラミングは初心者向きではなく、職人芸みたいな感じだし
>>124 ,
>>125 ,
>>126 ありがとうございます。挑戦させて頂いたのですが
またもや分からない点が溢れだしました。
しかし、これ以上私のレスでここを埋めてしまうのも忍びないので
一度、誘導して頂いたスレッドで依頼してみます。
ただ、並行して1つ目は理解できるよう挑戦していきたいと思います。
それとWSHについてもROMってみるとよく話題にのぼっているので
私も調べてみます。どうもありがとうございました。
自分も
>>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を使ってます。
find/? where find
>>129 find /?さえ開けない・・・
コマンドプロント開いて%PATH%打ったらどう表示されますか?
多分ここが違うものに変更されて出来なくなったのかなぁ
for %I in (find.exe) do echo %~$PATH:I
>>131 実行したら
C:\Ruby192\bin\find.exe
になりました。Ruby192は今日インストールしたやつです。
これからどうすればよいのでしょうか?
>>129 where findってそーゆうことだったんですか
てっきり英語で聞いてるのかと思ってました、ごめんなさい。
where find
C:\Ruby192\bin\find.exe
C:\Windows\System32\find.exe
これ2つあるからRuby192の方のfind.exe削除しちゃって大丈夫ですかね?
削除しようとしても削除できなったんですけども。
とりあえず環境変数PATHの並び順をRubyの方を%SystemRoot%の後にしてみたら
とりあえずうまくいきました。これで問題ないですかね?
そもそもなんでrubyの方が前に来てるんだよ
別にPATHに頼らんでも C:\Ruby192\bin\find.exe C:\Windows\System32\find.exe で好きなほうが使えるだろw そんなことも知らなかった?
>>134 なんかインスコする時PATHがどうこうチェックしたったら前になったったった
>>135 知らないボクに教えて下さい><どうやるんです?
>>137 そのスレで知って来たんですけど別人です
そもそもRuby入れてどうするのさ
>>139 なんか色々使いまわしできそうなフリーソフトの内容だったから自分も欲しくなって。
Rubyのソース貼ってあったしちょっとやってみようかなと入れて見ました。
バッチも使えないのがRubyなら使える?
>>140 人のマネするなら真摯な受け答えと学習の姿勢も見習った方がいいぞ。
まあ、重複を調べるなら初めから他の言語で教えたほうが良かったんじゃとは思う
>>144 本当にその通りだと思います。言葉の綾にしても酷すぎました。
>>101 さんと
>>103 さん、申し訳ありませんでした。
そしてもう一度、ありがとうございました。
また、お陰様で依頼の品を作って頂く事が出来ました。
紹介して頂いた
>>124 さんありがとうございました。
最後に、今までの長きに渡りご指導を頂きました皆様に感謝します。
無知な私に時には厳しく、時には易しく教示して頂いた事を忘れず
これらも精進していけたらと思います。本当にありがとうございました。
それでは失礼します。
スレをかき乱してしまい申し訳ありませんでした。
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を使ってやってみたのですが、うまく置き換えられません。 よろしくお願いします。
>>148 set a=192.168.0.1
echo %a:~0,-1%254
>>149 すいません、忘れてました。
>>109 のpauseに下記を代入してください。
echo "%DTITLE:~1,-1%","%DNAME:~1,-1%">>aaa.txt
これで多分大丈夫だと思います。
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 うまくいきました!ありがとうございました。
set a=!?-,.、。!?〜ー☆#♪ for %%x in (! ? - , . 、 。 ! ? 〜 ー ☆ # ♪)do call set a=%%a:%%x=%% echo %a% このようにすると「,」と「?」が残ってしまうのですが その2つも消すにはどうすればよいのでしょうか? また、これは一体何が原因なのでしょうか?
エスケープされてないので ,は空白に置換 ?は1文字ファイル名に置換
>>155 最初のsetを""で囲んでforのセットに^?^,でいけるかなと思ったんですが駄目でした。
他も色々と試してみたのですが、うまいことエスケープ出来ませんでした。
forの外ならset a=%a:?=%とset a=%a:,=%でエスケープもいらないのですが
仕組みを理解したいのでもうちょっと調べてみます。よく分かりませんが。
ありがとうございました。
set a=!?-,.、。!?〜ー☆#♪ for %%x in (! ^^? "?" - "," . 、 。 ! ? 〜 ー ☆ # ♪ ') do call set a=%%a:%%~x=%% echo %a% set a=%a:?=% echo=%a% pause forの()中 ?は "?"はダメで ^^?でエスケープ出来るが %%xに渡してくれない カレントディレクトリに1文字のファイル置けば一応エスケープされてることが確認できる
?はエスケープでけん
>>147 for /d /r c:\test %a in ("*タイトル*") do @echo %a
>>157 、
>>158 ファイル名に使えない=\|/:*<>は試してませんが
(! ^ ! ? ☆ ★ ♪ # # $ $ 〜 − ― < > ー - "," " " " " . ・ 「 」 → 、 ” ’ 。 _ & + / \ ・ + "&" % @ @) do なんかは普通に通りました。後は遅延を考慮した""%%""位が特殊な形でした。
危険そうな所は避けているので他にもあるとは思いますが…これらは成功しました。
それでようやく理解しかけているのですが、例えば?と同じく出来なかった%の置換。
doの遅延で2つで1つ状態なので、セットの段階から%%にして、これに他と同じく
""を付けるのですが、他は%%~xで""を外しても大丈夫だったのですが
これは""を外して置くと特殊文字化するので、再びここで囲み直し
結果的に""%%""と二重で囲んで成功しました。
これは?にも当てはまって、""?""これで無効化された普通文字というのでしょうか
おそらく他もこの仕組みなんだろうと思いました。^自体は^^でした。
アドバイスのおかげで成功出来ました。どうもありがとうございました。
>>159 forはある程度理解できるようになったと思っていたのですが、全然浅かったです。
ありがとうございます。解読して挑戦してみます。まだgoto文が苦手なんですよね。
おそらくgoto文も使うのでちょっと腰を据えて学んでみます。ご紹介ありがとうございました。
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
http://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
http://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
つまらん もちっと珍しいことはないのか?
ここを見てると、「(PerlやRubyのような)フリーソフトは危ないから導入禁止」 とかほざいてる馬鹿会社が、いかに罪深いかがよく分かるな。 まあ趣味でバッチを追究するのは、また別の話だが…
>>164 いや、ファイル名に%が付いてるのはどうなるかなと思ってね
たいした意味はないよ
べつにちっともこまらんが? あるものを使いこなせない馬鹿社員が、いかに罪深いかがよく分かるな。
亀レスだけど
>>36 これ凄いな・・・職人芸を感じる。
他の言語知らないから普通の事かもしれんが
set a=!?-,.、。!?〜ー☆#♪ set b=! ? - , . 、 。 ! ? 〜 ー ☆ # ♪ for /f %%x in ('echo %b: =^&echo %') do call set a=%%a:%%x=%% echo %a%
set a=!?-,.、。!?〜ー☆#♪ set b=! ? - , . 、 。 ! ? 〜 ー ☆ # ♪ for /f %%x in ('"echo %b: =&echo %"') do call set a=%%a:%%x=%% echo %a%
何か云えよw
何か
これ凄いな・・・職人芸を感じる。
>>167 windows鯖いじる仕事だったら普通だけど、、
まあ、本番で使ってるのはもっとシンプルなバッチばっかりだけどな。
2>nul "%cd:\="&set "HIRAGANA=%" これなにをやってるの?さっぱりわからない…
set dir=G:\ほげ1\ほげ2\ set dir=%dir:~0,-1% 2>nul "%dir:\="&set "target=%" echo %target% pause フォルダ名を取得してるんじゃない
%~nxIを使えば済むところを物好きな
>>181 %~nxIだとカレントディレクトリ名でなく、そこにあるフォルダ名になると思うんだが
置換の方がfor使って書くより単純だけどな。 ちなみに最後の文字が\だと%~nxiもNGだからね…
あたま悪いの?
for %%I in ("%~dp1.") do set HIRAGANA=%%~nxI より cd /d "%~dp1" 2>nul "%cd:\="&set "HIRAGANA=%" とは物好きな
まあ待て。本人は頭がいいと思ってるのかもしれないけど、 知らない方がいいってこともある。
どっからcdなんて出てきたと思ったらえらい昔のレスじゃないか… 安価付けろボケ
ボケはおまえだけだが?
>>187 あたま悪くてごめんなんだけど
("%~dp1.")これはどうしてdp1の後ろに.がついてるの?
いや確かにこれがないと取得できないんだけど
何かをドロップしなくても"."になって取得できるし
そもそもの"."の意味もよく分からなくって、そこを教えてもらえると嬉しいです。
>>191 > これ凄いな・・・職人芸を感じる。
一銭にもならん職人芸だけどな。
dir . すると . .. があるだろ? a\b\c\.はa\b\cを指す。 a\b\c\..はa\bを指す。 つまり、\.は\.を削除、\..は\〜\..を削除したものと同じ というのがOSのパス名のコンベンションなんだよ
×職人芸を感じる
○職人技を感じる
と思ってたんだが違うのか?
それでネタにされてたんだと思ったがw
>>193 横レスで俺もよく分からんけど"."でカレントディレクトリを1つ上位のパスに戻してるんじゃないのか?
例えばcd ..だと1つ前に戻るけど、forの場合には1個でいいみたいな。試しに".."だと2つ前に戻った。
>>195 なるほどd
>>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 ) こんな感じでかいたらエラーになっちゃいます。
gotoは書けるが、ラベルは複文の中に書けない つまり脱出のみ
IF "! REG.EXE VERSION 3.0" NEQ "%%j" ( ... ) でいいんじゃないの。 インデント増えるけど。 ややこしい処理書きたくなったら for %%i ... do call :eachline %%i してサブルーチンに飛ばしちゃうと色々楽。
201 :
デフォルトの名無しさん :2011/10/19(水) 21:57:06.94
>199 >200 なるほど〜、勉強になりました。 ありがとうございます。
ちょっと教えてください あるディレクトリ以下のファイルを処理したくて、とりあえず 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 コマンド どうしたらファイルの中の空白を含む文字列を正しく読み込めますか?
いったんファイルに吐いているのは、多少加工するためです 前と後ろを少し切るためなんですが、コマンドでやると面倒そうなので、 エディタの置換でやっています
自己解決しました for の /Fが余計だった 頭使わずにコピペしてると駄目ですね スレ汚し失礼しました
何言ってんだか
学校で宿題が出ました、助けて下さい>< 実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。 よろしくお願いいたします。 実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。 テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような パスを変数に代入する記述があった場合 そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt" という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。
>>206 hh.exe ms-its:ntcmds.chm::/ntcmds.htm
少しは考慮に値するレベルならまだしも、一行で終わるようなのはもう帰れとしか言いようがない。
1行じゃ終わらんでしょ
仕様があいまいで書く気にならんな
語句解析とか無理
> 現在存在するディレクトリにある全てのテキストファイル えっ?
>>212 現在バッチファイルが存在するディレクトリ
バッチファイルと同階層のディレクトリ内の
助けなかったらどうなるの?
つまりバッチファイル自身も書き換えるのか
>>215 拡張子がtxtのものだけでお願いします。
そのまま解釈すれば バッチでは無理なレベル
バッチの宿題やるまえに日本語の勉強しなきゃ
なの宿題のわけないが狙いは何だ?
バッチではできないが正解でわ
それくらいならバッチでできるだろ for/? set/? 規模見積もり0.005KS 工数見積もり0.002人月
だからキモの部分は1行で終わるって…
無理だって
出来るよ passはpathの間違いか?まあ変数名なのでどっちでもいいが。 ただ2枚目の画像のようにtxtの中身がpathを記述したものだけなのか?それ以外の行があるのか? ひとつの行で指定されているpathはひとつのみ?;区切りで複数のpathが指定されてたりするのか? によって面倒さが変わってくる
相対パス使えよ
何が無理なんだ?バッチに不可能はないが
>エスケープ文字は非対応 バッチの宿題やるまえに日本語の勉強しなきゃ
WinTabberって良さげなツール見つけたんだけど AVGでWin32/Heurが検出される。 たぶん誤検出で大丈夫だと思うんで試しに誰か踏んでみてくれ。
断る
>>バッチならどのマシンでも実行出来るかなと思ったんだが・・・。 この条件なら WSH 使えばいい話
>何か他に最適な言語はありますか。 WSHは言語じゃない
そんなこといったらバッチファイルも言語じゃないだろ
>>234 じゃバッチファイルの言語はなんだ?言ってみろ
バッチ
バッチは基本的にコマンドの羅列でしかないので厳密には言語じゃないけど、 一般的には言語(スクリプト)として扱われることが多い・・・てことじゃない? unixのシェルスクリプトも同じ扱い。
>>228 thx!!!!!ありがとうございます!!
バッチファイルを今まで書いたことなかったので
お願いしたのだけれど、やっぱり機能追加とかしたいので結局自分でも覚えなきゃいけないな・・・
仕事でバッチを頻繁に使うわけでもないので若干面倒臭い。。
>>232 >>233 すみません、語彙力不足で・・・。
上でお願いしたようなことが出来るのなら言語じゃなくても何でも良いです。
ただ共有して使うつもりなのでインストールとかが必要なものは面倒なので要らない感じです。
WSHってのでバッチよりサクッと出来るならその方が個人的には嬉しいです。
最近スレの質が下がったな 日本語変なやついるし 検証もしないで出来ないとか無理とかいうやついるし 全角英字とか()
出来ないというか普通はsedとか使うんじゃないの
出来ると思うならやってみろよ(キリッ
どうでみいいから好きにしてよ(キリッ
出来ないと思うなら証明してみろよ(キリッ
うちも履歴が止まったが保存日数減らしたら再開したわ
このスレはあなたにとって役に立ちましたか? ○ 非常に役にたった ○ 役にたった ○ どちらともいえない ○ 役に立たなかった ○ 全く役にたたなかった
非常に腹がたった
ユーザー名がtestであるときに cd C:\Users\testと打たないで cd /~test見たいな感じでC:\Users\testに移動できる書き方ってありませんか?
エスパー回答 cd %USERPROFILE%\test
宇宙飛行士じゃないけど cd /d %USERPROFILE%
ありがとうございます!
pushd使え
pushdとpopdっていうのがあるんですね これ便利ですね!ありがとうございます!
hogehogeという名前のフォルダを右クリックの「送る」に登録したバッチファイルに送ると、 WinRARで圧縮すると同時に圧縮したファイル名の先頭にその時の日付と時刻を 「(yy-mm-dd_hh-nn) hogehoge.rar」 このように追加したいのですがどういう書き方をすれば良いでしょうか?
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"
"C:\Program Files\WinRAR.exe" a -ag+{(}YY-MM-DD_HH-MM{) } "%~1"
7-zipを使っております c:\code\の中のファイルで新しく更新されたファイルのみを c:\backup.7zに追加・更新したいのですが それを手動でやってたのですがバッチファイルでこういうのをクリックしたら自動的にできるようには出来ませんか?
hh.exe ms-its:C:\Program Files\7-Zip\7-zip.chm::/cmdline/syntax.htm
>>255 完璧に動きました。
バックアップ用に使います。最高です。
ありがとうございました。
>>256 WinRAR自体に日付と時刻をファイル名に付加するパラメータがあったんですね。
ありがとうございます。
>>259 pushd "%~dp1"
"C:\Program Files\WinRAR\WinRAR.exe" a -ag+(YY-MM-DD_HH-MM) " %~nx1.rar" "%~nx1"
Windows8でコマンド使おうとすると いつまでバッチ使ってるんだPowerShell使えやって警告が出るみたいだな Windows9あたりでcmdは廃止になるかもしれないな
なんのために?
PowerShellってvista以降なら標準で入ってるものですか? もし標準で入っているならPSに移行してみたいですが
>>261 mjd?batしか使かった事ないし腹立ってきた。
PowerShellとか難しそう
エディションによる
homeエディションなら問題ないですかね?
homeエディションなら問題なく入ってない
バッチファイルのソースによく書かれている nx〜〜とかってどういう意味ですか?変数とは違うものなんでhそうか あと~~みたいな上の方に出てるニョロニョロと、dpってやつが何者なんでしょうか。 初心者の質問ですみません・・・。
ntcmds.chmのバッチ パラメータを使用するを読むんだ
batファイルを為まくってたのに努力が水の泡になる困った PSに移行するべきかRubyとかPerlとかPythonを使うべきか
>>270 ほんとそうだよな。せっかく今まで覚えてシコシコ作りまくってたのに
腹立つわマジで
command.comはなくなるだろうが、cmd.exeがなくなるものか、あほども
俺もRuby,Perl,Pythonで書きたいところなんだが 会社のマシンってこいつらが標準でインスコされてないことがあるんだよな…
>>274 「ウィルスの危険性があるので導入は認めませんキリッ」(by糞管理部門)
>>272 どういうことですか?
2つはOSによって名前が違ってますが片方がはいっているものではないのですか?
なくならないんですか?
プログラミングできない人が多い会社(おれ以外プログラミングってなに?レベル)の場合HSP導入するべき?
>>277 HSPはあくまでゲーム製作用スクリプトの趣が強いかと
とりあえずはWSH辺りが相場なんじゃないかね
WSHってPower shellに置き換えられる過去の遺産になるんじゃないっけ
すれ違い
ちょっと変な質問ですが start myprog のコマンドはstartですが myprog でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう 別のスクリプトで start("myprog") => start myprogを実行する と一緒に s = exec("myprog") => myprogを実行して出力を返す s = run("myprog") と言ったメソッドを定義したいんですがその名前は何がいいのかなと
>>284 大雑把な説明だけど。
myprogがOSからみて実行ファイル(.exe、.com(笑)等)であればOSのプロセス管理機能の
管轄で実行されるので、特に暗黙のコマンドというものはない。
myprogがデータファイル(.txt等)であれば、OSに登録されている拡張子割当を元に
該当プログラムに"myprog"をパラメータとして勝手に渡して実行してくれる。
拡張子に割り当てられたプログラムが暗黙のコマンドになる。
(バッチファイルもこのパターンに相当する)
どちらの場合もstartコマンド有無は特に関係ない。
後者のパターンで"start myprog"を実行した場合でも、startコマンド実行後myprogに割り当てられた
プログラムが起動してmyprogがパラメータとして渡されるので、この場合も「暗黙のコマンド」が存在することになる。
拡張子割当の検索はバッチの範疇では無理・・・だと思う(レジストリを見なきゃならん)。
見当違いなことを言っていたらごめん。
拡張子割り当てはassocとかftypeとか?
>>284 アンカミス
見当違い
>>283 >start myprog
>のコマンドはstartですが
の引数もコマンドです。
>myprog
>でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう
myprogです。
C:\doc1.0\bin C:\doc2.0\bin という二つのパスがあります このうち前者のほうをシステムのパスに登録しているのですが batファイルでパスを後者に切り替えるにはどう書くのでしょうか?
set path=%path:C:\doc1.0\bin=C:\doc2.0\bin%
289様ありがとうございます pathはC:\doc1.0\bin以外にもjavaなどのパスやらインストールしたソフトが勝手に登録したパスもありますが ご教示いただいたコードのC:\doc2.0\binの部分にそれらを足したほうがいいのでしょうか? それともC:\doc1.0\binというパスを見つけたらC:\doc2.0\binに置換するという動作でしょうか?
set /?
batファイルを起動してから毎時00分に指定したdosコマンドを実行したいのですがタスクスケジューラを使わずにbatファイルでできますか?
%TIME%の分を取り出して比較して これを繰り返せばよい 適当に待ちを入れて
:loop sleep 60-現在の秒数 タスクを実行 goto loop
'sleep' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
waitfor sleep /t 60-現在の秒数
'waitfor' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
msg %username% /time:60-現在の秒数
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか ら、Ctrl+Z キー、Enter キーを押します。
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか ら、Ctrl+Z キー、Enter キーを押します。 ^Z セッション名の取得エラー 1702
msg * /time:60-現在の秒数 sleep
セッション名の取得エラー 1702
:loop if not 60-現在の秒数 == 00 goto loop タスクを実行 :loop2 if 60-現在の秒数 == 00 goto loop2 goto loop
コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。 コマンドの構文が誤っています。
役立たずばかりだな
おまえの役に立ってたまるかぼけ
おれんちはsleepあるからいいよw
1秒スリープ echo WScript.Sleep(1000) >sleep.vbs cscript //Nologo sleep.vbs
厳密じゃなくて適当に1秒待ちで良いなら ping -n 2 127.0.0.1 1>nul OS制限はまず無いし
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")
pingは環境によってFWでブロックされて止まってしまう
mshta javascript:setTimeout('close()',10000)
そもそも最初は、「毎時00分に」なのに「00秒に」と誤解した上に、途中から「1秒待ち」の話になってる。 へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
応用のできないアホはスルーで
msまで追求するのが漢道
>>315 へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
>>316 応用? 00分の検出と、1秒待ちってぜんぜん違う機能だぞ。
どう応用するのか、見せてもらえるかな?
応用のできないアホはスルーで
まぁまぁ落ち着けよお前ら
一番悪いのは
>>303 なんだから
>>320 え゛っ、応用じゃないの? (w
応用見せてみと言うと階層が違うとか、なんだかねぇ。
おい単芝vipに帰れよ
HP機だと c:\hp\bin\sleep.exe が使えるよ
powershell start-sleep
'powershell' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'c:\hp\bin\sleep.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
hpの事なんて聞いてねえよ!
おまえなんかに言ってないよw 自我肥大するんじゃねーよw
自我肥大はスルーで
pause /t:n
>>292 やったな、おい!大漁じゃねーか!雑魚ばっかりだけど!
これってそんなに難しい質問なのか
応用のできないアホには
choice /t 10 /d y
diskpart /t 15
>>333 続行するには何かキーを押してください . . .
>>337 'choice' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
>>338 DiskPart はパラメータを処理できませんでした。
詳細については、'diskpart /?' を使用してください。
cmd.exe組み込みコマンドと同名のプログラムがPATH中に存在するとき、 組み込みコマンドを指定する方法はありますが? mkdirはmdに変更することで逃げられますが、この方法が使えないとき はどうすればいいでしょうか?
似たような機能のtoolを入れる
>>340 setlocal
set path=
組み込みコマンド
endlocal
>>342 うーん。試してみたらコマンドプロンプトは組み込み優先でした。
実はnmakefileの中だったのです。
>>345 を採用することにしますた。
set path= & 組み込みコマンド
最初からそう言え cmd /c 組み込みコマンド
timeout /t 10
NDWord: /t
'NDWord:' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
整合性レベルの低で起動する簡単な方法ないですか?
%~tIは更新日時のようですが、作成日時は取れないんですか?
start /low
for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (set a=%i%j&call echo %a%)
%i%jじゃ繋がっちゃうだろ
"%~nx1"が"ファイル"だとだめだろ
"eol= "ってやればうまく行きそうだが、行かん。遺憾だ
eol=の仕様は謎だな
findstr /r /c:"^[^ ].*%~nx1"
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%)
だからー "%~nx1"が"ディレクトリ"だとだめだろ
find "/" がええかも
for eolでggったら"delims= eol= "でいいみたいね
そのじゃディレクトリの作成日時は取れんな
start cmd /c pause とすれば、別プロセスで開始したコマンドの終了を待たずに次に進めるけど、 (start cmd /c pause & start cmd /c pause) | sort などとパイプすると、startしたアプリをすべて終了するまで次に進まなくなってしまうのを回避する方法ありません? (start cmd /c pause & start cmd /c pause) > hoge.txt リダイレクトなら普通に次に進めるのですが…
意味不明だな (start cmd /c pause & start cmd /c pause) | sort で止まるのは当然だろw何がしたい? start cmd /c "pause | sort" とか?
367 :
365 :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
だけなら問題なく次に進むのだけど、何でそうなるのかが自分にはよくわからんのです。
>ProcessStartInfo.UseShellExecute=trueでプロセスを起こすと、 >ファイルハンドルを引き継がないようです。 ってことは ショートカット作って start "" "重い処理3cmd.lnk" だな
rundll32.exe url.dll,FileProtocolHandler "重い処理3.cmd" でもええんじゃね
371 :
365 :2011/11/23(水) 22:04:00.88
372 :
365 :2011/11/23(水) 22:12:02.17
>>370 なるほど!
手っ取り早くてイイですね!
cmd.exeのバグだな
そうだな
コマンドプロンプトで使えても、複数行の引数とかで困りそうな…
お願いします。 Windows7です。 host.txtが <ホスト名A>,<IPアドレス> <ホスト名B>,<IPアドレス> というようなパターンで記載されております。 キーボード入力→入力を変数に格納(%host%)。 ・変数%host%と一致する行を、host.txtの1列目から探す、見つかったら一致する行の2列目を変数ipに格納 という処理を行いたいのですが、まったく方法が思いつきません。 お知恵を拝借いたしたく。 よろしくお願いします。
set /p host="> " for /f "tokens=1,* delims=," %%a in (host.txt) do ( if "%%a" == "%host%" set "ip=%%b" ) echo %ip%
379 :
377 :2011/12/15(木) 00:03:14.03
>>378 勉強になります。そのまま使わせていただきます。
ありがとうございます。
Windows2008使用です。 バッチ上から、システム環境変数(本来、マイコンピュータ右クリックでたどっていって編集するもの)を編集したいです。 reg add で編集(追加)はできるんですが、同じバッチ内(コマンドプロンプト内)では、反映されてません。 これを反映させられるようにしたいです。 pathを編集したいわけじゃないので、フルパスにしたからといって解決するものでもないです。 どなたかご存知の方いらっしゃいましたらご教授お願いします。
>set /?
馬鹿登場
reg addしたものと同じものをsetしなおすのが手っ取り早いとは思うけどな。 start "" cmd.exe /c "%~0" %* とかやって独立したプロセス立ち上げると環境変数って新規のが使われるんだっけ? そうなったら今度はローカルで変更した環境変数まで消えちゃうんだけど。
setx/?
'setx' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
setx.exeはServer 2003以降、Vista以降で有効の模様。2000/XPでは使えない。
2000/XPは使わない。
すいません以前ここでcdは使うな。代わりに○○を使えって教わったのですがそのコマンドが忘れました どなたか教えてください
cd /d かもよ
pushdとか?
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 です
>>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に置き換えてね
>>394 できました!ありがとう
ワイルドカードで簡単に出来るものだと思ってました
できるよ
カレントフォルダにあるすべてのファイルに対して AABBBtxt→AA-BBB.txt AACCCtxt→AA-CCC.txt のように3バイト目にハイフンを入れたいです。 AAは必ず同じ文字列となります。 ren AA* AA-* としたらAA-BB.txtとなりBが1個きえてしまいました。 どのようにしたらよいでしょうか
まず set x=AABBBtxt をAA-BBB.txtに変えてみな それができればあとはできるだろ?
> 3バイト目にハイフンを入れたいです。 set a=%~1 set b=%a:~0,2%-%a:~2% echo %b%
> AAは必ず同じ文字列となります。 set a=%~1 set a=%a:AA=AA-% echo %a%
batファイルからカラーダイアログを呼び出せることって無理ですか?
402 :
397 :2011/12/29(木) 00:13:43.43
>>398-400 ループ処理が難しそうですが、なんとかできそうです。
ありがとうございました。
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
【質問】 ・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 よろしくお願いします。
> 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 :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 :2012/01/05(木) 18:43:23.40
>>404 です。
>406の名前欄が間違っていました。
失礼しました。
※教えていただいてできたので良かったのですが、
>>404 でなぜうまく動作しないのか謎でモヤモヤが。
どうもありがとうございました。
>>407 if "12" leq "9" echo 文字列の比較は一桁目から
×一桁目 ○左
コマンドプロンプト上で for /L %i in (1,1,10) do @(set /a 123) とやると 123123123123123123123123123123 と改行挟まずに出力されるんですが、これのメカニズムを誰か説明してください。
set が改行を剥いでいるんじゃね。 set /P とかで、入力は改行で終了するだろうけど、結果には改行が入っていない方が便利だし。
setが改行を出さないだけだろ
:loop execcommand sleep 600 goto loop というループがあって 真ん中あたりでユーザーがその挙動を変えられるようにしたいんだけど 何も入力がなければループを妨げない、 入力があったらキーを set key=? して call :setoption するにはどうすればいいでしょう。
choice/?
tomeout/?
417 :
デフォルトの名無しさん :2012/01/12(木) 22:42:42.89
treeを入れるとそのディレクトリのファイルをツリー形式で出力されますが これに加えてファイル名+サイズ名+最終更新日を出力したいのですが可能でしょうか?
dir /s を整形するとか。。めんどくさそうだけど。
vbs とかで作った方が楽かと。
バッチでは?
むりぽ
画面で区別できんだからバッチでもできるっしょ
だめぽ
%1に渡したファイルやフォルダがルートにあるのかどうかを判定するのってどう書けばいいですか? %~1が3文字だったら、とか思いついたけどもっと上手い方法だったり定石があるなら教えてください
429 :
428 :2012/01/15(日) 00:25:03.61
訂正します > %~1が3文字だったら %~dp1が3文字だったら
UNCとかにも対応したいなら set a=%cd% push .. set b=%cd% popd して比較するとか
"%~p1" == "\" だとダメなの?
>>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"で正しいパスは取れるのですが
この書き方で問題が出るケースはありますでしょうか?
空きメモリか使用メモリを標準出力でゲットするコマンドないですか。 memはさすがに消滅していたw
wmic
tasklistの各行の出力結果を合計してみるとか
それはねーよ
wmic調べてみます。ありがとうございました。
wmic os get freephysicalmemory
for /f %%i in ('wmic os get freephysicalmemory') do set x=%%i echo %x% ECHO は <ON> です。
for /f "eol=F" %i in ('wmic os get freephysicalmemory') do echo %i
ECHO は <ON> です。
for /f "skip=1" %i in ('wmic os get freephysicalmemory') do if not defined mem set mem=%i echo %mem%
for /f %i in ('wmic os get freephysicalmemory') do (call set x=%i) & if defined x call set mem=%i echo %mem%
'wmic' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Windows 2000以降のOSではWMIが標準で実装されている Windows 2000にはwmic.exeは用意されていない
それを言うならXP以降だろw 以降はそれも含むんだから
win2kはwmiコンポーネント実装済みだけどwmicは同梱されていないって事じゃね?
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 ) )
>>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のオプションとか工夫してみて
cdをpushdやpopdに変えて試してみてね
>>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
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" ) ) 趣旨が違うかもしれないが。
>>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つとも試してみましたがどれもうまくいきました! バッチファイルが綺麗に完走するのってピタゴラスイッチ的な爽快感がありますね
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 :
http://... From :
Mail :
本文
--------------------------------------------
のくり返しになっています
findstr/?
findstr /b /v "Subject: URL FROM MAIL" "kakikomi.txt" >"kakikomi2.txt"
本文の行頭に同じ文字列があったらその行も消えるけど
>>457 よりはマシと思う
>>459 ありがとう!次回からは書いてくれたものを使ってみます
フォルダ内の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 ) )
>>461 echo onで実行されたバッチがどうなってるか見りゃわかるけど…
遅延環境変数でググってみ。
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
> set n+=1 set /a n+=1
遅延環境変数のことを失念していました(ノ∀`) サンプルまで書いていただいてありがとうございます
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか? 95とかならexec.batをいじるとできるそうですがいい方法無いですかね マウスでカチカチみんな設定してるの?
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか? 95とかならexec.batをいじるとできるそうですがいい方法無いですかね マウスでカチカチみんな設定してるの?
setx
autoexec.batだろ
>>467 GUIだけどキーボードだけで設定ダイアログまで行けるぞ
Windowsキー → 「環境変数」と入力 → 上に「環境変数の設定」が出て来たらEnter
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか? 95とかならexec.batをいじるとできるそうですがいい方法無いですかね マウスでカチカチみんな設定してるの?
exec.batってなんだよ
>>472 自分で調べる気がないってことでしょ。
スルーでいいよ。
コンソールで使える日本語TTフォントはMSゴシックしかないの?
fixed98epsonマジオススメ
標準で入ってるものではMSゴシックだけ?
レジストリいじれば好きなTTフォント使える。 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont でググれ
ほんとかよ 使えなかったが?
俺は使えてる、XP x64。 レジストリ微妙に何か間違ってるか、プロンプトを間違えているとか? 64bit OS で 32bit の cmd.exe を常用してる? ↓が『64bit OS で 32bit の cmd.exe 』の場合 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
プッ
コマンドプロンプトから引数を与えたときはちゃんと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 :2012/02/01(水) 03:12:11.39
ごめんなさい自己解決しました バッチファイルのあるフォルダじゃないとこに保存されてた・・・
>%~dp0%a%
485 :
482 :2012/02/03(金) 03:10:09.37
d
486 :
忍法帖 :2012/02/05(日) 01:47:02.01
--------終了-------
487 :
忍法帖 :2012/02/05(日) 01:47:36.54
--------終了-------
質問をさせて下さい。 親フォルダに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
>>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 にしてみれば何が悪いか分かるはず
>>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" 〜)
とか?
こんな感じで実行したところからサブディレクトリを全部回ってくれるんじゃないかな
レスがかぶっちゃった delはファイルじゃなくてディレクトリ消したいのか だったらそもそもdelじゃなくてrmdirにしないと
>>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
実行しなくてもわかる、1個目はリネーム、2個目以降は上書き確認でストップ
>>489 以前はusebackqも/rも難しく考えて良く分からなかったのですが
このような身に沁みて実用的なアドバイス頂いたお陰で身近な存在になれました。
ググッて他の実用例を見ながら勉強します。ありがとうございます。とても参考になりました。
後はecho onについてなんですが、これは最初の行に@echo onと書くだけで良いのでしょうか?
現在はecho 変数 かアヤシイ直後にpauseでcmd画面の直前を確認する位しか方法が分かりません
初歩的な質問ですみませんが、もしよろしければご指導頂ければ助かります。
>>490 カレントフォルダ名を取得しようとしたforになりますが%~dp0.ですね、失礼しました。
それとsetについてですが、二重の"のうち1つを削る様な場面では有効でしたが
例えばset "v=v&v"とするとecho "%v%"では大丈夫でも%v%ではバグるみたいでした。
もし私のやり方が間違っていたらごめんなさい…けど便利ですね。
これからは使わせて頂きます。最下層判定と合わせてありがとうございました。
>>491 cdの行を消してrmdir "%~dp0"としてみましたが出来ませんでした。
「プロセスはファイルにアウセスできません。別のプロセスが使用中です。」
との事だったので、そもそもの消すフォルダからbatを実行したのでは難しそうと思い
試しにrmdir "C:\Users\owner\Desktop\移動先\新しいフォルダ"
としてみたら無事に消す事が出来ました。ありがとうございます。
>>492 ありがとうございます!無事に出来ました!
粋な"MVDIR"のお陰でもう忘れないと思います。
後はじっくり解読しながら使いこなせるよう頑張ります。
わざわざ全文書いて頂きどうもありがとうございました。
>>493 >2個目以降は上書き確認でストップ
483では出てきませんでしたが、確かに他の書き方だと出てきました。
てっきり削除確認のY/Nかと思ってましたが上書きだったんですか…
思いもしませんでした。ご指摘どうもありがとうございました。
>>494 echo %v%でばぐるのかな
これは&を^&に置換するか、
setlocal enabledelayedexpansion
としておいて、echo !v!とかすればちゃんと&も表示されるよ
置換するにも、遅延しないとできねえよ
windowsのスタートアップの中でバッチファイルを動かして、他のマシンにマジックパケットを 送りたいんですが、どうもその時点で無線LANが繋がってないようで、対象マシンがWakeUp してくれません。 バッチ処理を遅延するにはどうしたらよいですか?
ping -n timeout
Vista 以降ならむしろ、スタートアップじゃなくてタスク向きな気がする。
:loop ping -n 1 "192.168.0.1"||goto :loop
powershell -command { start-sleep -s 5 } なんでWindowsって意地でもsleep標準装備しないんだYO!
>>502 これ以上Unixからパクるのはプライドが許さないから
なんちてw
504 :
498 :2012/02/09(木) 22:27:55.28
みなさま、ありがとうございます。 とりあえず、対象マシンがスリープ状態なので、ping に応答しません timeout と powershell-command {start-sleep -s 120 } を試してみたんですが、起動後ならうまく動くんですが、 スタートアップから起動すると、うまく行きません 電文の送信に失敗しました、とか一瞬表示されてパケットは送られていないようです。
スタートアップだから動かないってことはないだろう 最終行にpause入れて何がどう駄目なのか調べてデバッグするしか
> 対象マシンがスリープ状態なので、ping に応答しません 無線LAN親機とかデフォルトゲートウェイにpingしてLANが繋がってからマジパケ送ればいい
システムのパスにbatファイルから一時的に追加する書き方を教えてください
sex
set PATH=c:\bin;C:\tool;%PATH%
path /?
511 :
498 :2012/02/10(金) 20:59:56.43
>505,506 そうか、pingは自分のethを試すためだったんですね。 powershellもぐぐってやっと動く用になりました。 ありがとう
>>502 PowerShellを標準装備するようにしたから、わざわざcmd用に作る必要がないってだけじゃね?
まあたいした手間でも全然ないとは思うが
質問なんですが、 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となります。 これは何故なんでしょうか?
ローカルにサーバを立ててましてIPが127.0.0.1になります サーバが動いているかをbatファイルで監視して、サーバが落ちたらbatファイルを終了すると方法を伝授してください
>>513 バッチファイルにも(0% loss)ってそのまま書いてる?
もしそうなら%を%%にしてやってみて
>>515 出来ました!ありがとう御座います
でも「0%」だと何かの変数を展開しようとするんですかね?
それを新たに%を付けて文字列として扱う用にしてるとか…
どっちにしろ""で囲んだら変数は展開されないっていう認識だったのでそれも間違いみたいですね…
勉強してきます
>>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にしておけばいいと思います
@echo off :re ping 0.0.0.1||goto re :end
>>517 直リン or 不規則な部分、の入ったページがあるならそのページをゲットして
URL を抜き出す or フルのURLを生成、すればいいじゃない
>>518 試してみたんですが、動きませんでした
Windowsにapacheを入れてサーバ起動後にbatファイルを起動して、サーバを終了させても batファイルが終了しませんでした
>>523 @echo off
:pingchk
tasklist | findstr apache.exe
if errorlevel 1 goto end
if errorlevel 0 goto pingchk
:end
>>520-521 ありがとうございます
for /f "tokens="勉強になりました
調べまくってようやく521さんの答えにたどり着いたとこでした
>>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であります
>>527 > サーバが停止してたら127.0.0.1にアクセスできなくなるのですが
そのアクセスとはHTTPアクセスであって、応答無くなるのは
それはwebサーバが停止しているだけの話で
PCそのものネットワークが有効か調べるpingとは直接関係ないから。
ヘタすると、OS死んでても ping 応答する奴すらあるし。
>>526 おめ
>>527 ちょい外れるけど
198.162.0.0
への ping がキモ過ぎる……
Apache ならサービスで起動しておいてサービスの状態を監視する方がスマートだと思う。
sc <サーバー> query Apache2.2 | findstr "RUNNING" 1>nul 2>&1
if エラーレベル なんちゃら
みたいに。
テスト copy a Ā
Microsoft Windows XP [Version 5.0.2195] (C) Copyright 1985-2001 Microsoft Corp. >copy a Ā Ā was unexpected at this time. なんでこうなるの?
>copy a Ă 1 file(s) copied. これはokなのに…
codepageは?
D:\>chcp 現在のコード ページ: 932 D:\>copy a Ā Ā の使い方が誤っています。 D:\>copy a Ă 1 個のファイルをコピーしました。 なんだろこれ
調べてみたらこんな感じ switch (c){ case '&': case '<': case '>': case '|': return 0x100; default: return c; }
Ā = Ā
Ā = Ā
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コマンドで同じように、特定のフォルダからファイルのパスをひとつだけ検索して変数に置き換えられるコマンドにするにはどうすればいいでしょうか よろしくお願いします
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
それ以前にfindが無いってのはどういうこと? win98にはあったような…。win95位前は覚えてないんだけど。
winのはfindはコマンドが違うし別物 どこからか落としてきて使えないことはないけどfor /f使うのがめんどくさい
いやそれは知ってるけどさ、元からある奴は消さなきゃ無くならないだろ。 最初からないっていう環境はあんの?
>>539 の事だから、どんなことやってるか凡人には想像もできない。
するだけ無駄だから「無い」はそのまま受け入れよう。
forfiles使えよ
>>540 うまくいきました!ありがとうございます!
やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね
>やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね だって
UNIXを知ってると自慢したいだけだろw
一応forfilesがunixのfindもどきなんだけどね。 一応findstrがunixのqgrepもどきなんだけどね。
こんなゴミのリンク貼るなよ。
>>550 サポートされているオペレーティング システムWindows 2000 Service Pack 3/Windows 2000 Service Pack 4/Windows Server 2003/Windows XP
すいません、教えてください。 バッチファイルの中の処理でファイルを作成するステートメントを書きます。 次のステートメントの処理が始まるのは、先のファイル作成の完了(ディスク上にファイルができる)の後ということでよいでしょうか。 コマンドプロンプトを考えれば、そうなると思うのですが、念のため。例えば外部ディスクへの書き込みまちなどをしている間に、次の処理が始まるということはないでしょうか。 初歩的な質問ですがお願いします。
普通に考えれば分かるだろ?
へえ?どう分かるんだ。教えろ。
基本的に逐次処理されるよ ただしstartコマンドは/waitしない限りプロセスを起動して終了を待たずすぐ制御を返す
当たり前すぎて、つまらないレスですね
前のコマンドの終了を待たずに次のコマンドを実行するってことは 前のコマンドの実行開始とほぼ同時に次のコマンドを、更にその次を…ってことで 全てコマンドを同時実行するに等しい
書き込み量が多くてバッファに残ってるのに 次の処理が始まる可能性は?
頭悪いひとが悩むようには作られてないってことだよw普通に考えれば
プロセスから見て終了していても、 実際には終了していない場合もある
下手の考え休むに似たり
具体的に反論してくれないとつまらん。 頭良いんだろ?お前ら
お前を楽しませてどうするbkk
つまんね
start hoge nanika matiawase hoge ってどうやればいい?
頭悪いんで質問の意味が分からん
start hoge.bat nanika hoge.bat start /w hoge.exe matiawase hoge以下でやりたかったこと
わからんならスルーしろよw
それだと matiawase hoge以下でやりたかったこと が nanika のあとにならんだろ
echo ^G はどうやりぃい?
hoge|nanika matiawasego だな
552の質問をしたものです。 別プロセスを起動しない限り、先の処理の完了をもって次の処理が始まる ということですね。何をもって完了というところが、疑問だったのですが、 基本的には、ファイル作成なら作成完了で制御情報が返ってきて、プロセス が完了と判断すると考えることにしました。 皆様レスありがとうございました。
下手の考え休むに似たり
copy 巨大ファイル なんてやってると、copyから復帰してもガリガリやってるな
hou >for %i in ("<html></html>") do echo %~i > index.htm >type index.htm <html></html>
親フォルダは削除せずに、サブフォルダだけを削除する方法ってありますか? 今は仕方がないので rd C:\aaa /s /q mkdir C:\aaa という風にしています。
for /d %d in (c:\aaa\*) do rd /s /q %d
cd C:\aaa rd . /s /q
cmdのカレントディレクトリって何故かロックされるんだよな Explorerからの削除を妨害されて何度泣いたことか
カレントディレクトリが勝手に削除されたら困るだろが?
>>580 ありがとうございます
空フォルダが残ってしまいませんか?
>>581 ああ!たしかにこれで充分ですね!
cd, pushは必ず結果をチェックしないといつか泣きをみるぞ cd C:\aaa || goto error rd . /s /q ... :error pause goto :eof
んじゃ cd C:\aaa && rd . /s /q
最後に goto :eof とか書くのは意味あるのか?
cd の後に rd . /s /q とか怖いぞ cd /d にしたほうが安全
バッチは途中でエラーがあっても突っ走るから怖いぞー
ビビッテンジャネーヨ!
>>587 その後に別のエラー処理を追加するケースとかを想定してんじゃね?
cdやpushdなんてせずにフルパス指定すればいいじゃん(いいじゃん)
どうしてもカレントディレクトリを変える必要があるのって どんなケース?
更新日時の更新はどうやるんだっけ?
ロックしたいからカレントディレクトリを変えてるんだろ RD フルパス指定だと、それ自体が消えちゃう もちろん他の方法もあるだろうけど
作成日時の更新はどうやるんだっけ?
WSHで
cd /d "%~dp1" copy %1 +
対策法を見つけはしたが、皆さんならどうするのか聞かせて。iは、コマンドラインを想定。 set i="a" /? "b c" if "%i%"==""a" /? "b c"" (echo YES)
待ち時間作るときって WSHでやるかpingでやるかどっち使ってる?
sleep
timeout.exe 、2003以降なら標準で使えるし 『何かキーを推せば続行』がお手軽なので timeout.exe が使えないか使えない可能性がある、待ちの確認やスキップが不要、なら ping
こんな便利なものがあったのかthx
607 :
デフォルトの名無しさん :2012/02/24(金) 03:35:01.15
608 :
607 :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
>>606 カレントディレクトリにファイルが有るんなら cd は不要だよ
copy /b %1 + nul %1
これは更新されない
copy %1 + nul %1
これは更新されるがファイルにゴミ(0x1A)が付く
>>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 :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
exit /b pause <==== これは何のお呪いですか? :: --------------------------------- end
お祝いです
確かにexitの直後のpauseは何の意味がって感じではあるな
cd /d "%~2" とかで引数で受けるならサブルーチンでcdする意味あるだろうけど cd /d %src% だとcallする度にcdするのは効率悪いから mainのforの前でcdしてしまったほうがいいね
616 :
607 :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 :2012/02/25(土) 00:48:07.87
set listいみねぇな…まぁいいや… いろいろありがとノ
おお、\" で、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 :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
拡張子によって処理を分岐させるにはどう書けばいいですか?
質問者が手を抜いてるのに それに答えるアホが現れるかどうか
拡張子を判定してgotoすればいいです。
>>620 どこにその文字列が格納されているかによるけどサンプルをいくつか
if "%~x1"==".bat" ...
goto label%~x1
...
:label.bat
for %%i in (foo.bat) do call :label%%~x1
すみませんお騒がせしました 昨日調べて作ってみたのが動かなかったんですが なぜかさっきもう一回試したら動きました 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
linuxのwgetみたいなのってbatだけでは無理ですか?
ってよく考えたら2つの比較なら if "%~x1"==".rar" (rar" x -y -ep1 "%~1" "%~dp1") else (7z x -y "%~1" -o"%~dpn1") でよかったですね
>>625 1.Powershellでごり押し
2.bat|cmdとwshでハイブリットごり押し
スクリプトのみはちょっときついかもね
Powershellというのでやってみます
>>609 > copy /b %1 + nul %1
> これは更新されない
更新されるが?
それ使っていいなら、こんなスレで質問しないと思うが… バッチ / スクリプトのみではちょっと無理でしょ。 MSXML2.ServerXMLHTTP + スクリプトあたりが無難だと思うが。
あー聞き方が曖昧だった。 Windowsバイナリ使わずに技術的に可能ならやってみる、ってこと? を聞いてみたかっただけ。どこまでやってみるのか分からないけど 再帰、階層、ミラー、etc,...、とか考えるだけでしんどそうなのに挑むのかと。
本当に本人かどうかはわからんけど、
>>628 で Powershell でやってみると言ってるよ。
> 再帰、階層
むしろここら辺はスクリプトでも扱いやすいと思うけど。
バッチに送った複数のファイルやフォルダのパスをソートしたいのですが @(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
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 :
ホイミン :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 :
ホイミン :2012/02/29(水) 15:06:06.53
でも dir /b /og の方が便利そうだね。 ごめんよ、ややこしくして。
ちょっと質問なんですが 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のとこでコマンド構文が間違ってますといわれるんですが 何が間違ってるんでしょう
こうだろうな。 move {app}\*.dll "C:\Program Files\ffdshow"
>>642 またやってしまった・・・
ダブルクォーテーションですね
ありがとうございました
644 :
デフォルトの名無しさん :2012/02/29(水) 20:21:18.27
>>640 おまえ、全然試してないだろ
そのバッチ作ってD&Dしてみろボケ
645 :
ホイミン :2012/03/01(木) 08:22:30.49
>>644 コマンドプロンプトで test.bat .\* 等と、色々やって試したんだけどね、足りなかったね。
dir がフォルダーを展開してしまうのには、書き込んでから気付いたんだけど、くどいので訂正しなかたんだよ。
使えない書き込みだから、みんな無視するだろうと思っていたよ。
一々反応してくれるのはありがたいけど、君は社会性が無いようだね。
@echo 便所の落書きに(ry&pause
便所の落書きだか知らんが どう試したんだよw 全然ダメだろw
@echo 便所の落書きに^(ry&pause
dirの/oは引数をソートしないよ
複数のファイルをバッチにD&Dしたら 引数の順番って、どう決まるの? echo %* マウスカーソルの位置のファイルが一番目?
そうよ 2番目以降は並び順、ラップラウンド
ついでに言うと、1番目ファイルでカレントディレクトリ
バッチにD&Dしたら、カレントディレクトリは %HOMEDRIVE%%HOMEPATH%が既定値なのでは?
なのではって?そうなるのか?OSは?
すまん。俺のPCは古い化石なんで、Win2000 他のは違うんかも
カレントディレクトリはバッチに落とした場合とバッチのショートカットに 落とした場合で異なる。
ショートカットの場合はプロパティで確認できる。 D&Dしたファイルとは無関係なようです
ショートカットで設定してなければバッチと同じ 当たり前だろ
だから何? おれはショートカットの話は別にどうでもいいんだが
カレントディレクトリはバッチに落とした場合とVBSに 落とした場合で異なる。
だから何? おれはVBSの話は別にどうでもいいんだが
他人のレスの真似するなよ。
なんでvbsは違うんだ?
だから何? おれはVBSの話は別にどうでもいいんだが
>>659 お前バカだろ。起動時のカレントディレクトリはあてにしてはいけないという事だ。
つまり、
>>652 の情報は何の意味もない。
なんでスレタイ読めないの? おれはVBSの話は別にどうでもいいんだが
VBSのドロップハンドラがへぼいんだろ
>>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 らしいね。
参考
http://www.hirax.net/diaryweb/2009/06/04.html
まとめてみたよ。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 するとクオートされないよね。他にも知ってる問題があったら、教えて。
コマンドとか以前に × Drug ○ Drag
>current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、 explorer processのcurrent directoryでは?
moveでフォルダ移動のときフォルダ名指定に*使えないのは嫌がらせでしょうか
仕様です
>>669 俺は
>>649 じゃないが、dir の /og は引数をソートしないようだ。
他は知らない。
というか間違いを書き込んで放置している奴が、
他人に社会性云々などと言える立場かよ。
レベルが低くて悪かったね。
便所の書き込みでした。
ドラッグ&ドロップ 前提のバッチファイルならバッチの冒頭とかに cd /d %~dp0 や cd /d %~dp1 とかを状況次第で必要に応じて書き加えていそうなもんだが。 OS による挙動の違いで問題、とかいってる前にしないのかね。
>>669 dir /b /on test\2\2.txt test\1\1.txt
2.txt
1.txt
どうでもいいっす
バージョンの違いだろwあほども
低レベルな事を言わないでくれってさ
>>676 バッチファイルでcd前提の処理は
UNCパスで実行された場合、想定外の動作になる
バッチファイルは相対ダメ
ゼッタイ絶対パス指定すべし
どうでもいいっす
683 :
634 :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 :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 :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
絡んだおれがバカだった 絶対パスで好きにしてくれ
てかいまどきバッチファイルなんか書いてる奴らが総じて底辺。
689 :
634 :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 :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
うざ
%~dpは早退なのかよ
遅刻なのかよ
dir /b /on test\2\2.txt test\1\1.txt 1.txt 2.txt
dir /b /on z:\z.txt y:\y.txt z.txt y.txt
dir /b /on z:\* y:\* z.txt y.txt
dir /b /on test\2\2.txt test\1\1.txt |sort 1.txt 2.txt
>dir /b /on a.txt b.txt a.txt b.txt >dir /b /o-n a.txt b.txt b.txt a.txt
>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
ディレクトリ単位にソートってことだろ?
>>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
うざ
どの行?
あの行
たぶんcallの引数の%が化ける
引数渡しやめて環境変数渡しにすればよい
>>704 ファイル名の%ってどうやって環境変数記号でないと判断させればいいの?
ファイル名内の%の位置を調べて存在したら
^でエスケープするしかない?
%のエスケープは%%だよ
なんでお前らいまだにバッチファイル書いてるの?
バッチファイルは基本だよ
for変数と混同するんじゃね
このバッチに名前が%文字を含むファイルをD&Dしてごらん 違いが分かるよ @echo off set a="%~nx1" call :x %a% call :x %%a%% pause goto :eof :x echo %1
setlocal enabledelayedexpansion set a="%~nx1" set a=!a:%%=%%%%! echo %a% call :x %a% call :x %%a%% pause exit :x echo %1
@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
^%
@echo off for %%i in (%*) do set a=%%i& call :x pause & goto :eof :x echo %a%
いつまでやってんだよカス
サンキューカッス
もっと面白いネタは無いのか
ない
とっく枯渇してるので、蒸し返しばっか
でもスレを覗くんですね
でもってなにがでもだ?
新しい知見を得るために覗いていたのか?
よほど無知なんだろ
スレ立てるまでもない質問スレで教えていただいたUNIXコマンドがあります cat `find あるディレクトリ -name test.txt` > 一つのファイル これはあるディレクトリ以下の全てのサブディレクトリを含めて、test.txtというファイルの内容を一つのファイルにまとめるコマンドです Windowsでも同じようにやりたいのですが copy ファイル1.txt+ファイル2.txt・・・・ marge.txt といった感じに+でいちいち書いていくのが面倒なのでよい方法内でしょうか?
for /r ディレクトリ %i in (*) do type %i>>test.txt
まんまじゃねーか
え?なんかやる事とやってる事が違うくね?
こまけーことはいいんだよ!
>>730 試してみたんですが
> の使い方が誤ってます
ってエラーがでます
試す前に、なにやってるかくらい読めよ
すいませんコマンドの部分だけ変えてやったら出来たんですが全てのファイルを一つにコピーできません for /R %%a in (test.txt) do copy /B %%a+test.txt test.txt
変えるなよバカ
試す前に、for/?くらい読めよ
だったらまともに動くものを書いてくださいよ
応用のできない奴に何を教えても無駄
それってあなたが書けないだけですよね?
あぶく銭は身に付かない
じゃあ邪魔しないでくださいよ
邪魔なんかしてないよw猫に小判なだけだろ
別にバッチファイルの勉強しているわけじゃないのに くだらないクイズやナゾナゾなんて必要が無いんですよ 質問に答えられないなら邪魔でしかありません
くだらない質問に誰が答えるって?
いやにのびてると思ったら……
別にバッチファイルの勉強しているわけじゃないので くだらない質問なんて答える必要が無いんですよ
バッチも使えないならUNIX使ってりゃいいじゃん
いや俺の認識だとむしろバッチだから使えないだと思う 普通に(無意味に)難しいよ、バッチは
答えられない人はせめて邪魔しないでもらえますか
俺、答えられるけど答える気ないだけだから邪魔してもいいよね?
それは答えられないと等しいですよね 答えられるのなら答えてるわけですから スレの無駄なんて無能さらすのはツイッターでやってください
marge.txt くすっ
>>729 には教えるだけ無駄 できないと等しいですよね
できるならやってるわけですから
スレの無駄なんて無能さらすのはツイッターでやってください
便りの無いのは良い便り
俺っちは
>>730 で動いたが、感謝の念もない無礼な輩が多いな
動く、という事と、 期待した結果は別なんじゃないかな。
エラーが出たら直せばいいと思うよ不通 それしないで逆切れするなんて以上
期待した結果になるように直せばいいと思うよ不通 それしないで逆切れするなんて以上
逆に、MS-DOSしかしらない人に UNIXのシェルで作れって言ったら似たような事になると思うよ。
ならんと思うよ。 man findとかちゃんと調べるもん
馬鹿は何やっても駄目だから諦めた方がいいよ
クレクレ君に答えを与えないでくださいw
やるんじゃなかったなw
>>729 ,734,736,739,741,744,746,752,754
幼稚園からやり直せ
ファイルの結合はcopyだろ 誰がtypeでDOSに文字をかけと言った
だってcatじゃん
便所の書き込みに何を言ってる
自演ならもう少し面白くやってくれくれくん
だったらDOSじゃなくてDOGだろ?
for /r ディレクトリ %i in (test.txt) do type %i>>marge.txt
くそ!どいつもこいつもバカにしやがって!!!!!!!!!
真夜中に2ちゃんでレスの応酬ってw しかもバッチスレw 出遅れたわw
遅延展開やねw
シフトワーカーはバッチがお好き
こういうのはどうかけますか? Cドライブに存在する全てのgitフォルダが何個存在するかカウント
エクスプローラで検索したほうが早くないか
単純に検索するとゴミ箱の中まで漁る
cd /d c:\ dir /s /b /ad .git | find /v /c ""
set n=0 for /r c:\ %%i in (.) do if "%%~nxi"=="git" set /a n+=1 echo %n%個
>>782 の訂正版
cd /d c:\
dir /s /b /ad git | find /v /c ""
>>783 ifの前に@を付けろ
>>781 for /r はゴミ箱の中まで検索してるな
名前が偶然に一致するなんて、まず無いだろうが
>>786 n
x
i
だけじゃないから、自分で調べろ
for /?
>>782 の訂正版
dir /s /b /ad c:\git | find /v /c ""
これでワンライナーOKだった
ここで出てきたテクニックをwikiにまとめていただけませんか?
いただけませんか?とか書きこんでる間にwikihouseかどっか借りてコピペしてけばいいだろ
えええ俺がwiki借りるの面倒くさいです
dir abc* ってやると先頭がabcから始まるファイルがヒットすれば表示されますが ファイルの途中にabcが存在するようなファイルもヒットさせる方法を伝授してください xxxabcxxx.txt abc.xxx.txt xxx.abc.txt とか 拡張子が無いファイルとか拡張子にabcが来ることは無いと考えていただいて結構です
dir *abc*
うそこくでねー
ほんとだ
以前はウソだった。最近のcmd.exeは可能。いつからウソじゃなくなったか知らない。
少なくともxpは本当。
今試したら、98SEでも行けた。 大昔(DOS2とかCP/Mとかの時代)はNGだったのは確かだが、 いつOKになったんだろ?
*abc* ぐらい試してから質問しろよ
試したら質問しないだろw
16bit DOSの場合は dir *abc*.*
バッチファイルでも「最新の情報に更新」(F5キー)を使えますか? デスクトップのファイルを定期的に別のフォルダに移すバッチファイルを書いたんですが、 ファイルが消えても更新するまでアイコンが残ってしまって・・・
ahk呼んでsendcontrolでもしたら
山口美江さんが亡くなった・・・ おまえらが急に老けたとか言うから
ごめん誤爆
>>803 ふつー残らんよ
でもどうしてっつーなら
createobject("shell.application").windows().item().refreah
バッチでクリップボードの文字列を引数として渡すことはできますか?
for /f %%i in ('〜') do echo %%i ってこと? '〜'に cscript.exe 〜〜 mshta.exe 〜〜 powershell.exe 〜〜 ってすりゃいい どれでも得意なのでどぞ
C:\2012\以下のサブディレクトリも含む全てのファイルの更新履歴が 2012年2月1日0時0分0秒以降になっているものをリストアップするのはbatでできますか?
forfiles/?
Aフォルダに入っているファイルを Bフォルダにバックアップしたいと考えてます そこでBフォルダには入っていてAフォルダにないファイルを一覧にしたいのですが どうやるのでしょうか?
for + if または dir + findstr
>>804 ありがとうございます
ごめんなさい、難しくてよくわかりません;;
>>807 ありがとうございます、教えてもらった方法でできました!
'createobject'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出るのですが、これはこれでいいんでしょうか?
WIN7を使っています。
正常
> refreah
> refresh.vbs
FOR /F "usebackq tokens=1,3 delims=," %%a IN ( "hannkaku space irino file.csv" ) DO ( だよーん
820 :
818 :2012/03/09(金) 22:29:58.17
ありがとう!
forでcsvって難しくないか? "abc,def","pqr","xyz" ってなのがあったらモー駄目だろ?
>>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"
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"
findstrは?
質問です。よろしくお願いします。 バッチファイル(あひゃ.bat)を優先度低で実行させるために start /b /belownormal あひゃ.bat と書かれているcmdファイルを作成し、それを実行させているのですが、 あひゃ.batが終了してもDos窓が閉じません。 終了後に自動で閉じるようにするにはどうしたら良いのでしょうか?
start /b /belownormal cmd /c あひゃ.bat
あひゃ.bat に echo %cmdcmdline% を入れてみりゃ理由がわかる
早速のレス、感謝します。
>>826 サンの方法で見事にDos窓が自動で閉じました。
>>827 サンのとおりに実行したらなんとなく解ったような気がします。
cmd /k と cmd /c の違いですね。help startとかhelp cmdを読んでないのがバレバレ(;´∀`)
なんとなく思い込みでstartコマンドの/bオプション(ウインドウを作成しない)を付けたのですが、
実はコレ無くても良かったみたいです。(じ、実は/bオプションの意味もよく解っていないっ!(∀`*ゞ)
とにかく期待通りに動いたので満足です。
お二方ともありかとうございました。
batを起動しっぱなしにして タスクマネージャのタスク名に指定した名前(例えばメモ帳を立ち上げて「無題 - メモ帳」など)が出たら ログに書き込むというのはbatで出来ますか?
tasklist
wmic process get name
>>808 WSHと組み合わせないと無理だったはず
833 :
818 :2012/03/11(日) 23:14:37.36
>>821 そこまで本気なことをするには荷が重いものだと理解してます。
(できるかもしれないけど、数ヵ月or数年後の自分に理解ができない、と思うので)
>>808 clip.exeか類似ソフト使えば出来る
内蔵のclip.exeじゃだめだけどな
スレタイ(ry
>>837 > WSHったってIE使ったりして大変だろ?
ならば
>>809 のは全部同類だから「大変」だ
そうなのか? 簡単に書けるものってないのか?
powershellなら簡単よ
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" これでどうだろう
まあまあやね
及第点やね powershell版もできたら満点や
保守
powershellってそんなにすごいの? Vistaでもできますか?
バッチファイルでただコマンド連続実行するだけじゃなく for /f "usebackqとかややこしいの書きたくなったら さっさとPowerShell移ったほうがいい すごいっていうかまとも cmd糞すぎ
powershellだってややこしいぞw powershell偉すぎ
スレタイ(ry
powershellというのもbatに書いて実行できないんですね なんかググってもよくわかりません
バッチでサブフォルダを含むディレクトリを移動させることはできないでしょうか
@echo off move サブフォルダを含むディレクトリ 移動先
そんな簡単な質問なのか?
taskkill のバッチを作ってスタートアップに登録したのですが プロセスが開始される前にバッチが適用されてしまうようなのです・・・ どうにか時間を置く方法はないでしょうか?
タスクスケジューラ
tasklist で目的のプロセスの有無を調べる 見つかるまで「10秒おきぐらい」でループ 見つかったら即座にtaskkill OR 見つかったらある程度余裕を見て数秒待ちを入れて taskkill って”全体”の話? それとも”10秒おきぐらい”のやりかたの話?
taskkillで成功するまでループ
教えてください。 例えば d:\aaaというフォルダとe:\bbbというフォルダがあったとします。 それぞれのフォルダ内にあるファイルを比較して、ファイルの位置(相対パス)とファイルの内容が完全に一致したら それぞれのフォルダからファイルを削除し、代わりにそのファイルをf:\cccというフォルダに相対パスの位置関係をキープしたまま 移動させたいのですが、バッチファイルでこういうスクリプトは組めますか?
Yes, we can!
860 :
デフォルトの名無しさん :2012/03/20(火) 15:35:26.91
>>858 dir /s /b /a-dコマンドかtree /fコマンドをdとeドライブに実行して、
それぞれのリダイレクト結果をfc /bコマンドでコンペアして、
fc /bコマンドの戻り値が0なら、今度は個別にdとeドラの1ファイルずつをfc /bして移動するかどうか判断って感じかな
forとifとfcとmoveとdelだな
>>856 見つかるまで探せるんですね!!
ありがとうございます。
バッチなる物を作るの初めてなので色々調べてみます。
バッチのforコマンドでUNIXシェルのwhile trueみたいな 無限ループって書けるのかな? 自分はバッチで条件満たすまでの無限ループ書く時は :loop tasklist | findstr /l /i /b /c:"プロセス名 " if %errorlevel% neq 1 goto loop みたいにして無限ループさせるようにしてます
for /L %%n in (1,1,0) do echo %%n
for /L %%n in (1,1,0) do taskkill /im hoge.exe && goto :eof
sleep 入れよ
sleepコマンドなんてないじゃん
あるよ >sleep/? Usage: sleep time-to-sleep-in-seconds sleep [-m] time-to-sleep-in-milliseconds sleep [-c] commited-memory ratio (1%-100%)
sleep なければ入れよ
スリープネタはいい加減テンプレに入れとけよ
俺もgotoループのが多いかな forは「forにしか出来ないこと」に使いたい感じがする
>>860 ありがとう。
/s を付けると絶対パスで表示されるので、aフォルダとbフォルダのパス名を含めたファイル名が
一致しなくなってしまうのですが、dir /s の結果からaフォルダやbフォルダまでのドライブ名を含めた
パスの文字を消す手段ってありますでしょうか。
質問ばかりですいません。
>>872 860ぢゃないけど、
dir /sの出力をsedとかに渡してパスの最初を取っ払うことを検討してみたらどうかな
onigsed使いだけどちょっとしたテキスト編集に便利
860の例だと、dir /s /b /a-d | onigsed "s/^D:\\aaa\\//"
とやると、行頭の"D:\aaa\"の部分を削除できるよ
どうしてそれでやりたけりゃset/?で文字列置換すれば
>>872 subst して dir /s して ドライブ名だけ消したら楽そう
ていうかaaa bbb cccの3つともsubstして比較してmoveしたら?
書けるけど書きたくない。が正解。
オーソドックスにやるのが一番
ドライブレターが空いてないと使えないし
subst 甲: c:\ dir 甲:
>>881 知らんかった…
当然ながらエラーではじくアプリの方が多いが、
まともにパス名として使えたのも結構あってワロタ
「現在の仮想ドライブ一覧」には出て来ないな。 隠し機能だからか?w
@echo off set d1="%~1"& set d2="%~2"& set d3="%~3" call :x d1 %%d1%% & call :x d2 %%d2%% & call :x d3 %%d3%% set a=%d1%& set b=2 :y set a="%a:~2% if not %a% == "" set /a b+=1 & goto y cd /d %d1% for /f %%i in ('dir /a-d /s /b') do set c="%%~fi"& call :z pause & goto :eof :x set d="%~f2" if not "%d:~-2% == "\" set d=%d:~0,-1%\" set %1=%d%& goto :eof :z setlocal enabledelayedexpansion set c="!c:~%b%! endlocal & set c=%c% set e=%d2:~0,-1%%c:~1% if not exist %e% goto :eof echo n| comp %c% %e% > nul 2>&1 if errorlevel 1 goto :eof set f=%d3:~0,-1%%c:~1% echo f| xcopy %c% %f% /y /r > nul if not errorlevel 1 del /f %c% %e%
では1行で書いてください
自分で書けるだろ
おまえが書けよ
なんで?
ヒントは十分出てるからアタマさえあればできるだろ? できないならできるところまででいいからやれよ パクリばかりじゃ身に付かないよ
身に着ける気なんて無いだろbatファイルなんて 動きゃいいじゃん
だからさ、1行で書いてみろよw
やだよ
それは本人のためにならん
一行で書けたって、本人のやくに立つわけじゃないよな
>>884 とりあえず set "d=%~f2" とかやると幸せになれるかもね
不幸になりますw
ゴミが付かないって事かね
subst _: %1 & subst #: %2 & subst $: %3 for /r _:\ %%i in (*) do ( for /r #:\ %%j in (*) do ( if "%%~pnxi"=="%%~pnxj" ( fc /b "%%~i" "%%~j" >nul f not errorlevel 1 ( xcopy "%%~i" "$:%%~pi" del "%%~j" "%%~i" )))) subst /d _: & subst /d #: & subst /d $:
set "d=%~f2" set d="%~f2" なんのためにゴミ付けてるか理解出来てない猿が居てるようだね
>>899 なんのためにsubstしてんだよw
コーヒー吹いちまっただろw
ふたつめのfor要らない。効率悪すぎ
夜中にコーヒー飲むと健康によくありませんよ
うわ、恥ずかしい subst _: %1 & subst #: %2 & subst $: %3 for /r _:\ %%i in (*) do ( if exist "#:%%~pxni" ( fc /b "%%~i" "#:%%~pxni" >nul if not errorlevel 1 ( xcopy "%%~i" "$:%%~pi" del "%%~i" "#:%%~pxni" ))) subst /d _: & subst /d #: & subst /d $:
904 :
デフォルトの名無しさん :2012/03/24(土) 07:57:32.37
>>884 fc /bじゃなくてcompコマンドで比較するとテキストファイル以外の
バイナリファイルが正確にコンペアできないのでは?
905 :
デフォルトの名無しさん :2012/03/24(土) 08:17:31.63
>>903 xcopyは3つ目のドライブの空き容量不足
delは排他制御かかってる状態だと
コマンド失敗の危険があるからエラー処理が必要だよ
>>898 2chコピペすると付いてくる
行末のスペースが変数に付かない
>>904 コンペアできないサンプル プリーズ
compでの相違点の表示見ると既定では オフセットもデータも16進数だよな どう見てもバイナリ比較じゃね
>>903 とってもありがとう。こんなに短いばっちふぁいるで出来るなんておどろきです。
ところで、同パス同名ファイルが存在した場合、ファイルサイズが同じ場合だけFCコマンドを実施させるようにしたいと思うのですが、
その場合、%%~zとかをつかうことになるのでしょうか。ちょっといまググって勉強中です。
サイズ違いとか関係なしにFCに渡せばいいんじゃね。 というかファイル有無のチェックも不要なんじゃね。 ところで昔、FCって戻り値が無かったような気がするけど、 今は大丈夫なのかい?
fc /b a.jpg b.jpg && echo 一致 でXP機でテストしてみたら一致するファイルの場合だけechoされるから戻り値はあるみたい 2K機以前の環境はもう無いので確認できず
>>912 ああ、ちょっと俺の書き方が悪かったね。
おれのWin2kではFCの戻り値が
比較するファイルが無い場合 1
ファイルサイズが違う場合 1
同じファイルの場合 0
中身が違うがサイズの同じ場合 0
なんだよ
今は仕様が変わったのかい?
あ、ごめん 比較するファイルが無い場合 2 だった
比較するファイルが無い 2
中身が違うがサイズは同じ 1
不一致 1
一致 0
XPとWin7
確認出来ないけど2Kが
>>913 の言う仕様なら使い物にならないですね
>>910 > %%~zとかをつかうことになるのでしょうか
その場合
>>903 のバッチだと #:%%~pnxi のファイルのサイズを取得出来ないから
一旦
call :sub "%%~fi" "#:%%~pnxi"
とcallしてサブルーチンで
:sub
if "%~z1"=="%~z2" (fc /b %1 %2 >nul)
とかかな
ファイルサイズが同じで中身が違うなんてことはありえるから
サイズの一致確認なんて必要ないと思うけど
更新したファイルは必ずサイズが変わるの?
>>911 > ファイル有無のチェックも不要なんじゃね
それはさすがに乱暴すぎだと思う
>>913 > おれのWin2kではFCの戻り値が
>
> 比較するファイルが無い場合 1
> ファイルサイズが違う場合 1
> 同じファイルの場合 0
> 中身が違うがサイズの同じ場合 0
自分の関わったWin2003で稼働するシステムで
fcのリターンコードで処理分岐してる機能があるんですが、
2003でも2000と同じ仕様(相違点はあるが同一サイズ)なら
潜在バグ発覚ですorz
仕様です
920 :
デフォルトの名無しさん :2012/03/25(日) 09:43:16.46
fc /b で試しましたよ XP のバグは知らない
>>920 win2kでもxpと同様のバグがあるようだ
xは128バイト、yはその最後のみを変えた物
>fc x y
FC: 相違点は検出されませんでした
ERRORLEVEL=0
>fc /b x y
0000007F: 61 62
ERRORLEVEL=0
でも
>>913 はこれとは無関係だよ
>>921-922 了解しました
2Kでの動作確認までして頂きありがとうございました
このバグは2003でも発生するのですが、2KとXPで戻り値の仕様変更があったということは
このバグもVistaや7では修正されているかもしれないですね
>>881 subst 愛: h:\
とかやったらExplorerで一覧に出ないどころかパス直打ちでも移動すら出来ねぇ。
エロ動画の隠し場所には使えそうにないな。
substは隠し場所には使えません 両方アクセスできるでしょ
comp使ったほうがいいのかな。
うん
擬似コード for /r x:\xxx %i in (*) do for /f "delims=\ tokens=2*" %j in ("%i") do ( comp "%i" "y:\yyy\%k" && ( md "z:\zzz\%~dk" move "%i" "z:\zzz\%k" del "y:\yyy\%k" ))
substなしで1行でお願いします
改行とって&入れればええがな
それもできない?
引数渡しでお願いします。
あとtokens=2*とか無しね。
階層数は任意で。
>>884 みたいに。
それぐらいできない?
echo n|comp するしかないのかい?うっとーしー仕様だこと
>>932 これを繋げば1行で動くよ。あまり意味無いけどね
setlocal enabledelayedexpansion
set "a=%~f1"& for /l %%i in (2,1,1000) do (
if "!a:~%%i!" == "" (for /r "%~f1" %%j in (*) do (
set "b=%%~fj"& set "c=%%~dpj"& fc /b "%%~fj" "%~f2!b:~%%i!"&& (
md "%~f3!c:~%%i!"& move "%%~fj" "%~f3!b:~%%i!"& del "%~f2!b:~%%i!")))& exit)
for /r %1 %%i in (*) do ( set "a=%%~i" (echo n|call comp "%%i" "%%a:%~1=%~2%%") && ( call md "%%a:%~1=%~3%%\.." call move "%i" "%~3%%a:%~1=%%" call del "%%a:%~1=%~2%%" ))
バッチは駄目でしょ
工夫すればダメ文字を減らす事もできるけど、 そのために長いバッチを書くのもどうかと思うがね
Win7のAdminでtitle fooってやると 管理者: foo ってなってしまうんだけど管理者:がつかないようにする方法無いですか。 foo.lnkというショートカットから起動するとつかないんだけど動的に変えたいんです。
いまどきバッチファイル書いてるおとこの人って年収低そう。
年収ある奴はまだマシ
なるほどNECの人たちは年収低いのか
荒らすなカス
>foo.lnkというショートカットから起動するとつかないんだけど いみふ
バッチを管理者として実行すれば付かないが?
cmd.exe.muiを編集するって方法があるみたいだが 管理者っていう語句そのものを消すって方法だからな…
runas
su
952 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/07(土) 00:31:34.10
こんばんは。 現在元ソース(抜き出し)の、ddsファイルをDTX1形式に変換して 元ファイルへ上書きするバッチファイルの改変を考えています。 下記の別のEXE用コマンドプロンプトをバッチファイルの形式で書き直すには どのようにすればいいでしょうか? <元ソース(抜き出し)> ::実行EXE set Converter="C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Utilities\bin\x64\DxTex.exe" :: ログファイルのパス。 set Log=".\ToDxt1.log :: カレントディレクトリ以下の DDS ファイルを対象とする。 for /r %%i in (*.dds) do call :sub1 %%i goto end : sub1 :: 変換の実行。 %Converter% "%*" DXT1 "%*" echo %* を変換しました。 :: 変換したファイルをログに記録。 echo %*>> %Log% echo; goto sub1end : sub1end exit /b
953 :
952 :2012/04/07(土) 00:32:26.32
<改変方針> ・単体テストの結果、実行EXE(DxTex.exe)が上手く動かなかったので、 別のEXE(Texconv.exe)を用いる。 記載方法は元の実行EXEと異なるが、EXEが上手く動いたことは確認済み。 <別のEXE用コマンドプロンプト> Texconv c:\Users\test\aa.dds -f DXT1 -o c:Users\test\ ※もう少し具体的に言いますと、EXEのTexconvで実行対象ファイルc:\Users\test\aa.ddsを取得して、 DXT1形式に変更し、実行対象ファイルのディレクトリに出力=上書きを行うのですが 、実行対象ファイルのディレクトリの取得方法と、バッチファイルのでの書き方がわかりません。 よろしくお願いします。
for /r %%i in (*.*) do call :sub1 "%%~i" "%%~dpi"
955 :
952 :2012/04/07(土) 08:18:41.22
おはようございます。 ここに書き込みして、頭を整理して、ググッて試行錯誤したら 解決することが出来ました。 <変更箇所> %Converter% "%*" DXT1 "%*" <変更後> %Converter% "%*" -f DXT1 -o %~dp1 ※Converterは別のEXEを指定 こちらを利用させて頂きありがとうございます。
>>956 です
書き忘れてた;;
すいません、前置きに、%~dp0 のパスにスペースが含まれているとします。
出鱈目だろ 本来は囲まないのが正しい
"%~dp0";%PATH% の間違いじゃないの
自分家でpath表示してみな
>>959 あ、そうです、
>>960 はい自分でやりました。
>>958 その情報聞いて何か、ほっとしました、 笑
神経質すぎますかね、
ありがとうございます。
echoするとわかるが、クォートで括られそう。 set "PATH=%~dp0;%PATH%" ならば問題ないが。
おまえらpathコマンドも知らんのか? path/?
それはリンク先に言え。 setでも構わんことは構わん
>echoするとわかるが、クォートで括られそう。 おまえpathコマンドも知らんのか?
おまえpathコマンドも知らんのか?
空白を含むパスは囲む必要はないが、;を含むパスは囲む必要があるな
set Path = %Path%;"LocalDrive:\Program Files\Log Parser\" とかホント酷いな setコマンドで環境変数設定するには=の前後に空白を入れるなって ライターは義務教育で習わなかったのかよ
翻訳なら翻訳ミスが考えられるが、日本語オリジナルみたいだし
長文失礼します。 長時間のバッチを動かすのですが、 バッチ終了時にシャットダウン/休止/サスペンド/何もしないの各動作をさせたいです。 バッチが終了するまでに、これらの動作を予め選択しておきたい場合、 現在の選択状況が容易に把握できて、選択の設定が楽な方法を探しています。 WindowsXP上で動かすのですが、とりあえずの案としては、 デスクトップ上に適当な名前(例えば"xxバッチ終了時シャットダウン予約中"とか)のファイルを置いておき、 そのファイル名の有無で動作を決定するというものです。 他に何かよい方法がありましたらお願いします。 あと、シャットダウン/休止/サスペンドする場合に、 その動作を中止させるための猶予時間を設けたいのですが、 自分自身のコマンドプロンプト画面を最前面に持ってくる方法も探しています。 検索のしかたが悪いのか、いまいちピンと来るものが無くて困っております。 何でもよいので助言を…よろしくお願いします。
shutdown/?
>>972 レスありがとうございました。すぐにレスできず、すみません。
> デスクトップだと消しちゃう可能性あるから
> デスクトップにはスイッチ用と確認用のバッチ置いとく
設定も私なのですが、たしかに間違えてゴミ箱へポイとかやりそうですよねw
そっちの方向でも考えてみます。提案をありがとうございました。
リンク先の記事は実は参照済みでして、シャットダウン時には使えますね。
休止もスタンバイも出来ると良かったのですが…
引き続き調べているのですが、シャットダウン・休止・スタンバイの猶予&中止については
vbscriptと連携させて、バッチが終了したらvbscript起動してダイアログを最前面で表示。
その中で、タイマ監視しつつ、中止ボタン押下待ちみたいなことで出来る気がしてきました。
シャットダウンは
>>972-973 氏紹介のコマンドで、
休止・スタンバイはSetSuspendStateというプログラムが使えそうです。
引き続き、助言をよろしくお願いします。
windowsのショートカットで powershell c:\foo\hoge.ps1 としてpowershellスクリプトを実行するようにしています. マウスでクリックするぶんには良いのですが cmd.exeから.lnkを実行しようとしてもリンク先のファイルをクリックしたのと 同じあつかいになるみたいでノートパッドで開かれるだけです. .lnkをクリックした時と同じように動作させるにはどうしたらよいでしょう?
>cmd.exeから.lnkを実行しようとしてもリンク先のファイルをクリックしたのと >同じあつかいになるみたいでノートパッドで開かれるだけです. そんなはずがない
psが起動しても関連づけされてなければ不明なファイルとしてnotepadで開くのは普通だろ
解決しました.すみません。
>>978 >windowsのショートカットで
>powershell c:\foo\hoge.ps1
>としてpowershellスクリプトを実行するようにしています.
よく読め
>解決しました.すみません。 ほらみろ
>よく読め ほらみろ
>>981-982 外人の作ったやつはどうにもモンスター的な怖さが多くて・・・
やはり和製の方がジトっとくる感じの演出で好きよ?
>外人の作ったやつはどうにもモンスター的な怖さが多くて・・・ よく読め >やはり和製の方がジトっとくる感じの演出で好きよ? ほらみろ
ほらみろ
よく読め
かわいそうにそんなに痛いか?
>かわいそうにそんなに痛いか? よく読め
あらますっかり壊れてるみたいねかわいそ杉
ほらよめ
ぺたぺた
>psが起動しても関連づけされてなければ不明なファイルとしてnotepadで開くのは普通だろ
>windowsのショートカットで >powershell c:\foo\hoge.ps1 >としてpowershellスクリプトを実行するようにしています.
>psが起動しても関連づけされてなければ不明なファイルとしてnotepadで開くのは普通だろ ほらよめ >windowsのショートカットで >powershell c:\foo\hoge.ps1 >としてpowershellスクリプトを実行するようにしています. ぺたぺた
うめ
はずいので早く埋めたいのか?
997 :
【.cmd】 バッチファイルスクリプト %9 【.bat】 :2012/04/21(土) 22:35:55.86
>はずいので早く埋めたいのか? ほらみろ
999 :
997 :2012/04/21(土) 22:39:35.11
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。