【.cmd】 バッチファイルスクリプト %8 【.bat】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %7 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1298873550/

【.cmd】 バッチファイルスクリプト %6 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1277465356/
【.cmd】 バッチファイルスクリプト %5 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1242268171/
【.cmd】 バッチファイルスクリプト %4 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1229955189/
【.cmd】 バッチファイルスクリプト %3 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1217860043/
【.cmd】 バッチファイルスクリプト %2 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
2デフォルトの名無しさん:2011/09/13(火) 03:21:34.21
四十年勤め上げた會社を退職し早二十年、何やら張り合いの無い日々を送る内、大學生の孫に「退屈しのぎに遣って見たまへ」と勸められた弐チヤンネル。
當初は「こんな電腦掲示板、何たる幼稚加減」と莫迦にしてゐたものの、遣つて見ると存外に面白ひ。
華やかな色彩の髪と目を持つうら若き乙女に「ゆとり乙」と何度と無く罵られるにつけ、食ふや食はずやで慌しく過ぎ去つた學生時代が自ずと思ひ返され、「戰爭さえ無ければ、小生もこのやうな青春が送れたやも知れぬ」と獨りごちることも屡々。
すつかり虜となつた今では、孫の部屋から白銀色の電腦計算機をせしめては書齋に篭もり存分に「祭り」を堪能する毎日を送つている。
同年代の友人達が癡呆や重い病に惱まされるなか、老いて尚矍鑠としてオフ會に向かえるのも、ひとえに弐チヤンネルのおかげかと思えば、再三に渡る「半年ROMつてろ」の罵り文句も、何やら「まだまだ死ぬには早いよ」と言われているようで愉快極まりない。
ひとつ間違えれば自らが乗り込んでいた機體と同じ名前を持つコテハンに出會える日を樂しみにしつつ、今日もデスプレヱに向かう。
それでは、弐ゲツト。
3デフォルトの名無しさん:2011/09/13(火) 04:27:24.68
>>1乙であります

forでのリネームについての質問なんですが、例えば
フォルダのみ先頭に()を付ける場合

for %%A in (*) do (
ren "%%A" "()""%%A"
)

と考えたんですが、bat自身だけが()追加でフォルダは何も変わりませんでした。
ren "%%~A" "()""%%~nA"
かと思ったんですが、これは「ファイル」名であって「フォルダ」名じゃないんですかね…

上記の場合はどうすればよいのでしょうか?
4デフォルトの名無しさん:2011/09/13(火) 08:41:22.63
for /d %%a in (*) do (ren "%%a" "() %%a")
5デフォルトの名無しさん:2011/09/13(火) 09:07:56.89
>>4
フォルダ=ディレクトリ名だったんですね。
お恥ずかしい限りです。ありがとうございました。
6デフォルトの名無しさん:2011/09/13(火) 15:24:14.47
フォルダ⊃ディレクトリ
ファイルフォルダ=ディレクトリ
7デフォルトの名無しさん:2011/09/16(金) 07:54:35.50
親フォルダにある複数の子フォルダの中で
子\孫\ファイル(子フォルダ内には孫フォルダしかない)場合に
子\ファイルという構造に直したいのですが
この場合どのようにbatを作れば良いのでしょうか?

親フォルダ内…子1子2子3〜フォルダ 当該bat tmp(この為に作成するフォルダ)
子1内…孫フォルダ
子2内…孫フォルダ+ファイル
子3内 ファイル

いま失敗中なのが↓になります。

cd "\Users\owner\Desktop\親\*\"
if exist * () [else
cd "\Users\owner\Desktop\親\*\*\"
move * "C:\Users\owner\Desktop\親\tmp\"
del "C:\Users\owner\Desktop\親\*\"
cd "C:\Users\owner\Desktop\親\tmp\"
move * "C:\Users\owner\Desktop\親\*\"
]

ホント初心者ですいません…
どうかよろしくお願いします。
8デフォルトの名無しさん:2011/09/16(金) 10:48:20.95
>>7
あのさあ、自分で調べたり試したりする気の無いやつには
よほど暇なひきこもりの教えたがりしかレスしてくれないと思うよ

cd "\Users\owner\Desktop\親\*\"
1行目のこれすら思ったように動いてないんじゃない?
コマンドの書き方が間違えてるかどうかなんて
1行ずつ確認すればいいだけなんだからさ

> 子フォルダ内には孫フォルダしかない)場合に
この部分がたぶん君には出来ないと思うけど
今はそれ以前の問題だから出直しておいで
9デフォルトの名無しさん:2011/09/16(金) 10:55:27.83
>>8
大変失礼を致しました。出直してきます。
申し訳ありませんでした。
10デフォルトの名無しさん:2011/09/16(金) 17:03:09.58
孫フォルダが在るか無いかはdir /adすればいいから簡単だけど
孫フォルダしかないってどうやって判定すんの?
117:2011/09/16(金) 19:05:04.84
条件無しまでは出来るようになりました。

1for /d %%a in (*) do (cd "\Users\owner\Desktop\親\%%a\*"
2for /d %%b in (*) do (cd "\Users\owner\Desktop\親\%%a\%%b\*"
3cd "\Users\owner\Desktop\親\%%a\*"
4if [not] exist *.* (
5cd "\Users\owner\Desktop\親\%%a\%%b\*"
6move *.* ..
7for /d %%c in (*) do (move "%%c" ..)
8rd %%b
9)))

345削除9))であれば全ての孫内がそのまま子に移り、空の孫フォルダは消えました。

最後の問題はIFなんですが、どこが間違ってるか文法が違うのか…もう頭が回りません。
どうか知恵をお貸しください。よろしくお願いします。

>>8
問題外でしたらすいません。
12デフォルトの名無しさん:2011/09/16(金) 19:45:50.38
13デフォルトの名無しさん:2011/09/16(金) 20:05:31.84
> 4if [not] exist
if exist a.txt ()
if not exist a.txt ()
[] は要らないよ
14デフォルトの名無しさん:2011/09/16(金) 21:16:01.59
>>12
読み取れる内容が沢山あるのだと思いますが、私のレベルでは
とりあえず*.*と*は使えない、かもしれない、という次元なので
もうちょっとしっかり読めるように精進したいと思います。
ご紹介ありがとうございました。

>>13
今まで即オチだったのですが、[]を外して*.txtにしたら無事に処理が終わりました。
後は*.txt以外の拡張子や、フォルダが2つ以上ある場合には処理をしないでおきたいのですが
私のレベルでは今が精いっぱいみたいです…。アドバイスありがとうございました。


>>8
>> 子フォルダ内には孫フォルダしかない)場合に
>この部分がたぶん君には出来ないと思うけど
お恥ずかしながら、案の定出来ませんでした。どうかご教示願えないでしょうか?
15デフォルトの名無しさん:2011/09/16(金) 21:37:02.69
>>14
ファイルにアーカイブ属性が付いていることを前提にできれば
カレントフォルダが子フォルダのときに `dir /aa /b` でforループで回して、
1件以上ヒットしたらファイルがあるってことで判定できるんじゃないかな?
ヒットフラグ保持は環境変数を使う。

軽く考えただけなので 抜けがある or 間違っている かも知れんがw
16デフォルトの名無しさん:2011/09/16(金) 22:16:53.68
>>15
DIRを使った事がなく意義もよく理解できてないので仰る意味が分からないのですが
時間をかけて理解していこうと思います。ありがとうございました。
17デフォルトの名無しさん:2011/09/16(金) 22:33:44.91
dir /a-d >nul 2>&1||dir /ad |find "個のディレクトリ"
これの結果が3ならフォルダが1個しかないってことになるんだが
tmp.txtに一旦書き出すとかしないと受け取れないものなのかな?
別バッチなりサブルーチン化してパス引数にして投げたら
フォルダひとつなら1それ以外なら0を返すとかにしたほうがいいかもな
18デフォルトの名無しさん:2011/09/16(金) 22:37:35.59
dir /a-d >nul 2>&1||for /f "tokens=1,*" %%a in ('dir /ad ^|find "個のディレクトリ"') do (
if %%a==3 (フォルダひとつの時の処理)
)
これでいけるんじゃない?
1911:2011/09/17(土) 08:12:02.15
昨日はありがとうございました。疲れて寝てしまいました。

>>17
カレントフォルダを子フォルダに移動して紹介して頂いたコマンドを実行しましたところ
子0フォルダに孫0フォルダしかない場合には下記のように表示され
ttp://pc.gban.jp/?p=33896.jpg
子0フォルダに孫0フォルダ以外がある場合には下記のように表示されました
ttp://pc.gban.jp/?p=33897.jpg

どうもありがとうございます!

>>18
無事に目的を達成する事ができました!
構文の意味も合わせて今日はdirの勉強をしたいと思います。
本当にありがとうございました。もの凄く助かりました。
20デフォルトの名無しさん:2011/09/17(土) 08:44:37.32
>>19
よかったね、おめでとう!そしてありがとう!
横からdさせてもらったw
実は俺も初心者なんだけど例えば>>11のカレントフォルダの移動をもっと楽に、
または汎用的にどこのフォルダに置いても出来る方法ってないですかね?
21デフォルトの名無しさん:2011/09/17(土) 09:42:14.91
>>20
試作中みやすく失敗しないようにフルパスで書いてたんですが
>汎用的にどこのフォルダに置いても出来る方法
であれば最初の行にset pass=%~p0を置く事で可能になります。
後は該当箇所に代入してけば親フォルダ\当該batである限りは自動でやってくれると思います。

処理したい親フォルダが沢山ある場合には
set 任意の文字=親フォルダのパスをコピペ
これで複数のbatを作って一か所に置いておくのも便利だと思います。

それで今は、これらをさらに1つのbatで命令できるように考え中です。
私も初心者ですがお互い頑張りましょう!
22デフォルトの名無しさん:2011/09/17(土) 11:04:10.38
>>21
ありがとうございます!出来ました!
23デフォルトの名無しさん:2011/09/17(土) 11:47:42.67
> set pass=%~p0
set DPATH="%~dp0"
のほうがいい
set DPATH="%~dp1"
でバッチに親フォルダをドロップして使える

> 処理したい親フォルダが沢山ある場合には
dlist.bat
main.bat "処理したいフォルダのPATH_1" "処理したいフォルダのPATH_2" "処理したいフォルダのPATH_3"
exit /b

と、処理したいフォルダのPATHのリストをmain.batに渡す別のバッチを用意してmain.batで
main.bat
:loop
set DPATH=%1
REM "%~dp1"でもいいけどdlist.batのほうで""を付けてるなら%1でも問題ないはず
〜処理〜
shift
if exist %1 (goto :loop)
exit /b

とかすればまとめて処理出来る、、と思う。
2423:2011/09/17(土) 11:52:51.52
訂正
if exist %1 (goto :loop)

if exist "%~1" (goto :loop)

こうしないと最後に%1がないよと怒られる、、かな?
25デフォルトの名無しさん:2011/09/17(土) 12:32:21.55
> 構文の意味も合わせて今日は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 ()
のコマンドの中だとパイプをエスケープしないとエラーになる
他には & ) とかもエスケープが必要かな

あとは各コマンドのヘルプなりググるなりがんばれ
26デフォルトの名無しさん:2011/09/17(土) 12:53:03.11
>>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
29デフォルトの名無しさん:2011/09/19(月) 00:10:48.78
for /f %%I in ('PowerShell Get-ExecutionPolicy') do set PSpolicy=%%I
3028:2011/09/19(月) 01:56:42.65
>29

早々の回答ありがとうございます。
batのforの使い方を初めて知りました。

恥ずかしながらforはループ関数だと思っていました。
一つ経験値上がったと思います。

本当にありがとうございました。
31デフォルトの名無しさん:2011/09/19(月) 10:44:40.50
>>29とは別人ですが・・・

>>30
いや、forはループ関数だよw
>>29はPowershellの結果の出力が1行しかないから1回だけまわるループ。
コマンドの出力内容がカウンタ変数(%%I)に格納されるから都合がいいってこと
32デフォルトの名無しさん:2011/09/19(月) 11:33:16.60
バッチはforが単なるループ関数ではないと知る事が最初の一歩
33デフォルトの名無しさん:2011/09/19(月) 16:44:36.33
policy変えずに実行すりゃいいのにね
34デフォルトの名無しさん:2011/09/26(月) 23:20:15.11
すいません、質問です。下記のような処理をしたいのですが
どうbatを書けばよいのか分かりません。

Z:\hoge\aaa\あああ\1.txt、2.txt、3.txt、4.txt
↓@           ↓移動   ↓移動
Z:\hoge\bbb\あああ\1.txt、     3.txt
@=1.txtと3.txtを反転させて右クリ>送る>このbat

このbat
set HIRAGANA=
move %1 "Z:\hoge\bbb\%HIRAGANA%\"

平仮名フォルダが沢山あるので、ドロップしたファイルの直前のフォルダ名を
setで設定できれば出来そうな気もするのですが…
dirでググッてみたのですがカレントフォルダ内はあっても
カレントフォルダ自体?の名前をどうやれば取得できるのか分かりませんでした。
どうかご指導のほどよろしくお願いします。
35デフォルトの名無しさん:2011/09/26(月) 23:29:20.20
>>34
ファイル選択して右クリ→batに送る だから
複数ファイルをバッチにドロップしたいってのはわかった
ファイルをmoveさせたいんだとは思うけど
バッチにどういう処理させたいのかがわからん
具体例示して書け
36デフォルトの名無しさん:2011/09/26(月) 23:38:39.05
cd /d "%~dp1"
2>nul "%cd:\="&set "HIRAGANA=%"
37デフォルトの名無しさん:2011/09/26(月) 23:40:49.03
>>35
すいません、単に移動したいだけなんです。利用目的は

aaaフォルダは作業中フォルダでbbbフォルダは作業完了フォルダ
bbbにはaaaのバックアップ(txt以外)を取っていて
aaaの個別フォルダ内で、完了時に右クリから送りたい
(bbbフォルダで同名の個別フォルダを探すのが面倒)
というのがbat作成の動機でもあります。

気概のない処理でごめんなさい><
38デフォルトの名無しさん:2011/09/26(月) 23:48:02.47
>>36
ありがとうございます!できました!!!!
3934:2011/09/27(火) 01:20:56.80
1個づつは出来るようになったので、後は複数反転を処理できるよう
ずっと試行錯誤していたのですが結局できませんでした・・・orz
もしよろしければアドバイスを頂けないでしょうか?

移動する予定のテキストは1.txtから●1.txtのように、手動で
文頭に●を加えて、aaaフォルダの検索窓(windowsエクスプローラ)
から●のあるテキストを探して全て反転させ、右クリ>このbat
で移動したいと考えています。

@for %%A (%*) do (
Acd /d "%%~dpA"
B2>nul "%cd:\="&set "HIRAGANA=%"
Cmove "%%A" "Z:\hoge\bbb\%HIRAGANA%\"
D)

自分的にはこれが一番近いような気がするのですが
cmdは一瞬しか立ち上がりませんでした。
引き続き恐縮なのですが、どうかアドバイスを頂けないでしょうか?
ご指導ご鞭撻のほどよろしくお願いします。
40デフォルトの名無しさん:2011/09/27(火) 03:21:53.81
>>39
dir /b /s z:\hoge\aaa\●*.txt
プロンプトで実行してみ

for /f %%A in ('dir /b /s z:\hoge\aaa\●*.txt') do ()
とかで取り込めば?

バッチの先頭のほうで
set aaa=コピー元パス (z:\hoge\aaa)
set bbb=コピー先パス (z:\hoge\bbb)
とか設定するようにしておけば
ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ

for /f %%A in ('dir /b /s %aaa%\●*.txt') do ()
こんな感じで

>>39のコマンドがダメなのは確認して無いけど遅延展開してないからだと思う
forの中は
call :sub %%A
とか使ってサブルーチン化するのが楽じゃないかな
4139:2011/09/27(火) 03:32:20.06
すいません、さっきの文頭「●」は文頭「処理」に変更しました。
●で検索したら大変なことになりました(汗)

えっと、それでさっきのソースなんですが、@のforの後にinを忘れてました。
@for %%A in (%*) do (
今度は無事に立ち上がりました。しかし上手くはいきませんでした。
moveの実行でZ:\hoge\bbb\以降から何故かCドライブに続いて
;というマークを区切りにいくつもの関係無いフォルダを辿って行ったみたいでした。
要求されたパスまたはファイル名は受け付けられません。とのことでした。

ここでCをmove %%A "Z:\hoge\bbb\"
で%HIRAGANA%を省くと全ての選択ファイルをbbbフォルダには移動してくれました。
ここから先はどうすればよいのか分からないですが…

とりあえず寝ます。連投失礼しました。

>>40
アドバイスありがとうございます!
さっそくやってみたいと思いますが、ちょっと眠気が…
寝てしまったらすいません。けどありがとうございました!
42デフォルトの名無しさん:2011/09/27(火) 03:35:10.61
なんか抜けてたんで。。

> とか設定するようにしておけば
> ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ
とか設定するようにしておけば後で対象のパスが変わっても修正が楽になる
どうしても右クリ送るで対象のパスをバッチに送って%*で受け取りたいってわけじゃないなら
バッチで対象のパスを探させたほうが楽じゃないかな
ダブルクリックで実行したりタスクスケジュールで定期的に実行したり出来るよ
43デフォルトの名無しさん:2011/09/27(火) 03:40:55.83
> ここでCをmove %%A "Z:\hoge\bbb\"
> で%HIRAGANA%を省くと全ての選択ファイルをbbbフォルダには移動してくれました。
> ここから先はどうすればよいのか分からないですが…

遅延展開で調べてみ
Acd /d "%%~dpA"
B2>nul "%cd:\="&set "HIRAGANA=%"

echo off で見たら
Bが上手く動いてないはずだと思うよ
だから>>40で言ったようにcall使ってサブルーチン化
4439:2011/09/27(火) 03:58:24.64
>>42>>43
わざわざありがとうございます。よく読んで勉強したいと思います。

すいません、あと、自分で言って何なんですが
文頭の「●」や「処理」をコマンドで取り込むのは
出来れば最終手段の方向でお願いします。

というのも、テキストファイルだけなら良いのですが、他にも編集する拡張子があって
それらは別のソフトで編集しながら、そこで付けたタグやメタデータから
ソートして集めて反転、これをソフトからbatにボタンでドロップして移動する頻度の方が多く
●や処理などのリネームはtxtは良いのですが他が二度手間になってしまうので…
せっかくのアドバイスに難癖をつけてしまって申し訳ありません。

ただ、とても参考になりました。echo offと遅延展開、それとサブルーチン化
dirの使い方など勉強になります。初めての事ばかりですが試行錯誤してみます。
調べてみます。ありがとうございました。
45デフォルトの名無しさん:2011/09/27(火) 04:31:47.48
@echo off
:loop
if "%~n1"=="" goto end
rem ここに処理を書く
echo %~n1

shift /1
goto loop
:end
echo end
pause
4639: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%\"
)

と書いた場合も同様でした。
私の書き方がまずいんだと思うので、なんとか頑張ってみます
ありがとうございました!
4739: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…
あぁ頭良くなりたい眠いくっそおお
4839:2011/09/27(火) 05:55:13.36
あれ!?え!どうして!!?
>>45からまた始めたのですが、さっきは失敗したのに何故か成功しました!

おそらく最初のforでinを忘れたように、何か文字が抜けてたんだと思います。
ありがとうございました!これで完璧に達成できました!
皆様本当にありがとうございました!

これでやっと寝れる・・・6時か・・・・・・眠眠打破かってきます
けど凄い嬉しい目がしゅわしゅわする
49デフォルトの名無しさん:2011/09/27(火) 13:00:34.63
バッチかWSHかで高速なAND検索って出来ないですかね?
今は単語毎にfindで探してerrorlevelを見て、全部の単語でerrorlevelが0だったら
マッチという風にやってるんですが、これが正直遅いです。
50デフォルトの名無しさん:2011/09/27(火) 16:43:32.32
findstr
51デフォルトの名無しさん:2011/09/27(火) 17:04:58.38
findstrをfindと同じ使い方をしたらもっと遅いんですが…

単純に指定しただけではOR検索になる仕様ですし、
正規表現でAND検索をやるには前後の組み合わせを変えてOR検索するという
馬鹿みたいな表記になり、2語程度が限界ですが。
52デフォルトの名無しさん:2011/09/27(火) 17:44:55.74
orのfindstr出力をfindでandする
53デフォルトの名無しさん:2011/09/27(火) 18:01:01.08
言っている事がよくわからない…

aaa bbb ccc ddd でAND検索を現状は
サブルーチンに渡して

:sub
echo %hoge% |find "%~1"
if errorlevel 1 goto :eof
shift
goto :sub

みたいなことやってるわけなんだけど…
findstrの出力をfindでandする? 2語の話じゃないですよね?
54デフォルトの名無しさん:2011/09/27(火) 18:13:28.08
最初からそれ書けあほ
ファイル処理だと思うだろがばか
環境変数の:=置換を使えぼけ
55デフォルトの名無しさん:2011/09/27(火) 18:15:45.94
ファイルの検索だったとして、結局同じだけどどういう意味だったの?
56デフォルトの名無しさん:2011/09/29(木) 17:21:21.58
ファイルの検索だったとして、結局同じだけどアホには無理
57デフォルトの名無しさん:2011/09/29(木) 18:25:24.38
多分自分で間違えてるの気付いてないんだと思うけど。
58デフォルトの名無しさん:2011/09/29(木) 21:07:11.40
>>39

for %%A in (%*) do (
set X=%%A
call move %%A %%X:\aaa\=\bbb\%%
)
59デフォルトの名無しさん:2011/09/29(木) 21:45:18.04
ドロップしたファイル名を set で取り込みたいのですが & が含まれているときに
そのファイル名全てを受け取るにはどのようにすればいいのでしょうか?
60デフォルトの名無しさん:2011/09/29(木) 22:08:31.84
ファイルかフォルダ名に空白を入れとけ
でなきゃ難しいからやめとけ
61デフォルトの名無しさん:2011/09/29(木) 22:43:26.15
そうなんですか。
別の方法あたってみます。

自分で名前をつけたなら & なんてヤな気配のする文字は使わないんですけどね……
!! とか……
62デフォルトの名無しさん:2011/09/30(金) 00:04:50.12
!もやめとけ 遅延展開で困るかも
6339:2011/09/30(金) 21:25:22.32
先日はお世話になりました。

>>58
お返事遅れてしまい申し訳ありません。どうもありがとうございました。
先ほど試してみたらこれだけで移動する事ができました!ものすごく感動しました!

そこで是非とも意味を理解したく:や=や単体での%%の使い方、またはfor %%A in (%*) do (set X=%%A
の意味を調べているのですが、なかなか見つかりません。
なので、もうこうなったらbatの優しい参考書があれば購入しようと思うのですが
何か初心者にも分かり易いものはありますでしょうか?
64デフォルトの名無しさん:2011/09/30(金) 21:39:24.06
for/?
set/?
call/?
以上で十分
65デフォルトの名無しさん:2011/09/30(金) 22:14:41.45
昔なら良書もあったが、いまどきはねぇ・・・
Webなら初心者向きHPも腐るほどあるから、お金出さずに勉強できるよ
(古い情報のまま放置のところもあるけど)
6639:2011/09/30(金) 22:36:23.51
>>64
穴が空くまで読めということですね。ありがとうございました。

>>65
Webの場合は全てのHPを行き来すれば網羅的だと思うのですが
この行き来をなくして、馬鹿な私もついていけるような前提から説明して一緒にbatを作り上げるような
そんな本であれば購入しようと思っていたのですが、古い情報だとまずかったりするのですね。
HPをめぐって勉強しようと思います。ありがとうございました。
67デフォルトの名無しさん:2011/09/30(金) 23:30:56.08
>>66
古い情報でもまずいことはあまりないのだが、cmdやコマンドもOSによっていろいろ進化しているから
昔は何行もバッチを書いていたのが今ではコマンド1発でいろいろ出来てしまうことが多々ある。
WinNT系ではWin9xまで(DOS含む)に比べて大幅に機能が拡張されているから、
HPを見つけたらいつ頃書かれたものなのか意識していくといいと思う。(書いていないことが多いが)

いまどきから始めるならバッチよりもWSHの方がいいのかなぁ・・・
68デフォルトの名無しさん:2011/10/03(月) 15:50:30.91
いまどきWSH???
69デフォルトの名無しさん:2011/10/03(月) 23:32:29.20
5.6で機能強化の止まってしまったWHSなぁ
70デフォルトの名無しさん:2011/10/04(火) 00:51:43.69
5.7だけど
71デフォルトの名無しさん:2011/10/04(火) 00:57:39.22
そやな
72デフォルトの名無しさん:2011/10/04(火) 02:04:12.37
せやな
73デフォルトの名無しさん:2011/10/04(火) 19:30:10.04
WSHだけど
爺さん婆さんみたいだな ムヒをヒムとか
74デフォルトの名無しさん:2011/10/04(火) 20:46:47.70
パンツをパンスとか
75デフォルトの名無しさん:2011/10/05(水) 20:25:02.09
初めてのプログラムでbatに挑戦したいと思うのですが
下記のような事はbatでも出来ますか?

フォルダ名が『レーベル] タイトル』のものと『タイトル』のものが沢山あり
これらの中からタイトルが殆ど一致するものを検索し、該当するフォルダについては
txtかエクセルに出力し、そこにフォルダ名とパスとサイズとファイル数を表示したいと思ってます。
よろしくお願いします。
76デフォルトの名無しさん:2011/10/05(水) 20:50:06.13
すいません、フォルダ名には他にも
『[レーベル] タイトル (ジャンル)』というものがありました。

正規表現を使って末尾から一致を探そうと思ったのですが
これはちょっと困りました・・・
77デフォルトの名無しさん:2011/10/05(水) 21:25:42.61
>>76
> タイトルが殆ど一致するものを
殆ど一致て似たものもってこと?「殆ど一致」ではなく「完全に一致」で
フォルダ名の書式が
[レーベル] タイトル (ジャンル)
[レーベル] タイトル
タイトル
が厳密に守られていて、且つ
レーベル、タイトル、ジャンルの文字に "]" "(" の文字が使われて居ないならば
やる気さえあれば出来るよ

ただこれから始めるような人には敷居がちょっと高いかもね
とりあえず"[レーベル] タイトル (ジャンル)"から
"タイトル"を抜き出す方法からやってみるといい
78デフォルトの名無しさん:2011/10/05(水) 21:41:55.24
>>77
タイトルの先頭や末尾に加えてメモが書いてあったりするフォルダもあり
また、稀にですがアルファベットや記号で半角全角など違う場合もあるので
殆ど一致であれば全てカバーできるのではないかと、そう表現しました。
フォルダ名の形式についてはタイトル以外は殆ど厳密に守られていると思いますが
タイトル(ジャンル)このように半角スペースが入ってないフォルダも結構ありました。

とりあえず敷居は高いとはいえ出来ない事はない、と聞いてやる気が湧いてきました。
ご指摘頂いた「タイトルを抜き出す方法」をまずは学んでみます。
どうもありがとうございました。
79デフォルトの名無しさん:2011/10/05(水) 22:45:45.00
> アルファベットや記号で半角全角など違う
出来るか出来ないかで言うと出来ないことってあまり無いよ
ただ、ものによっては実装するのにすごく手間がかかるので
別の言語を使うほうが楽だったりして現実的ではなかったり

if /i で大文字小文字の違いは無視して比較出来るけど
半角全角は無視出来ないから、一旦全角を半角に直して比較、、
とかならやれなくないけど面倒だね
フォルダ・ファイル名、一括リネームソフトとかで手直ししてから使うとか
もっと言えば、わざわざBATで書いて作らなくても
正規検索で "タイトル"の一致するPATHを書き出してくれる
フリーソフトを探せばあるんじゃないかな?
BAT書いてみたくて身近なネタがそれだったとかなら別だけど。
目的の為の手段としてBATで書くってなら近いフリーソフトを探したほうがいいよ

あと77の方法だけど set の環境変数の置換使って
](を区切り文字みたいに使えば楽に出来るよ
set a=%a:*]=%
うしろは一工夫すれば出来る
80デフォルトの名無しさん:2011/10/06(木) 00:37:27.69
>>79
ご丁寧にありがとうございます。
半角全角については結構大変なのですね。
batでなくても難しいみたいなので、今回は未対応で作りたいと思います。
フリーソフトでも正規検索で結果を書きだす事が可能とのことで
こちらでも検討してみます。ただ、今は正規表現さえままならない状態であるのと
今回の処理以外にもやってみたいプログラミングがあるので、まずはbat
(または他に初心者でもやりやすい言語があればそれで)でやってみます。
お気遣いありがとうございました。

また、紹介して頂いたsetなんですが、もしよろしければ質問させて下さい。
set a=%a:元=先%はどこかで見てメモしたのですが、
set a=%a:*]=%この場合には先がないですよね?この場合には
*]を%aで表現できるという事でしょうか?つまり、()の場合には
set b=%b:(*=%によって%bで表現できるとことでしょうか?

…すいません、自分で検証してみろって話ですね。失礼しました。
後はifを使って%a %b以外で一致する場合には[コマンド1]をするみたいな感じで検討してみます。
沢山のヒントをありがとうございました!
81デフォルトの名無しさん:2011/10/06(木) 00:46:04.94
すいません、凄い初歩でつまづいたのですが、どうか質問をさせてください。

まずは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
とした場合には、「アクセスが拒否されました」と表示されてしまいました。

これは何がまずいのでしょうか?こんな調子で先が思いやられますが…
どうかよろしくお願いします。
82デフォルトの名無しさん:2011/10/06(木) 01:36:09.33
> set a=%a:*]=%この場合には先がないですよね?この場合には
> *]を%aで表現できるという事でしょうか?

set a=ab]cd(ef
echo %a%
echo %a:*]=%

> set b=%b:(*=%によって%bで表現できるとことでしょうか?
*は先頭から次の文字までの一致は出来るけど
"(*"という風に後方の一致には使えない
だから一手間かかる

set a=ab]cd(ef
set b=%a:*(=%
echo %b%
call set c=%%a:%b%=%%
echo %c:~0,-1%

call set c=%%a:%a:*(=%=%% こう書けばset b要らないが
わかりにくいかと思って一旦%b%としてる
遅延展開使えばcall使わなくても出来るけど
文字列に"!"が入ってると一旦別の文字へ置換して後で戻したりとかすることになる
83デフォルトの名無しさん:2011/10/06(木) 01:42:35.54
findstr "テキスト" "bbb.txt"
84デフォルトの名無しさん:2011/10/06(木) 02:56:38.52
>>82
見よう見まねでbatを作ってみたのですが
とても分かりやすい展開で勉強になりました!
分からない行もありましたが、じっくり解読できるよう励んでみます。
ご丁寧にどうもありがとうございました。

>>83
ありがとうございます、出来ました!
batの場合は""が必要なんですね。
cdの操作はカレントディレクトリの移動が出来てないだけでした。
失礼しました。
85デフォルトの名無しさん:2011/10/06(木) 06:48:56.02
XPと7で処理を分けたい場合ってどうやればいいんですか

環境変数
OS=WINDOWS_NT
ってもうなんの意味もない気が…
86デフォルトの名無しさん:2011/10/06(木) 07:58:08.97
ver
87デフォルトの名無しさん:2011/10/06(木) 14:53:12.95
>>82
昨日はありがとうございました。
もう殆ど答えを頂いていたのですが、あれから何回も見直して
大方を理解すると共に、cdの抜き出しに成功できました!

set a=ab]cd(ef
echo %a%
set b=%a:*(=%
echo %b%
call set c=%%a:%b%=%%
echo %c%
set d=%c:~0,-1%
echo %d%
set e=*]
echo %e%
call set title=%%d:%e%=%%
echo %title%
pause

後は上記の1行目を
set full=%1
echo %full%
set a=%full:*\=%
に変えたらドロップしたフォルダ名からも抽出できました!

今はifとforを調べているのですが
もしよろしけば次にやるべきことを教えて頂けないでしょうか?
どうかよろしくお願いします。
88デフォルトの名無しさん:2011/10/06(木) 17:29:01.73
すいません、出来たと思っていたのは
"[ab] cd (ef)"ネームのフォルダだけでした。
"[ab] cd"の場合には別途それに合うbatでないと駄目でした。また、
set full=%1
set a=%full:*\=%
とさっきは書きましたが、これは後の*]で運よくパスを削って貰っていただけで
"cd"ネームのフォルダには対応できませんでした。
どうすればsetにフォルダ名だけを載せれるかわかりません。
それも問題ですが他にも頓挫してる場所がありまして
もしよろしければダメ出しをして頂けると嬉しいです。
以下に作ってみたbatを書きます。もしお手数でなければ診てやって下さい。
よろしくお願いします。連投すいません。
89デフォルトの名無しさん:2011/10/06(木) 17:31:57.91
"abcdef.bat"
set full=%1
set a=%full:*\=%
set b=%a:*(=%
call set c=%%a:%b%=%%
set d=%c:~0,-1%
set e=*]
call set title1=%%d:%e%=%%
echo %title1%
rem ↑ここまでさっきと同じ。[ab] cd (ef)ネームの場合だけ成功。"[ab] cd"ネームの場合はここまでくる途中で既にボロボロになってるので、そのボロボロを一回放棄(null?どうやって挟む?)が↓のためになるのか検討中。
if i not exist %title1% (call abcd.bat) else call hikakuj.bat
rem 他のbatに渡らない。今は↑を試行錯誤中

"abcd.bat"
set full=%1
set a=%full:*\=%
set b=*]
call set title2=%%a:%b%=%%
echo %title2%
rem ここまでは[ab] cdネームであれば成功。以下略失敗
if i not exist %title2% (call cd.bat) else call hikaku.bat

"cd.bat"
rem そもそも失敗
set full=%1
set title3=%full:*\=%
echo %title3%
if i exist %title3% (call hikaku.bat)

"hikaku.bat"
rem まだ渡ってさえいない
if i %title1%==%title2% ()改行if i %title1%==%title3% ()改行if i %title2%==%title3% ()
90デフォルトの名無しさん:2011/10/06(木) 19:30:24.24
とりあえず "コマンド バッチ" でググれ
あと
set /?
for /?
if /?
call /?
くらいはよく読んでわからなければ試してどういう動作になるか確認して覚えれ

バッチにドロップしたフルパスの取得とフォルダ名の取得は
set DPATH="%~1"
set DNAME="%~nx1"
文字列は常に""で囲まれるようにしないと
バッチの中で特別な意味のある"&"なんかの文字が含まれていた場合、誤動作してエラーになる
そういった対処しながら"タイトル"を抜き出そうとすると
set b=%a:*(=% は set b="%a:*(=% こうなったり。削る側の外側に"を置く。
set d=%c:~0,-1% は set d=%c:~0,-2%" 他にも細かく変更が必要
](があったりなかったりする場合は該当の文字があるかないか判別して
あれば処理をする。といった判定処理が必要になってくる
"[レーベル] タイトル (ジャンル)"
"[レーベル] タイトル "
" タイトル "
"タイトル"
処理の流れとしたらこんな感じかな
最後に" タイトル "の先頭末尾 (実際には2文字目と後ろから2文字目) が
" 半角空白" " 全角空白"かを判定して真なら削ってループ。偽なら抜ける。
で"タイトル"の取得完了
echo on にして途中で echoして pause入れて確認したりとかしながらがんばれ

複数のパス渡して"タイトル"の重複を比較するとなると
"フルパス" "タイトル"を関連付けて環境変数に保持することになるから動的な配列とかかな
http://d.hatena.ne.jp/jak-san/20090308/1236501217
この辺参考になるかもね
91デフォルトの名無しさん:2011/10/06(木) 21:00:10.20
>>90
とても為になるアドバイスをありがとうございました。
未だ変数、装飾子、文字列の区別も曖昧ですが、今後は文字列を意識して見ていきたいと思います。
また、%~nxは名前.拡張子の表示だと思っていたのですが、フォルダにも使えるのですね!
そして、私は%1なら""付きだからと安心していたのですが、%~1でこれを""で囲った方が良いのですね。
今後はそのようにします。そして](の判定ですね。上記を修正したら取りかかりたいと思います。
紹介頂いたURLまでたどり着けるように頑張ります。どうもありがとうございました。
92デフォルトの名無しさん:2011/10/06(木) 21:21:41.03
>>91
"タイトル"同士を厳密に比較出来なくて良くて
対象フォルダが全て同じフォルダにある
パスの書き出しのみ
というエクスプローラーで検索と変わらないようなので良ければもっと簡単に出来るよ

c:\test\music 以下にあるなら
dir /ad /b /s "c:\test\music" | find "タイトル"

この結果をテキストに整形しながらリダイレクトするとかでリスト化は可能かな
93デフォルトの名無しさん:2011/10/06(木) 22:34:23.34
入力上call set c=%%a:%b%=%%
画面上C:\test\juufuku>call set c=%a:"甲乙&&!!?)"=%
なのにecho %c%をすると
"[あああ] aaa (甲乙&&!!?)"削れてない・・・orz
call set c="%%a:%b%=%%だと認識されないしset b="%a:*(=%との違いが分からないや…
明日set /?から"を探してみよう。
この説明もtxt出力出来れば楽に見れるんだけどな・・・それも明日にしよう

>>92
"タイトル"を抜き出す事が出来ましたらさっそくやってみます。
私には今の段階でもかなりキツいので、ここらへんが潮時なのかもしれません。
渡りに船になればよいのですが、ご紹介ありがとうございました。
94デフォルトの名無しさん:2011/10/06(木) 23:25:49.60
>>93
%変数:置換文字列=置換後文字列%

set a=abcdef
echo %a:ab=123%
echo %a:ab=%

call set c=%a:"甲乙&&!!?)"=%
これだと置換する文字列は「"甲乙&&!!?)"」
(「」は含まず。以下も同じ)
%c%が 「"[あああ] aaa (甲乙&&!!?)"」
だとすると
「甲乙&&!!?)"」なら存在するが
「"甲乙&&!!?)"」は存在しない

call set c=%%a:%b%=%%
%b%の文字列を""で囲みつつ""を外して使いたいなら
%b:~1,-1%
こう直せばいい
call set c=%%a:%b:~1,-1%=%%

> この説明もtxt出力出来れば楽に見れるんだけどな
set /? >sethelp.txt
リダイレクトでテキストファイルに書き出せばいい
95デフォルトの名無しさん:2011/10/06(木) 23:26:46.18
"あいう" と書いた時に認識されてるのは「あいう」という文字列ではなく
「"あいう"」という文字列

%a:"あいう"=% で置換されるのは 「123"あいう"えお」であり
「123あいうえお」には反応しない
96デフォルトの名無しさん:2011/10/07(金) 16:45:46.83
>>94-95
ありがとうございます。もの凄く分かりやすかったです。

echo %a%→"[あ&あ] a&a (甲&乙)"  "も普通の文字
echo %b%→        "甲&乙)"  "も普通の文字

%b%の「"甲&乙)"」は%a%で存在(完全一致)しないので%a%から%b%は検出できない
なので、%b%を「甲&乙)」の形にして、完全一致にもっていく。と理解しましたが
どうした訳か上手くいきません・・・orz

rem フォルダ名「[あ&あ] a&a (甲&乙)」これを↓のbatにマウント
set a="%~nx1"
echo %a%
set b="%a:*(=%
echo %b%
1、call set c="%%a:%b:~1,-1%=%%
→C:\test\juufuku>call set c="%a:甲&乙)=%
2、call set c="%%a:%b~1%=%%
→C:\test\juufuku>call set c="%a:甲&乙)"=%
1&2、echo %c%
→C:\test\juufuku>echo
→ECHOは <ON> です。
1&2、rem %c%←この場合はC:\test\juufuku>remとしか表示されす、以降のコマンドもバグッたままでした。

helpを入手しました。どうもありがとうございました。
97デフォルトの名無しさん:2011/10/07(金) 18:05:02.34
@echo on
setlocal disabledelayedexpansion
set a="[あ&あ] a&a (甲&乙)"
set b="甲&乙)"
set b=%b:&=^&%
call set c=%%a:%b:~1,-1%=%%
echo %c%
pause
exit /b
98デフォルトの名無しさん:2011/10/07(金) 18:59:13.39
>>97
"タイトル"を無事に抜けました!
とりあえず困った時は&を^&にしてみます!ありがとうございます!
ただ、紹介頂いたコマンドでは遅延展開をsetlocalで無効とのことでしたが
私の方ではそれを外してしまいました。遅延展開が良く分からないので調べてみます。

::成功
rem :ABCDEF
set a="%~nx1"
echo %a%
set b="%a:*(=%
echo %b%
set b=%b:&=^&%
echo %b%
call set c=%%a:%b:~1,-1%=%%
echo %c%
set d=%c:~0,-3%"
echo %d%
call set title1="%%d:*] =%%
echo %title1%
→"a&a"
rem goto END
pause

今からifで"[レーベル] タイトル"と"タイトル"を頑張りたいと思います。
ただ、昨日もとりあえず&がないバージョンでやってみたんですが
if /i exist "](" (goto ABCDEF) else (goto ABCD1)
この"]("や"]"では判別がうまくいきませんでした。
とりあえず専念してみます。ほんとうにありがとうございました。
99デフォルトの名無しさん:2011/10/07(金) 20:39:45.92
発想を変えてforから%title1,2,3%を抜こうと思ったのですが
@echo on
setlocal disabledelayedexpansion
for /D %%X in (*]*"("*) do (
echo a="%%~X"
set a="%%~X"
echo %a%
set a=%a:&=^&%
echo %a%
)
pause
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の(セット)みたいに出来ないか検索中です。
方向性が合っていれば良いのですが…どうかよろしくお願いします。
100デフォルトの名無しさん:2011/10/07(金) 21:02:23.01
すいません、書き方が間違っていました。
正確にはこうでした。
http://www.dotup.org/uploda/www.dotup.org2111896.jpg
101デフォルトの名無しさん:2011/10/07(金) 21:51:38.52
@echo on
setlocal disabledelayedexpansion
set DNAME="[あ&あ] a&a (甲&乙)"
echo %DNAME%|find "(" 1>nul
if errorlevel 1 ( set DTITLE=%DNAME%
) else ( call :DEL_GENRE )
echo %DTITLE%|find "]" 1>nul
if not errorlevel 1 ( set DTITLE="%DTITLE:*]=%
)
call :DEL_SPACE
echo %DTITLE%
pause
exit /b

:DEL_GENRE
set DGENRE="%DNAME:*(=%
set DGENRE=%DGENRE:&=^&%
call set DTITLE=%%DNAME:%DGENRE:~1,-1%=%%
set DTITLE=%DTITLE:~0,-2%"
exit /b

:DEL_SPACE
rem DTITLE前後の空白文字削除処理
exit /b

"[あ&あ] a&a 甲&乙)" も "[あ&あ a&a (甲&乙)" も大丈夫だが "[あ&あ a&a 甲&乙)" は失敗する
"[あ&あ a&a 甲&乙" だと大丈夫だから ")" のみだとマズいのかも。よくわからん
102デフォルトの名無しさん:2011/10/07(金) 22:18:03.36
>>101
こんなに沢山書いて頂いて本当にありがとうございます!
findと1>nulとif errorleve 1さらにcallまで使用して頂いて
とても勉強になります!よく意味を調べて
使えるようになった上で適応させてみます!
こんなコマンドがあったんですね!盲目になってました。
今日は寝るまで>>101のコマンドを解読しようと思います。
ご丁寧にどうもありがとうございました!
103デフォルトの名無しさん:2011/10/08(土) 01:58:10.42
>>101
> "[あ&あ a&a 甲&乙)" は失敗する
if not errorlevel 1 ( set DTITLE="%DTITLE:*]=%
)
これがダメ

if not errorlevel 1 ( call :DEL_LABEL )
call 使ってここもサブルーチン化
104デフォルトの名無しさん:2011/10/08(土) 02:40:16.51
if not errorlevel 1 set DTITLE="%DTITLE:*]=%
()使わなければいいんじゃねーの?
callしといたほうが無難そうだけどな
10536:2011/10/08(土) 03:29:47.11
すいません、質問なんですが
batって最大でいくつくらい同時に起動しても大丈夫でしょうか?

batとは関係ないのですが
以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度)
どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして…

同時起動するbatについては処理中には特にPCも重くならないのですが
先のD&Dのような破損やバイナリが変わったらどうしようと思い質問しました。
bat自体の数は1つで下記になります。>>45さんに作って頂いたものです。
@echo off
:loop
if "%~n1"=="" goto end
cd /d "%~dp1"
2>nul "%cd:\="&set "HIRAGANA=%"
move %1 "Z:\hoge\bbb\%HIRAGANA%\"
echo %~n1
shift /1
goto loop
:end
echo end
pause

使っているソフトウェアからファイルをこのbatに送る際
ソフトウェアの制約で複数ファイルを送る場合には
その複数ファイル個分だけこのbatを多重起動させる必要があるのです。
batを起動できる個数は設定上Simultaneous runs;Unlimitedで無制限ですが
今は不安なので5個程度、10個以上の場合は実際のbatにソフトウェア上からドロップしています。
ファイルは1つ50MB程度で、同一ドライブ内での移動になります。

何か思い当たるところがありましたらコメントを頂けると助かります。
それではどうかよろしくお願いします。
106デフォルトの名無しさん:2011/10/08(土) 05:10:28.71
> batって最大でいくつくらい同時に起動しても大丈夫でしょうか?
OSの仕様や搭載メモリ容量によるかもしれんし俺にはよくわからん。すまんね

> 以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度)
> どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして…
firefilecopy使え
ベリファイ出来るしcuiからも使えるからbatに組み込むことも出来る

> 使っているソフトウェアからファイルをこのbatに送る際
> ソフトウェアの制約で複数ファイルを送る場合には
> その複数ファイル個分だけこのbatを多重起動させる必要があるのです。
パスひとつずつbatに送ってるならもしかして上のスクリプト意味無いんじゃないの?
その「使っているソフトウェア」とやらのサポートかスレで聞け
10736:2011/10/08(土) 07:55:45.20
>>106
いえいえ、とんでもないです。
firefilecopyちょっと実験してみます。

ちなみにPCスペックは下記になります。
CPU core2cuo 2.9GHz
メモリ 4G
OS  vista 64bit

>上のスクリプト意味無いんじゃないの?
複数用のbatで1つだけファイルを処理しているので、全く意味が無いわけでは無いですが
殆ど無駄になっている感じではあります。せっかく皆様に教えて頂きながら作ったのに
こちらこそ申し訳ないです。ただ、ソフトウェア上から送る場合にはbat複数起動ですが
ソフトウェア上から実際のbatにD&Dする場合にはbat1つだけ起動して処理できています。
ただ、これが多少おっくうなので、送るボタン(複数起動)で処理したく伺わせて頂いた次第です。
ありがとうございました。
108デフォルトの名無しさん:2011/10/08(土) 08:36:49.94
>>107
@echo off
if not exist "%~1" goto :eof
set fpath="%~1"
move %fpath% %fpath:\aaa\=\bbb\%

それならこれだけでOK
ffc.exe使うならmoveと差し替えて適切なコマンドラインスイッチを追加
109102です!出来ました!:2011/10/08(土) 12:16:55.81
set DNAME="フォルダネームを手入力"については全て問題なく?出来ました。
しかし、ドロップしたフォルダについては"タイトル"(&入り)だけ出来ませんでした。
名前がabc&defだとしたら、一番最初のset DNAME="%~nx1%"で&の手前のabcまでしか入らないみたいでした。
何度も晒して恐縮なんですが、また暫定のbatを下記に書いておきます。
もしよろしければアドバイスを頂るとありがたいです。

@echo on メイン
setlocal disabledelayedexpansion
set DNAME="%~nx1%"
echo %DNAME%|find "(" 1>nul
if errorlevel 1 ( set DTITLE=%DNAME%
) else ( call :DEL_GENRE )
echo %DTITLE%
echo %DTITLE%|find "]" 1>nul
if not errorlevel 1 ( call :DEL_LABEL )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_SFARST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_BFARST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:". .$" 1>nul
if not errorlevel 1 ( call :DEL_SLAST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:". .$" 1>nul
if not errorlevel 1 ( call :DEL_BLAST )
echo 完成したタイトル=%DTITLE%
pause
exit /b
110続き:2011/10/08(土) 12:19:50.67
:DEL_GENRE
set DGENRE="%DNAME:*(=%
set DGENRE=%DGENRE:&=^&%
call set DTITLE=%%DNAME:%DGENRE:~1,-1%=%%
set DTITLE=%DTITLE:~0,-2%"
exit /b

:DEL_LABEL
set DTITLE="%DTITLE:*]=%
exit /b

:DEL_SFARST
set DTITLE="%DTITLE:~2%
exit /b

:DEL_BFARST
set DTITLE="%DTITLE:~2%
exit /b

:DEL_SLAST
set DTITLE=%DTITLE:~0,-2%"
exit /b

:DEL_BLAST
set DTITLE=%DTITLE:~0,-2%"
exit /b

また、現在はいよいよbatクリックでその階層に表示されている、全てのフォルダから"タイトル"を抜く処理に取り掛かっているのですが、これもうまいこといきません。例えば3行目を
for /D %%X in (*) do (  改行 set DNAME="%%~X"
に置き換えて、forの〆である「)」をどこにおけば良いのか試行錯誤してるのですが未だ成功しません。また、他には3行目に
for /D %%X in (*) do ( call :LOOP ) 改行 pause 改行 exit /b 改行 改行 :LOOP 改行 set DNAME="%%~X"
と置き換えてみましたが、%~X自体が無効になってしまいました。ホント質問ばかりで恐縮なんですが、どうか叱咤ご鞭撻のほどよろしくお願いします。
111デフォルトの名無しさん:2011/10/08(土) 12:29:40.60
DEL_(S,B)FARSTなんて言葉ないですね、デリート(スモール、ビック)FIRSTの意味です。それと

>>103,>>104
ありがとうございます。さっそく使わせて頂きました。

何度も連投して申し訳ないのですが、もう少しの間だけお相手お願い致します。
112デフォルトの名無しさん:2011/10/08(土) 13:48:37.77
> ドロップしたフォルダについては"タイトル"(&入り)だけ出来ませんでした。
パスにスペースが無くて&が入ってるとwinのドロップハンドラが""で囲まずにパスを送るからそうなる。winの仕様
例えばdirの結果から使うとか該当ディレクトリにcdしてfor(*)で受け取るとか別の方法考えたほうがいい
どうしてもドラッグドロップから使いたいのなら%cmdcmdline%から引数を受け取るという方法があるけど
これらのキーワードからどうすればいいか自分で思い付けないようであればやめといたほうがいい
簡単な解決策としてはパスにスペースを入れること
c:\test\music以下にあるとしたらc:\test\X music X
とか上位のディレクトリにスペース入れれば、「たぶん」問題なくなる

> :DEL_SFARST
> set DTITLE="%DTITLE:~2%
> exit /b
> :DEL_BFARST
> set DTITLE="%DTITLE:~2%
> exit /b
全く同じ処理してるんだからサブルーチン分ける必要ない
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_SFARST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_SFARST )
私ならif "%DTITLE:~1,1%"==" " とかで判定してgotoでループさせるかな
スペースひとつとは限らないし。位置も特定されたものを判定だから。

> )」をどこにおけば良いのか試行錯誤してるのですが未だ成功しません。
> for /D %%X in (*) do (  改行 set DNAME="%%~X"
いきなり本番書き上げようとせずにtest.batとか作って必要最小限で構文試せ
echo が基本
for /D %%X in (*) do (echo "%%~X"
せめてロジックを思い付けれるくらいにはコマンドの動作を理解したほうがいい。丸暗記する必要は全く無いが
どんなコマンドがあるとかコマンドの説明書いてるサイトやリファレンスを一通り読んで
コマンドごとに簡単なものを書いてみて、もう少し理解を深めることを勧める。forの中でしかfor変数は使えない
113デフォルトの名無しさん:2011/10/08(土) 15:19:37.10
>>112
骨身に沁み入ります。善処します。
上位のディレクトリに"タイトル(&入り)"を挟んだところ、正常に処理が出来ました。
ラベルを同一にすればよかったのですね。そこまで気が回りませんでした。
>if "%DTITLE:~1,1%"==" "これならかなり絞り込めますね。
先のfindやifの流れから、練習問題として捉えてました。
正規表現に浮かれて盲目になっていたのもありますが、とても参考になりました。
しばらくgotoとforのサンプルをechoを使いながら見てみます。

身の丈に合わない早歩きで不愉快な思いをさせてしまい申し訳ありませんでした。
そしてご丁寧にどうもありがとうございました。
114デフォルトの名無しさん:2011/10/08(土) 19:52:00.13
>>109の3行目を下に置き換えたら成功しました。
また、簡単なものですがソートもさせてみました。

for /D %%X in (*) do (
echo "%%~X"
set DNAME="%%~X"
call :MAIN %DNAME%
)
sort aaa.txt >bbb.txt
del aaa.txt
pause
exit /b

:MAIN
echo %DNAME%
rem ここまで
rem 以下MAINの下から2行目を置換え
echo "%DTITLE:~1,-1% 「Tab*2」 ¥%DNAME:~1,-1%" >>aaa.txt

次はタイトルが同じものだけをサブディレクトリに入れるような
そーゆうコマンドに調整していこうと思います。
とりあえず一段落ついてホッとしました。サポートをして頂いた皆様に感謝します。
どうもありがとうございました。
115デフォルトの名無しさん:2011/10/08(土) 20:56:39.36
> for /D %%X in (*) do (
> echo "%%~X"
> set DNAME="%%~X"
> call :MAIN %DNAME%
> )
@echo off
for /d %%X in (*) do ( call :MAIN "%%~X" )
pause
exit /b
:MAIN
echo %1
exit /b
callに引数付けてサブルーチンに送るならサブルーチンでは%1で受け取る
call :MAIN "%%~X" "YY" "ZZ"とか複数送る場合は%1,%2,%3...となる

@echo off
for /d %%X in (*) do ( set DNAME="%%~X"
call :MAIN
)
pause
exit /b
:MAIN
echo %DNAME%
exit /b
環境変数にセットするならサブルーチンでも変数名で使える
用途に応じて使いやすいほうを。

set の文は末尾にスペースが入ったりする場合もあるから改行で終わるようにしたほうが無難
改行で終われない場合でスペースが入らない書き方が出来てるか確認するには
echo %DNAME%%DNAME%
とかで二つ重ねてechoしてみればわかる
116デフォルトの名無しさん:2011/10/08(土) 22:48:56.39
sortはリダイレクトでファイルに出力した場合は
自分自身をソートするという使い方は出来ないけど
/o で出力した場合は自分自身もソートできる。

リダイレクトして元ファイルを削除するなんて事をしなくてもいい。
117デフォルトの名無しさん:2011/10/08(土) 23:09:11.12
ソートはしらなんだ
118デフォルトの名無しさん:2011/10/08(土) 23:12:00.92
type aaa | find "aaa" | sort /+1000000 /o aaa
119デフォルトの名無しさん:2011/10/10(月) 06:31:34.40
カーナビのmp3の再生順序が、ファイル名や更新日時などではなく
FATテーブルに書き込まれている順序で再生されるのですが、
この並び順を変える良い方法はありませんか?
120デフォルトの名無しさん:2011/10/10(月) 08:15:04.51
一昨日のあれから"タイトル"が重複するフォルダの移動に取り掛かっているのですが
全くうまくいかずに心が折れました。色々試したつもりではあるのですが…
もしよろしければ、次に何をすべきか、どう組み立てるべきかご教示願えないでしょうか?

>>90さんに紹介頂いた配列変数や、>>115さんに教えて頂いたcall :ラベル 複数→%1,%2%3
これを活用できないかと考えてはみたのですが、私の力では想像が足りませんでした。
せっかく紹介して頂いたのに申し訳ありません。

どうか智慧をお貸し下さい。お願いします。
121デフォルトの名無しさん:2011/10/10(月) 10:05:15.18
>>120
結局どうしたいの?
重複がわかりやすくなって簡単な方法であれば
フォルダ名を "[レーベル] タイトル (ジャンル)"→"タイトル [レーベル] タイトル (ジャンル)"
とか元のフォルダ名の前にタイトル追加すれば綺麗に並ぶ
"タイトル"tab"ディレクトリパス" とテキストにリスト化することだって出来るし
ディレクトリを "\タイトル\[レーベル] タイトル (ジャンル)\" と
タイトルフォルダ作ってそこへコピーすることだって出来る
それに重複「だけ」にこれらの操作を適用するのか全てのディレクトリに適用するのかとか
(もちろん面倒なのは「重複だけ」の方) 全てに適用でタイトルフォルダへコピーなら
タイトルを比較する必要もなくなる
前にも書いたけど厳密に比較でなく乱暴でよければ
dirの結果を"タイトル"でfindしてその結果を"タイトル"フォルダへコピーとかなら
全ての対象フォルダからタイトル抜いて配列orリスト.txtにして"タイトル"を比較とかしなくて済む

方法なんていくらでもあるしやろうと思えば出来るから。
ただ、あなたがどうしたいかによってやり方や難易度は全然変わってくるので
どういう動作をさせる&させたいのかはっきりしてくれないとこの先はアドバイスしようがないよ
122デフォルトの名無しさん:2011/10/10(月) 10:14:30.08
>>119
それがわかってるなら再生させたい順で転送しなおせば?
あとそれってバッチは関係あるの?
123デフォルトの名無しさん:2011/10/10(月) 10:33:58.09
>>121
様々なプランを提示して頂いてありがとうございます。
具体的にやりたい事は、C:\test\juu fuku\ここでbatを実行し
この階層にある全てのフォルダ(フォルダネームは弄らない方向で)を対象に
タイトルが重複するものだけを、C:\test\juu fuku\該当\に移動できるようしたいと思ってます。

面倒になってしまい恐縮ですが、ひとつよろしくお願いします。
124デフォルトの名無しさん:2011/10/10(月) 21:13:00.51
1つ目の方法
titlelist.txtに"C:\test\juu fuku"配下のフォルダを対象に"タイトル" "フォルダ名"書き出し
titlelist.txtから"C:\test\juu fuku\該当"の行を削除
ここからループ処理
titlelist.txtから1行目が読み込めなければ終了処理
titlelist.txtから1行目の"タイトル"を読み込んで find /c """タイトル""" "titlelist.txt"
結果が1ならtitlelist.txtから1行目を削除してループに戻る
結果が2以上ならfind """タイトル""" "titlelist.txt"の結果をforで2番目のtoken抜き出して"フォルダ名"を順に取り出し
move "C:\test\juu fuku\フォルダ名" "C:\test\juu fuku\該当\フォルダ名"
titlelist.txtから"タイトル"の行を削除してループに戻る

2つ目
一度全てのフォルダを"C:\test\juu fuku\該当\タイトル\フォルダ名"とする
"C:\test\juu fuku\該当\"でdir /ad /bとかで"タイトル"フォルダ名を
forで順に取得してdirで"タイトル"フォルダ配下のフォルダ数を判定
"タイトル"フォルダ以下にフォルダがひとつであれば
"C:\test\juu fuku\フォルダ名"へ移動
ふたつ以上ならそのまま
上の処理が終わったら"C:\test\juu fuku\該当\タイトル\フォルダ名"を
"C:\test\juu fuku\該当\フォルダ名"へと移動して終了

他にも方法はいくらでもあるだろうけどとりあえずこんなところかな。
2つ目の方が簡単だけどコピーする数増えるしコピーで壊れる確率も増える
ベリファイする処理混ぜるとかコピーに>>106が言ってたfirefilecopy使ってベリファイするとかすればいい

自分で無理そうならこちらへ
気軽に「こんなソフトありませんか?」 Part.141
http://hibari.2ch.net/test/read.cgi/software/1315320625/
◆こんなソフトウェアつくってください〜Part16〜◆
http://hibari.2ch.net/test/read.cgi/software/1316551791/
125デフォルトの名無しさん:2011/10/10(月) 22:12:28.47
> 2つ目
> 一度全てのフォルダを"C:\test\juu fuku\該当\タイトル\フォルダ名"とする
"C:\test\juu fuku\TMP\タイトル\フォルダ名"
とかのほうがいいな
一旦全てを"C:\test\juu fuku\TMP"へ移動
そこから
"C:\test\juu fuku\Not juufuku"と"C:\test\juu fuku\該当"へ振り分ける感じで
まあ処理がわかりやすくなれば分けるフォルダ名はなんでもいいよ
126デフォルトの名無しさん:2011/10/11(火) 00:02:59.36
質問者は >>80 を見るとバッチファイルにこだわっているわけではないようだし
テンプレにも「※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。」とあるように
他の言語を使ったほうがいいんじゃないか?
そもそもバッチファイルによる高度なプログラミングは初心者向きではなく、職人芸みたいな感じだし
127デフォルトの名無しさん:2011/10/11(火) 00:05:54.23
>>124,>>125,>>126
ありがとうございます。挑戦させて頂いたのですが
またもや分からない点が溢れだしました。

しかし、これ以上私のレスでここを埋めてしまうのも忍びないので
一度、誘導して頂いたスレッドで依頼してみます。
ただ、並行して1つ目は理解できるよう挑戦していきたいと思います。

それとWSHについてもROMってみるとよく話題にのぼっているので
私も調べてみます。どうもありがとうございました。
128デフォルトの名無しさん:2011/10/11(火) 15:45:30.09
自分も>>101を試してみようとそのままbatにしてみたのですが
echo %DNAME%|find "(" 1>nul
find: invalid expression; expected to find a ')' but didn't see one.
Perhaps you need an extra predicate after '('
このように表示されてしまいました。

おそらく自分だけ?だと思うので何か環境がまずいのだとは思うのですが
何がまずいんでしょうか?winXPを使ってます。
129デフォルトの名無しさん:2011/10/11(火) 16:44:47.21
find/?
where find
130デフォルトの名無しさん:2011/10/11(火) 17:24:09.98
>>129
find /?さえ開けない・・・
コマンドプロント開いて%PATH%打ったらどう表示されますか?
多分ここが違うものに変更されて出来なくなったのかなぁ
131デフォルトの名無しさん:2011/10/11(火) 17:54:01.17
for %I in (find.exe) do echo %~$PATH:I
132デフォルトの名無しさん:2011/10/11(火) 18:09:54.10
>>131
実行したら
C:\Ruby192\bin\find.exe

になりました。Ruby192は今日インストールしたやつです。
これからどうすればよいのでしょうか?
133デフォルトの名無しさん:2011/10/11(火) 18:43:25.57
>>129
where findってそーゆうことだったんですか
てっきり英語で聞いてるのかと思ってました、ごめんなさい。

where find
C:\Ruby192\bin\find.exe
C:\Windows\System32\find.exe

これ2つあるからRuby192の方のfind.exe削除しちゃって大丈夫ですかね?
削除しようとしても削除できなったんですけども。

とりあえず環境変数PATHの並び順をRubyの方を%SystemRoot%の後にしてみたら
とりあえずうまくいきました。これで問題ないですかね?
134デフォルトの名無しさん:2011/10/11(火) 18:44:40.72
そもそもなんでrubyの方が前に来てるんだよ
135デフォルトの名無しさん:2011/10/11(火) 18:53:36.18
別にPATHに頼らんでも
C:\Ruby192\bin\find.exe
C:\Windows\System32\find.exe
で好きなほうが使えるだろw
そんなことも知らなかった?
136デフォルトの名無しさん:2011/10/11(火) 19:16:28.07
>>134
なんかインスコする時PATHがどうこうチェックしたったら前になったったった

>>135
知らないボクに教えて下さい><どうやるんです?
137デフォルトの名無しさん:2011/10/11(火) 19:19:35.88
> 自分も>>101を試してみようとそのままbatにしてみたのですが
おまえ>>127だろ?なんで別人のフリしてんの?
http://hibari.2ch.net/test/read.cgi/software/1316551791/88-98
138デフォルトの名無しさん:2011/10/11(火) 19:24:39.25
>>137
そのスレで知って来たんですけど別人です
139デフォルトの名無しさん:2011/10/11(火) 19:31:12.09
そもそもRuby入れてどうするのさ
140デフォルトの名無しさん:2011/10/11(火) 19:40:25.44
>>139
なんか色々使いまわしできそうなフリーソフトの内容だったから自分も欲しくなって。
Rubyのソース貼ってあったしちょっとやってみようかなと入れて見ました。
141デフォルトの名無しさん:2011/10/11(火) 19:45:44.76
>>136
>>135に書いてあるだろボケ
142デフォルトの名無しさん:2011/10/11(火) 19:56:13.96
バッチも使えないのがRubyなら使える?
143デフォルトの名無しさん:2011/10/11(火) 20:49:01.35
>>140
人のマネするなら真摯な受け答えと学習の姿勢も見習った方がいいぞ。
144デフォルトの名無しさん:2011/10/11(火) 21:22:07.29
>>143
> 学習の姿勢も見習った方がいいぞ。
誰を見習うの?>>127のことを言ってるのならあいつ学習なんてしてなかったと思うが。
あいつが動かないって言って貼ったやつ見たらほとんど試してねーのまるわかりじゃん。
教えたがりのバカもほどほどにしろよと。
http://hibari.2ch.net/test/read.cgi/software/1316551791/88
> 途中までbatで皆様の助けを得ながら作りましたので
> "タイトル"の抜き出しまでですが
とか言ってるけど>>101>>103がまるまる書いたんじゃねーかよw
145デフォルトの名無しさん:2011/10/11(火) 22:03:54.50
まあ、重複を調べるなら初めから他の言語で教えたほうが良かったんじゃとは思う
146デフォルトの名無しさん:2011/10/12(水) 00:01:52.28
>>144
本当にその通りだと思います。言葉の綾にしても酷すぎました。

>>101さんと>>103さん、申し訳ありませんでした。
そしてもう一度、ありがとうございました。

また、お陰様で依頼の品を作って頂く事が出来ました。
紹介して頂いた>>124さんありがとうございました。

最後に、今までの長きに渡りご指導を頂きました皆様に感謝します。
無知な私に時には厳しく、時には易しく教示して頂いた事を忘れず
これらも精進していけたらと思います。本当にありがとうございました。

それでは失礼します。
スレをかき乱してしまい申し訳ありませんでした。
147デフォルトの名無しさん:2011/10/12(水) 23:36:51.13
rem >>114のpauseに下記を代入
md "[重複フォルダ]"
set DPATH="%~dp0"
for /f "delims=, tokens=1,2" %%i in (bbb.txt) do call :sub %%i %%j
for /f "delims=," %%k in (ccc.txt) do call :last "%%~k"
del bbb.txt&del ccc.txt

rem >>110の最後に下記を挿入

:sub
set DNAME=%2
for /f "tokens=1-3" %%a in ('find /c ""%1"" "bbb.txt" ^|find "-"') do (
if %%c==2 echo "%DNAME:~1,-1%",>>ccc.txt
)
exit /b

:last
set DMOVE=%1
move "%DPATH:~1,-1%%DMOVE:~1,-1%" "%DPATH:~1,-1%[重複フォルダ]\"
pause
exit /b

これで重複フォルダのみを移動する事ができました。
教えて頂いたせめてもの誠意として、完成品を書きました。
他にも欲しいとおっしゃる方がいましたので、もしよろしければ使ってみて下さい。

本当は>>124さんに教えて頂いたものをそのまま書きたかったのですが
私の力では理解が足りず、再現することが出来ませんでした。しかし、大変為になるロジックばかりで
このコマンドを作成するにあたり大変お世話になりました。改めてありがとうございました。
それでは失礼しました。
148デフォルトの名無しさん:2011/10/12(水) 23:50:38.95
192.168.0.1という文字列を引き渡して、最後の1だけを254に
置き換えたいのですが、どうやったらできますでしょうか?
forを使ってやってみたのですが、うまく置き換えられません。
よろしくお願いします。
149デフォルトの名無しさん:2011/10/12(水) 23:51:22.22
>>147
動かないです><
150デフォルトの名無しさん:2011/10/12(水) 23:56:17.44
>>148
set a=192.168.0.1
echo %a:~0,-1%254
151デフォルトの名無しさん:2011/10/13(木) 00:03:12.90
>>149
すいません、忘れてました。>>109のpauseに下記を代入してください。
echo "%DTITLE:~1,-1%","%DNAME:~1,-1%">>aaa.txt
これで多分大丈夫だと思います。
152デフォルトの名無しさん:2011/10/13(木) 00:20:07.61
set a=192.168.0.1
set b=254
for /f "tokens=1,2,3,* delims=." %%A in ("%a%") do set c=%%A.%%B.%%C.
echo %c%%b%
pause
exit /b
153デフォルトの名無しさん:2011/10/13(木) 22:35:06.20
>>148
これだと一桁しかダメでした。説明不足ですみません。

>>152
うまくいきました!ありがとうございました。
154デフォルトの名無しさん:2011/10/14(金) 19:58:12.44
set a=!?-,.、。!?〜ー☆#♪
for %%x in (! ? - , . 、 。 ! ? 〜 ー ☆ # ♪)do call set a=%%a:%%x=%%
echo %a%

このようにすると「,」と「?」が残ってしまうのですが
その2つも消すにはどうすればよいのでしょうか?
また、これは一体何が原因なのでしょうか?
155デフォルトの名無しさん:2011/10/14(金) 20:12:15.64
エスケープされてないので
,は空白に置換
?は1文字ファイル名に置換
156デフォルトの名無しさん:2011/10/14(金) 23:12:48.73
>>155
最初のsetを""で囲んでforのセットに^?^,でいけるかなと思ったんですが駄目でした。
他も色々と試してみたのですが、うまいことエスケープ出来ませんでした。
forの外ならset a=%a:?=%とset a=%a:,=%でエスケープもいらないのですが
仕組みを理解したいのでもうちょっと調べてみます。よく分かりませんが。
ありがとうございました。
157デフォルトの名無しさん:2011/10/15(土) 00:55:29.25
set a=!?-,.、。!?〜ー☆#♪
for %%x in (! ^^? "?" - "," . 、 。 ! ? 〜 ー ☆ # ♪ ') do call set a=%%a:%%~x=%%
echo %a%
set a=%a:?=%
echo=%a%
pause

forの()中 ?は "?"はダメで ^^?でエスケープ出来るが %%xに渡してくれない
カレントディレクトリに1文字のファイル置けば一応エスケープされてることが確認できる
158デフォルトの名無しさん:2011/10/15(土) 01:40:23.71
?はエスケープでけん
159デフォルトの名無しさん:2011/10/15(土) 07:59:56.29
>>147
for /d /r c:\test %a in ("*タイトル*") do @echo %a
160デフォルトの名無しさん:2011/10/15(土) 09:06:03.07
>>157>>158
ファイル名に使えない=\|/:*<>は試してませんが
(! ^ ! ? ☆ ★ ♪ # # $ $ 〜 − ― < > ー - "," " " " " . ・ 「 」 → 、 ” ’ 。 _ & + / \ ・ + "&" % @ @) do なんかは普通に通りました。後は遅延を考慮した""%%""位が特殊な形でした。
危険そうな所は避けているので他にもあるとは思いますが…これらは成功しました。

それでようやく理解しかけているのですが、例えば?と同じく出来なかった%の置換。
doの遅延で2つで1つ状態なので、セットの段階から%%にして、これに他と同じく
""を付けるのですが、他は%%~xで""を外しても大丈夫だったのですが
これは""を外して置くと特殊文字化するので、再びここで囲み直し
結果的に""%%""と二重で囲んで成功しました。

これは?にも当てはまって、""?""これで無効化された普通文字というのでしょうか
おそらく他もこの仕組みなんだろうと思いました。^自体は^^でした。
アドバイスのおかげで成功出来ました。どうもありがとうございました。
161デフォルトの名無しさん:2011/10/15(土) 09:18:12.11
>>159
forはある程度理解できるようになったと思っていたのですが、全然浅かったです。
ありがとうございます。解読して挑戦してみます。まだgoto文が苦手なんですよね。
おそらくgoto文も使うのでちょっと腰を据えて学んでみます。ご紹介ありがとうございました。
162デフォルトの名無しさん:2011/10/15(土) 14:22:35.26
set a=%%%!?-,.
echo %a%
for /f %%a in ('echo "%a%"') do @echo %%~a
for /f %%a in ('echo %a%') do @echo %%a
for /f %%a in ("%a%") do @echo %%a
pause

面白いなw
163デフォルトの名無しさん:2011/10/15(土) 14:34:34.66
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
164デフォルトの名無しさん:2011/10/15(土) 14:44:44.95
>>162
どこが?当たり前だのクラッカだが?
165デフォルトの名無しさん:2011/10/15(土) 14:48:55.47
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
166デフォルトの名無しさん:2011/10/15(土) 14:54:44.85
つまらん もちっと珍しいことはないのか?
167デフォルトの名無しさん:2011/10/15(土) 15:28:12.86
ここを見てると、「(PerlやRubyのような)フリーソフトは危ないから導入禁止」
とかほざいてる馬鹿会社が、いかに罪深いかがよく分かるな。
まあ趣味でバッチを追究するのは、また別の話だが…
168デフォルトの名無しさん:2011/10/15(土) 15:41:20.39
>>164
いや、ファイル名に%が付いてるのはどうなるかなと思ってね
たいした意味はないよ
169デフォルトの名無しさん:2011/10/15(土) 15:44:12.87
べつにちっともこまらんが?
あるものを使いこなせない馬鹿社員が、いかに罪深いかがよく分かるな。
170デフォルトの名無しさん:2011/10/15(土) 15:47:22.16
>>169
暇な窓際社員は呼んでない
171デフォルトの名無しさん:2011/10/15(土) 17:46:30.61
forのfile setでは?はエスケープできないね
でもfor/fなら?が渡せるよ
http://scripting.cocolog-nifty.com/blog/2008/11/lf-7446.html
の要領でfor /f in (複数行)にすればよい
172デフォルトの名無しさん:2011/10/16(日) 15:19:28.43
亀レスだけど>>36
これ凄いな・・・職人芸を感じる。
他の言語知らないから普通の事かもしれんが
173デフォルトの名無しさん:2011/10/16(日) 16:17:39.50
set a=!?-,.、。!?〜ー☆#♪
set b=! ? - , . 、 。 ! ? 〜 ー ☆ # ♪
for /f %%x in ('echo %b: =^&echo %') do call set a=%%a:%%x=%%
echo %a%
174デフォルトの名無しさん:2011/10/16(日) 17:13:39.45
set a=!?-,.、。!?〜ー☆#♪
set b=! ? - , . 、 。 ! ? 〜 ー ☆ # ♪
for /f %%x in ('"echo %b: =&echo %"') do call set a=%%a:%%x=%%
echo %a%
175デフォルトの名無しさん:2011/10/16(日) 17:34:19.64
何か云えよw
176デフォルトの名無しさん:2011/10/16(日) 17:35:27.55
何か
177デフォルトの名無しさん:2011/10/16(日) 17:37:14.47
これ凄いな・・・職人芸を感じる。
178デフォルトの名無しさん:2011/10/16(日) 22:56:12.18
>>167
windows鯖いじる仕事だったら普通だけど、、
まあ、本番で使ってるのはもっとシンプルなバッチばっかりだけどな。
179デフォルトの名無しさん:2011/10/17(月) 05:53:06.23
2>nul "%cd:\="&set "HIRAGANA=%"

これなにをやってるの?さっぱりわからない…
180デフォルトの名無しさん:2011/10/17(月) 11:34:00.25
set dir=G:\ほげ1\ほげ2\
set dir=%dir:~0,-1%
2>nul "%dir:\="&set "target=%"
echo %target%
pause

フォルダ名を取得してるんじゃない
181デフォルトの名無しさん:2011/10/17(月) 15:36:37.01
%~nxIを使えば済むところを物好きな
182デフォルトの名無しさん:2011/10/17(月) 16:13:38.98
>>181
%~nxIだとカレントディレクトリ名でなく、そこにあるフォルダ名になると思うんだが
183デフォルトの名無しさん:2011/10/17(月) 16:22:55.35
置換の方がfor使って書くより単純だけどな。

ちなみに最後の文字が\だと%~nxiもNGだからね…
184デフォルトの名無しさん:2011/10/17(月) 16:28:36.69
あたま悪いの?
185デフォルトの名無しさん:2011/10/17(月) 16:35:08.24
>>184
頭悪い本人乙
186デフォルトの名無しさん:2011/10/17(月) 16:35:29.48
>>184
あたま良いの?なら書いてみてよ
187デフォルトの名無しさん:2011/10/17(月) 16:36:36.04
for %%I in ("%~dp1.") do set HIRAGANA=%%~nxI

より

cd /d "%~dp1"
2>nul "%cd:\="&set "HIRAGANA=%"

とは物好きな
188デフォルトの名無しさん:2011/10/17(月) 16:37:04.21
まあ待て。本人は頭がいいと思ってるのかもしれないけど、
知らない方がいいってこともある。
189デフォルトの名無しさん:2011/10/17(月) 16:40:29.12
どっからcdなんて出てきたと思ったらえらい昔のレスじゃないか…
安価付けろボケ
190デフォルトの名無しさん:2011/10/17(月) 16:48:52.08
ボケはおまえだけだが?
191デフォルトの名無しさん:2011/10/17(月) 16:51:22.28
>>187
これ凄いな・・・職人芸を感じる。
192デフォルトの名無しさん:2011/10/17(月) 17:11:58.24
>>191
もう許してやれよww
193デフォルトの名無しさん:2011/10/17(月) 17:42:56.14
>>187
あたま悪くてごめんなんだけど
("%~dp1.")これはどうしてdp1の後ろに.がついてるの?

いや確かにこれがないと取得できないんだけど
何かをドロップしなくても"."になって取得できるし
そもそもの"."の意味もよく分からなくって、そこを教えてもらえると嬉しいです。
194デフォルトの名無しさん:2011/10/17(月) 17:58:04.27
>>191
> これ凄いな・・・職人芸を感じる。
一銭にもならん職人芸だけどな。
195デフォルトの名無しさん:2011/10/17(月) 18:02:09.59
dir .
すると
.
..
があるだろ?
a\b\c\.はa\b\cを指す。
a\b\c\..はa\bを指す。
つまり、\.は\.を削除、\..は\〜\..を削除したものと同じ
というのがOSのパス名のコンベンションなんだよ
196デフォルトの名無しさん:2011/10/17(月) 18:06:37.06
×職人芸を感じる
○職人技を感じる
と思ってたんだが違うのか?
それでネタにされてたんだと思ったがw

>>193
横レスで俺もよく分からんけど"."でカレントディレクトリを1つ上位のパスに戻してるんじゃないのか?
例えばcd ..だと1つ前に戻るけど、forの場合には1個でいいみたいな。試しに".."だと2つ前に戻った。

>>195
なるほどd
197デフォルトの名無しさん:2011/10/17(月) 18:29:39.96
>>195
dirをしたときの.と..もずっと意味分かってなくて
今までは仕方なくそれを含めて計算してたんですが
なるほど、ようやく意味が分かりました。ありがとうございました!

>>196
ありがとうございます。試してみます。
198デフォルトの名無しさん:2011/10/19(水) 20:12:37.19
FOR文の中にGOTOのラベルって書いたらNGですか?

FOR /f "usebackq tokens=*" %%j IN (`reg query "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"`) DO (
IF "! REG.EXE VERSION 3.0" EQU "%%j" goto Skip
IF "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" EQU "%%j" goto Skip

処理色々
:SKIP
)
こんな感じでかいたらエラーになっちゃいます。
199デフォルトの名無しさん:2011/10/19(水) 20:15:32.28
gotoは書けるが、ラベルは複文の中に書けない
つまり脱出のみ
200デフォルトの名無しさん:2011/10/19(水) 20:43:35.56
IF "! REG.EXE VERSION 3.0" NEQ "%%j" (
 ...
)
でいいんじゃないの。
インデント増えるけど。

ややこしい処理書きたくなったら
for %%i ... do call :eachline %%i
してサブルーチンに飛ばしちゃうと色々楽。
201デフォルトの名無しさん:2011/10/19(水) 21:57:06.94
>199
>200
なるほど〜、勉強になりました。
ありがとうございます。
202デフォルトの名無しさん:2011/10/23(日) 17:43:31.29
ちょっと教えてください

あるディレクトリ以下のファイルを処理したくて、とりあえず
dir /b /s /a-d cd > list.txt
でファイル一覧を作りました

中身はこんな感じ
test\test11 test12\texta
test1\test13 test14\textb
test2\test15 test16\textc

で、その一覧をforで処理しようと思ったら、空白までしか読んでくれない
for /F %i in ( list.txt ) do コマンド

どうしたらファイルの中の空白を含む文字列を正しく読み込めますか?
203デフォルトの名無しさん:2011/10/23(日) 17:48:11.55
いったんファイルに吐いているのは、多少加工するためです
前と後ろを少し切るためなんですが、コマンドでやると面倒そうなので、
エディタの置換でやっています
204デフォルトの名無しさん:2011/10/23(日) 17:53:37.29
自己解決しました
for の /Fが余計だった
頭使わずにコピペしてると駄目ですね
スレ汚し失礼しました
205デフォルトの名無しさん:2011/10/23(日) 18:16:44.27
何言ってんだか
206デフォルトの名無しさん:2011/10/25(火) 09:41:38.83
学校で宿題が出ました、助けて下さい><
実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。
よろしくお願いいたします。

実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。
テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような
パスを変数に代入する記述があった場合
そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt"
という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。
207デフォルトの名無しさん:2011/10/25(火) 10:21:55.23
>>206
hh.exe ms-its:ntcmds.chm::/ntcmds.htm
208デフォルトの名無しさん:2011/10/25(火) 11:07:34.88
少しは考慮に値するレベルならまだしも、一行で終わるようなのはもう帰れとしか言いようがない。
209デフォルトの名無しさん:2011/10/25(火) 22:23:47.19
1行じゃ終わらんでしょ
210デフォルトの名無しさん:2011/10/25(火) 22:25:49.99
仕様があいまいで書く気にならんな
211デフォルトの名無しさん:2011/10/25(火) 22:30:56.11
語句解析とか無理
212デフォルトの名無しさん:2011/10/25(火) 22:33:49.07
> 現在存在するディレクトリにある全てのテキストファイル
えっ?
213デフォルトの名無しさん:2011/10/25(火) 22:39:45.43
>>212
現在バッチファイルが存在するディレクトリ
バッチファイルと同階層のディレクトリ内の
214デフォルトの名無しさん:2011/10/25(火) 23:37:14.09
助けなかったらどうなるの?
215デフォルトの名無しさん:2011/10/25(火) 23:54:16.44
つまりバッチファイル自身も書き換えるのか
216デフォルトの名無しさん:2011/10/25(火) 23:56:59.44
>>215
拡張子がtxtのものだけでお願いします。
217デフォルトの名無しさん:2011/10/26(水) 00:06:34.90
そのまま解釈すれば
バッチでは無理なレベル
218デフォルトの名無しさん:2011/10/26(水) 00:13:41.08
バッチの宿題やるまえに日本語の勉強しなきゃ
219デフォルトの名無しさん:2011/10/26(水) 00:45:50.58
なの宿題のわけないが狙いは何だ?
220デフォルトの名無しさん:2011/10/26(水) 00:49:53.39
バッチではできないが正解でわ
221デフォルトの名無しさん:2011/10/26(水) 01:05:34.80
説明がわかりにくいようですまんかった。
画像にしてみた。
http://up3.viploader.net/ippan/src/vlippan241698.jpg
http://viploader.net/ippan/src/vlippan241699.jpg
画像の、C:\aaa\aaa\aaa\aaaとかの部分をC:\Users\workspaceに書き換えたいというわけです。

>>217>>220
バッチではムリなのか・・・
最初Pythonでやろうと思ったんだが、うちの会社のマシン、標準でPythonが入ってないから
わざわざこれやるためにインスコするのも何だしなあと思って
バッチならどのマシンでも実行出来るかなと思ったんだが・・・。
何か他に最適な言語はありますか。

>>219
パスを読んでくるようなスクリプトを他のディレクトリに移動させるとエラーが出ることがあって
今は毎回パスを手動で書き換えたりしてるんだけど、ボタンポチで書き換えられた方がいいかなあと。。
プログラム板は宿題スレが多いからこういう形で質問してみました。
222デフォルトの名無しさん:2011/10/26(水) 01:23:34.64
それくらいならバッチでできるだろ
for/?
set/?
規模見積もり0.005KS
工数見積もり0.002人月
223デフォルトの名無しさん:2011/10/26(水) 03:39:47.92
だからキモの部分は1行で終わるって…
224デフォルトの名無しさん:2011/10/26(水) 03:45:15.11
無理だって
225デフォルトの名無しさん:2011/10/26(水) 04:02:35.67
出来るよ
passはpathの間違いか?まあ変数名なのでどっちでもいいが。
ただ2枚目の画像のようにtxtの中身がpathを記述したものだけなのか?それ以外の行があるのか?
ひとつの行で指定されているpathはひとつのみ?;区切りで複数のpathが指定されてたりするのか?
によって面倒さが変わってくる
226デフォルトの名無しさん:2011/10/26(水) 04:07:57.60
相対パス使えよ
227デフォルトの名無しさん:2011/10/26(水) 04:13:52.72
何が無理なんだ?バッチに不可能はないが
228 ◆GisVTRdvfxOl :2011/10/26(水) 04:47:39.91
http://www1.axfc.net/uploader/Sc/so/286933.zip&key=221
txt書式が変わると対応不可
エスケープ文字は非対応
スペースと日本語には対応させたつもり
229デフォルトの名無しさん:2011/10/26(水) 05:16:38.97
>エスケープ文字は非対応
バッチの宿題やるまえに日本語の勉強しなきゃ
230デフォルトの名無しさん:2011/10/26(水) 16:31:13.72
WinTabberって良さげなツール見つけたんだけど
AVGでWin32/Heurが検出される。
たぶん誤検出で大丈夫だと思うんで試しに誰か踏んでみてくれ。
231デフォルトの名無しさん:2011/10/26(水) 16:45:25.13
断る
232デフォルトの名無しさん:2011/10/26(水) 19:18:03.62
>>バッチならどのマシンでも実行出来るかなと思ったんだが・・・。
この条件なら WSH 使えばいい話
233デフォルトの名無しさん:2011/10/26(水) 19:28:24.00
>何か他に最適な言語はありますか。
WSHは言語じゃない
234デフォルトの名無しさん:2011/10/26(水) 19:35:38.57
そんなこといったらバッチファイルも言語じゃないだろ
235デフォルトの名無しさん:2011/10/26(水) 20:02:33.21
>>234
じゃバッチファイルの言語はなんだ?言ってみろ
236デフォルトの名無しさん:2011/10/26(水) 21:14:32.23
バッチ
237デフォルトの名無しさん:2011/10/26(水) 22:01:34.34
バッチは基本的にコマンドの羅列でしかないので厳密には言語じゃないけど、
一般的には言語(スクリプト)として扱われることが多い・・・てことじゃない?
unixのシェルスクリプトも同じ扱い。
238デフォルトの名無しさん:2011/10/26(水) 22:48:51.96
>>228
thx!!!!!ありがとうございます!!
バッチファイルを今まで書いたことなかったので
お願いしたのだけれど、やっぱり機能追加とかしたいので結局自分でも覚えなきゃいけないな・・・
仕事でバッチを頻繁に使うわけでもないので若干面倒臭い。。
>>232>>233
すみません、語彙力不足で・・・。
上でお願いしたようなことが出来るのなら言語じゃなくても何でも良いです。
ただ共有して使うつもりなのでインストールとかが必要なものは面倒なので要らない感じです。
WSHってのでバッチよりサクッと出来るならその方が個人的には嬉しいです。
239デフォルトの名無しさん:2011/10/26(水) 23:23:21.05
最近スレの質が下がったな
日本語変なやついるし
検証もしないで出来ないとか無理とかいうやついるし
全角英字とか()
240デフォルトの名無しさん:2011/10/26(水) 23:35:01.96
出来ないというか普通はsedとか使うんじゃないの
241デフォルトの名無しさん:2011/10/27(木) 00:32:18.73
>>239
出来ると思うならやってみろよ
242デフォルトの名無しさん:2011/10/27(木) 08:41:46.72
出来ると思うならやってみろよ(キリッ
243デフォルトの名無しさん:2011/10/27(木) 17:46:44.38
どうでみいいから好きにしてよ(キリッ
244デフォルトの名無しさん:2011/10/27(木) 23:02:47.57
出来ないと思うなら証明してみろよ(キリッ
245デフォルトの名無しさん:2011/10/27(木) 23:39:38.13
うちも履歴が止まったが保存日数減らしたら再開したわ
246デフォルトの名無しさん:2011/10/28(金) 00:15:34.97
このスレはあなたにとって役に立ちましたか?

 ○ 非常に役にたった
 ○ 役にたった
 ○ どちらともいえない
 ○ 役に立たなかった
 ○ 全く役にたたなかった
247デフォルトの名無しさん:2011/10/28(金) 01:56:16.55
非常に腹がたった
248デフォルトの名無しさん:2011/10/28(金) 11:58:38.57
ユーザー名がtestであるときに
cd C:\Users\testと打たないで
cd /~test見たいな感じでC:\Users\testに移動できる書き方ってありませんか?
249デフォルトの名無しさん:2011/10/28(金) 12:13:54.46
エスパー回答
cd %USERPROFILE%\test
250デフォルトの名無しさん:2011/10/28(金) 12:42:02.05
宇宙飛行士じゃないけど
cd /d %USERPROFILE%
251デフォルトの名無しさん:2011/10/28(金) 12:53:08.99
ありがとうございます!
252デフォルトの名無しさん:2011/10/28(金) 13:01:01.75
pushd使え
253デフォルトの名無しさん:2011/10/28(金) 13:04:50.44
pushdとpopdっていうのがあるんですね
これ便利ですね!ありがとうございます!
254デフォルトの名無しさん:2011/10/31(月) 06:25:29.84
hogehogeという名前のフォルダを右クリックの「送る」に登録したバッチファイルに送ると、
WinRARで圧縮すると同時に圧縮したファイル名の先頭にその時の日付と時刻を
「(yy-mm-dd_hh-nn) hogehoge.rar」
このように追加したいのですがどういう書き方をすれば良いでしょうか?
255デフォルトの名無しさん:2011/10/31(月) 07:16:57.68
cd /d "%~dp1"
set "ymdhm=%date:~2,2%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%"
set "path=%path%;C:\Program Files\WinRAR"
winrar a "(%ymdhm%) %~nx1.rar" "%~nx1"
256デフォルトの名無しさん:2011/10/31(月) 10:14:55.58
"C:\Program Files\WinRAR.exe" a -ag+{(}YY-MM-DD_HH-MM{) } "%~1"
257デフォルトの名無しさん:2011/10/31(月) 11:03:26.79
7-zipを使っております
c:\code\の中のファイルで新しく更新されたファイルのみを
c:\backup.7zに追加・更新したいのですが
それを手動でやってたのですがバッチファイルでこういうのをクリックしたら自動的にできるようには出来ませんか?
258デフォルトの名無しさん:2011/10/31(月) 12:56:16.55
hh.exe ms-its:C:\Program Files\7-Zip\7-zip.chm::/cmdline/syntax.htm
259デフォルトの名無しさん:2011/10/31(月) 15:06:31.79
>>255
完璧に動きました。
バックアップ用に使います。最高です。
ありがとうございました。

>>256
WinRAR自体に日付と時刻をファイル名に付加するパラメータがあったんですね。
ありがとうございます。
260デフォルトの名無しさん:2011/10/31(月) 15:51:50.41
>>259
pushd "%~dp1"
"C:\Program Files\WinRAR\WinRAR.exe" a -ag+(YY-MM-DD_HH-MM) " %~nx1.rar" "%~nx1"
261デフォルトの名無しさん:2011/11/02(水) 11:18:59.37
Windows8でコマンド使おうとすると
いつまでバッチ使ってるんだPowerShell使えやって警告が出るみたいだな
Windows9あたりでcmdは廃止になるかもしれないな
262デフォルトの名無しさん:2011/11/02(水) 18:19:04.70
なんのために?
263デフォルトの名無しさん:2011/11/02(水) 18:30:20.91
PowerShellってvista以降なら標準で入ってるものですか?
もし標準で入っているならPSに移行してみたいですが
264デフォルトの名無しさん:2011/11/02(水) 20:34:51.75
>>261
mjd?batしか使かった事ないし腹立ってきた。
PowerShellとか難しそう
265デフォルトの名無しさん:2011/11/02(水) 20:36:13.45
エディションによる
266デフォルトの名無しさん:2011/11/02(水) 22:04:24.96
homeエディションなら問題ないですかね?
267デフォルトの名無しさん:2011/11/02(水) 22:38:42.34
homeエディションなら問題なく入ってない
268デフォルトの名無しさん:2011/11/03(木) 13:11:33.76
バッチファイルのソースによく書かれている
nx〜〜とかってどういう意味ですか?変数とは違うものなんでhそうか
あと~~みたいな上の方に出てるニョロニョロと、dpってやつが何者なんでしょうか。
初心者の質問ですみません・・・。
269デフォルトの名無しさん:2011/11/03(木) 13:54:52.82
ntcmds.chmのバッチ パラメータを使用するを読むんだ
270デフォルトの名無しさん:2011/11/03(木) 15:43:44.64
batファイルを為まくってたのに努力が水の泡になる困った
PSに移行するべきかRubyとかPerlとかPythonを使うべきか
271デフォルトの名無しさん:2011/11/03(木) 15:46:05.16
>>270
ほんとそうだよな。せっかく今まで覚えてシコシコ作りまくってたのに
腹立つわマジで
272デフォルトの名無しさん:2011/11/03(木) 16:26:22.70
command.comはなくなるだろうが、cmd.exeがなくなるものか、あほども
273デフォルトの名無しさん:2011/11/03(木) 16:41:16.63
>>269
バッチファイル初心者だから、ntcmds.chmって何だろうと思って
調べてみたんだが、コマンドのヘルプみたいなもんか。
Win7では日本語のヘルプは無いらしい・・・。
本当にPowerShellっての覚えた方が良いってことか
http://d.hatena.ne.jp/IIJIMAS/20101101/1288542425#c
274デフォルトの名無しさん:2011/11/03(木) 16:43:43.01
俺もRuby,Perl,Pythonで書きたいところなんだが
会社のマシンってこいつらが標準でインスコされてないことがあるんだよな…
275デフォルトの名無しさん:2011/11/03(木) 16:49:09.86
>>274
「ウィルスの危険性があるので導入は認めませんキリッ」(by糞管理部門)
276デフォルトの名無しさん:2011/11/03(木) 16:49:35.83
>>272
どういうことですか?
2つはOSによって名前が違ってますが片方がはいっているものではないのですか?
なくならないんですか?
277デフォルトの名無しさん:2011/11/03(木) 16:50:31.25
プログラミングできない人が多い会社(おれ以外プログラミングってなに?レベル)の場合HSP導入するべき?
278デフォルトの名無しさん:2011/11/03(木) 17:06:34.98
>>277
HSPはあくまでゲーム製作用スクリプトの趣が強いかと
とりあえずはWSH辺りが相場なんじゃないかね
279デフォルトの名無しさん:2011/11/03(木) 17:37:56.28
>>273
for /?
280デフォルトの名無しさん:2011/11/03(木) 18:01:03.13
>>276
command /?
281デフォルトの名無しさん:2011/11/03(木) 18:45:15.02
WSHってPower shellに置き換えられる過去の遺産になるんじゃないっけ
282デフォルトの名無しさん:2011/11/03(木) 18:48:03.85
すれ違い
283デフォルトの名無しさん:2011/11/07(月) 07:08:39.26
ちょっと変な質問ですが

start myprog
のコマンドはstartですが
myprog
でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう

別のスクリプトで
start("myprog") => start myprogを実行する
と一緒に
s = exec("myprog") => myprogを実行して出力を返す
s = run("myprog")
と言ったメソッドを定義したいんですがその名前は何がいいのかなと
284デフォルトの名無しさん:2011/11/07(月) 08:15:27.21
>>284
大雑把な説明だけど。

myprogがOSからみて実行ファイル(.exe、.com(笑)等)であればOSのプロセス管理機能の
管轄で実行されるので、特に暗黙のコマンドというものはない。

myprogがデータファイル(.txt等)であれば、OSに登録されている拡張子割当を元に
該当プログラムに"myprog"をパラメータとして勝手に渡して実行してくれる。
拡張子に割り当てられたプログラムが暗黙のコマンドになる。
(バッチファイルもこのパターンに相当する)

どちらの場合もstartコマンド有無は特に関係ない。
後者のパターンで"start myprog"を実行した場合でも、startコマンド実行後myprogに割り当てられた
プログラムが起動してmyprogがパラメータとして渡されるので、この場合も「暗黙のコマンド」が存在することになる。

拡張子割当の検索はバッチの範疇では無理・・・だと思う(レジストリを見なきゃならん)。

見当違いなことを言っていたらごめん。
285デフォルトの名無しさん:2011/11/07(月) 09:24:59.10
拡張子割り当てはassocとかftypeとか?
286デフォルトの名無しさん:2011/11/07(月) 15:57:27.19
>>284
アンカミス
見当違い

>>283
>start myprog
>のコマンドはstartですが
の引数もコマンドです。
>myprog
>でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう
myprogです。
287デフォルトの名無しさん:2011/11/07(月) 19:08:03.54
>>284
callだよーん
288デフォルトの名無しさん:2011/11/07(月) 19:17:40.95
C:\doc1.0\bin
C:\doc2.0\bin
という二つのパスがあります
このうち前者のほうをシステムのパスに登録しているのですが
batファイルでパスを後者に切り替えるにはどう書くのでしょうか?
289デフォルトの名無しさん:2011/11/07(月) 19:21:27.08
set path=%path:C:\doc1.0\bin=C:\doc2.0\bin%
290デフォルトの名無しさん:2011/11/07(月) 19:31:54.97
289様ありがとうございます

pathはC:\doc1.0\bin以外にもjavaなどのパスやらインストールしたソフトが勝手に登録したパスもありますが
ご教示いただいたコードのC:\doc2.0\binの部分にそれらを足したほうがいいのでしょうか?
それともC:\doc1.0\binというパスを見つけたらC:\doc2.0\binに置換するという動作でしょうか?
291デフォルトの名無しさん:2011/11/07(月) 19:59:48.22
set /?
292デフォルトの名無しさん:2011/11/18(金) 17:54:49.91
batファイルを起動してから毎時00分に指定したdosコマンドを実行したいのですがタスクスケジューラを使わずにbatファイルでできますか?
293デフォルトの名無しさん:2011/11/18(金) 18:09:19.93
%TIME%の分を取り出して比較して
これを繰り返せばよい
適当に待ちを入れて
294デフォルトの名無しさん:2011/11/18(金) 22:44:52.61
:loop
sleep 60-現在の秒数
タスクを実行
goto loop
295デフォルトの名無しさん:2011/11/18(金) 23:04:41.04
'sleep' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
296デフォルトの名無しさん:2011/11/18(金) 23:09:40.73
waitfor sleep /t 60-現在の秒数
297デフォルトの名無しさん:2011/11/18(金) 23:12:44.67
'waitfor' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
298デフォルトの名無しさん:2011/11/18(金) 23:25:22.75
msg %username% /time:60-現在の秒数
299デフォルトの名無しさん:2011/11/18(金) 23:38:21.08
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか
ら、Ctrl+Z キー、Enter キーを押します。
300デフォルトの名無しさん:2011/11/18(金) 23:38:48.90
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか
ら、Ctrl+Z キー、Enter キーを押します。

^Z
セッション名の取得エラー 1702
301デフォルトの名無しさん:2011/11/18(金) 23:55:48.28
msg * /time:60-現在の秒数 sleep
302デフォルトの名無しさん:2011/11/19(土) 00:18:03.47
セッション名の取得エラー 1702
303デフォルトの名無しさん:2011/11/19(土) 00:34:43.64
:loop
if not 60-現在の秒数 == 00 goto loop
タスクを実行
:loop2
if 60-現在の秒数 == 00 goto loop2
goto loop
304デフォルトの名無しさん:2011/11/19(土) 00:46:53.69
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
305デフォルトの名無しさん:2011/11/19(土) 00:48:02.09
役立たずばかりだな
306デフォルトの名無しさん:2011/11/19(土) 00:50:05.81
おまえの役に立ってたまるかぼけ
307デフォルトの名無しさん:2011/11/19(土) 01:00:26.80
おれんちはsleepあるからいいよw
308デフォルトの名無しさん:2011/11/19(土) 19:30:14.31
1秒スリープ
echo WScript.Sleep(1000) >sleep.vbs
cscript //Nologo sleep.vbs
309デフォルトの名無しさん:2011/11/19(土) 20:33:07.77
>>294
>>296
osのバージョンによっては入っていないんだな
>>301
セッション名の取得エラーって知っているか?
>>303
アホか負担が高すぎる
>>307
何も解決してない答えだな
汎用性がないわ
>>308
これは使えるな
310デフォルトの名無しさん:2011/11/19(土) 23:24:06.28
厳密じゃなくて適当に1秒待ちで良いなら
ping -n 2 127.0.0.1 1>nul

OS制限はまず無いし
311デフォルトの名無しさん:2011/11/20(日) 00:06:16.93
start /wait "" mshta vbscript:Execute("GetObject(""winmgmts:{impersonationLevel=impersonate}"").
ExecNotificationQuery(""select * from __InstanceModificationEvent
where TargetInstance isa 'Win32_LocalTime'
and TargetInstance.Minute = 0 and TargetInstance.Second = 0"").NextEvent:Close")
312デフォルトの名無しさん:2011/11/20(日) 00:15:53.25
pingは環境によってFWでブロックされて止まってしまう
313デフォルトの名無しさん:2011/11/20(日) 00:24:34.55
アホには>>303がちょうどよいw
314デフォルトの名無しさん:2011/11/20(日) 00:41:31.13
mshta javascript:setTimeout('close()',10000)
315デフォルトの名無しさん:2011/11/20(日) 10:04:22.81
そもそも最初は、「毎時00分に」なのに「00秒に」と誤解した上に、途中から「1秒待ち」の話になってる。
へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
316デフォルトの名無しさん:2011/11/20(日) 15:37:58.48
応用のできないアホはスルーで
317デフォルトの名無しさん:2011/11/20(日) 15:40:21.60
msまで追求するのが漢道
318デフォルトの名無しさん:2011/11/20(日) 16:12:00.10
>>315
へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
319デフォルトの名無しさん:2011/11/20(日) 17:19:17.93
>>316
応用? 00分の検出と、1秒待ちってぜんぜん違う機能だぞ。

どう応用するのか、見せてもらえるかな?
320デフォルトの名無しさん:2011/11/20(日) 17:26:48.84
>>319
なんでその2つを同じ階層で考える?
321デフォルトの名無しさん:2011/11/20(日) 17:32:09.01
応用のできないアホはスルーで
322デフォルトの名無しさん:2011/11/20(日) 17:36:30.86
まぁまぁ落ち着けよお前ら
一番悪いのは>>303なんだから
323デフォルトの名無しさん:2011/11/20(日) 17:50:30.16
>>320
え゛っ、応用じゃないの? (w

応用見せてみと言うと階層が違うとか、なんだかねぇ。
324デフォルトの名無しさん:2011/11/20(日) 18:00:38.70
おい単芝vipに帰れよ
325デフォルトの名無しさん:2011/11/20(日) 18:21:54.10
HP機だと
c:\hp\bin\sleep.exe
が使えるよ
326デフォルトの名無しさん:2011/11/20(日) 18:25:01.24
>>324
お前が帰れよ、つーかででくんな。
327デフォルトの名無しさん:2011/11/20(日) 18:32:56.02
powershell start-sleep
328デフォルトの名無しさん:2011/11/20(日) 18:42:28.32
'powershell' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
329デフォルトの名無しさん:2011/11/20(日) 18:43:43.94
'c:\hp\bin\sleep.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
330デフォルトの名無しさん:2011/11/20(日) 19:01:18.78
hpの事なんて聞いてねえよ!
331デフォルトの名無しさん:2011/11/20(日) 19:05:48.99
おまえなんかに言ってないよw
自我肥大するんじゃねーよw
332デフォルトの名無しさん:2011/11/20(日) 23:10:10.73
自我肥大はスルーで
333デフォルトの名無しさん:2011/11/20(日) 23:18:48.73
pause /t:n
334デフォルトの名無しさん:2011/11/20(日) 23:59:17.74
>>292
やったな、おい!大漁じゃねーか!雑魚ばっかりだけど!
335デフォルトの名無しさん:2011/11/21(月) 00:35:05.56
これってそんなに難しい質問なのか
336デフォルトの名無しさん:2011/11/21(月) 00:45:48.84
応用のできないアホには
337デフォルトの名無しさん:2011/11/21(月) 03:33:48.01
choice /t 10 /d y
338デフォルトの名無しさん:2011/11/21(月) 03:47:51.65
diskpart /t 15
339デフォルトの名無しさん:2011/11/21(月) 05:32:44.27
>>333
続行するには何かキーを押してください . . .
>>337
'choice' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
>>338
DiskPart はパラメータを処理できませんでした。
詳細については、'diskpart /?' を使用してください。
340デフォルトの名無しさん:2011/11/21(月) 09:26:48.83
cmd.exe組み込みコマンドと同名のプログラムがPATH中に存在するとき、
組み込みコマンドを指定する方法はありますが?
mkdirはmdに変更することで逃げられますが、この方法が使えないとき
はどうすればいいでしょうか?
341デフォルトの名無しさん:2011/11/21(月) 13:42:17.35
似たような機能のtoolを入れる
342デフォルトの名無しさん:2011/11/21(月) 14:41:11.23
>>340
うそこけ 組み込み優先でないってか?
343デフォルトの名無しさん:2011/11/21(月) 16:03:37.77
>>341
それすると何がどうなるって?ばかか
344デフォルトの名無しさん:2011/11/21(月) 16:30:39.06
>>340
逆ならいくらでもあるが
345デフォルトの名無しさん:2011/11/21(月) 16:39:27.54
>>340
setlocal
set path=
組み込みコマンド
endlocal
346デフォルトの名無しさん:2011/11/21(月) 17:28:38.33
>>342
うーん。試してみたらコマンドプロンプトは組み込み優先でした。
実はnmakefileの中だったのです。>>345を採用することにしますた。

set path= & 組み込みコマンド
347デフォルトの名無しさん:2011/11/21(月) 17:35:24.19
最初からそう言え
cmd /c 組み込みコマンド
348デフォルトの名無しさん:2011/11/21(月) 22:14:14.00
timeout /t 10
349デフォルトの名無しさん:2011/11/22(火) 06:18:57.26
NDWord: /t
350デフォルトの名無しさん:2011/11/22(火) 10:59:35.06
'NDWord:' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
351デフォルトの名無しさん:2011/11/22(火) 12:48:26.59
整合性レベルの低で起動する簡単な方法ないですか?
352デフォルトの名無しさん:2011/11/22(火) 12:57:18.84
%~tIは更新日時のようですが、作成日時は取れないんですか?
353デフォルトの名無しさん:2011/11/22(火) 13:30:43.72
start /low
354デフォルトの名無しさん:2011/11/22(火) 13:56:05.67
for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (set a=%i%j&call echo %a%)
355デフォルトの名無しさん:2011/11/22(火) 14:04:16.98
%i%jじゃ繋がっちゃうだろ
356デフォルトの名無しさん:2011/11/22(火) 21:16:09.49
"%~nx1"が"ファイル"だとだめだろ
357デフォルトの名無しさん:2011/11/22(火) 21:24:25.23
"eol= "ってやればうまく行きそうだが、行かん。遺憾だ
358デフォルトの名無しさん:2011/11/22(火) 21:39:46.47
eol=の仕様は謎だな
359デフォルトの名無しさん:2011/11/22(火) 21:46:13.61
findstr /r /c:"^[^ ].*%~nx1"
360デフォルトの名無しさん:2011/11/22(火) 21:59:25.95
for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (if not defined a set a=%i %j&call echo %a%)
361デフォルトの名無しさん:2011/11/22(火) 22:05:59.46
だからー "%~nx1"が"ディレクトリ"だとだめだろ
362デフォルトの名無しさん:2011/11/22(火) 22:08:54.13
find "/"
がええかも
363デフォルトの名無しさん:2011/11/22(火) 23:34:25.37
for eolでggったら"delims= eol= "でいいみたいね
364デフォルトの名無しさん:2011/11/23(水) 01:56:38.52
そのじゃディレクトリの作成日時は取れんな
365デフォルトの名無しさん:2011/11/23(水) 12:30:43.59
start cmd /c pause
とすれば、別プロセスで開始したコマンドの終了を待たずに次に進めるけど、
(start cmd /c pause & start cmd /c pause) | sort
などとパイプすると、startしたアプリをすべて終了するまで次に進まなくなってしまうのを回避する方法ありません?
(start cmd /c pause & start cmd /c pause) > hoge.txt
リダイレクトなら普通に次に進めるのですが…
366デフォルトの名無しさん:2011/11/23(水) 16:12:04.51
意味不明だな
(start cmd /c pause & start cmd /c pause) | sort
で止まるのは当然だろw何がしたい?
start cmd /c "pause | sort"
とか?
367365:2011/11/23(水) 17:35:31.29
>>366
確かにそのスクリプトじゃ何がしたいのか意味不明だけど、ようは、

[a.cmd]
Echo 処理1開始
Rem 処理1
Echo 処理2開始
Rem 処理2
Echo 処理3開始
start "" "重い処理3cmd"
Echo 処理4開始
start "" "重い処理.4cmd"
pause
exit /b

ってのがあって、そのスクリプトに対し、

call a.cmd | tee "log.log"

的なことをしたのです。
a.cmd 内では、pause まで進むのにもかかわらず、
重い処理3cmd, 重い処理4cmd が修了するまで、
call a.cmd | tee "log.log"
の次に進みません。

call a.cmd
だけなら問題なく次に進むのだけど、何でそうなるのかが自分にはよくわからんのです。
368デフォルトの名無しさん:2011/11/23(水) 18:33:00.23
369デフォルトの名無しさん:2011/11/23(水) 18:45:04.00
>ProcessStartInfo.UseShellExecute=trueでプロセスを起こすと、
>ファイルハンドルを引き継がないようです。
ってことは
ショートカット作って
start "" "重い処理3cmd.lnk"
だな
370デフォルトの名無しさん:2011/11/23(水) 21:55:29.35
rundll32.exe url.dll,FileProtocolHandler "重い処理3.cmd"
でもええんじゃね
371365:2011/11/23(水) 22:04:00.88
>>368-369
ありがとうございます!!

> ttp://scripting.cocolog-nifty.com/blog/2007/09/messagebox_5566.html
> どうもパイプの前のプロセスにパイプのハンドルの複製が残っているのでは?
なるほど…

ショートカットで、ばっちし うまく動きました。
372365:2011/11/23(水) 22:12:02.17
>>370
なるほど!
手っ取り早くてイイですね!
373デフォルトの名無しさん:2011/11/24(木) 20:05:50.79
cmd.exeのバグだな
374デフォルトの名無しさん:2011/11/24(木) 23:51:22.85
そうだな
375デフォルトの名無しさん:2011/12/13(火) 19:02:04.82
hou

窓の杜 - 【REVIEW】UnixのコマンドをWindowsのコマンドプロンプトで利用可能にする「Gow」
http://www.forest.impress.co.jp/docs/review/20111206_496043.html
376デフォルトの名無しさん:2011/12/13(火) 21:04:34.69
コマンドプロンプトで使えても、複数行の引数とかで困りそうな…
377デフォルトの名無しさん:2011/12/14(水) 23:05:30.91
お願いします。
Windows7です。

host.txtが

<ホスト名A>,<IPアドレス>
<ホスト名B>,<IPアドレス>

というようなパターンで記載されております。

キーボード入力→入力を変数に格納(%host%)。

・変数%host%と一致する行を、host.txtの1列目から探す、見つかったら一致する行の2列目を変数ipに格納

という処理を行いたいのですが、まったく方法が思いつきません。
お知恵を拝借いたしたく。

よろしくお願いします。
378デフォルトの名無しさん:2011/12/14(水) 23:30:42.76
set /p host="> "
for /f "tokens=1,* delims=," %%a in (host.txt) do (
if "%%a" == "%host%" set "ip=%%b"
)
echo %ip%
379377:2011/12/15(木) 00:03:14.03
>>378
勉強になります。そのまま使わせていただきます。
ありがとうございます。

380デフォルトの名無しさん:2011/12/21(水) 08:11:06.17
Windows2008使用です。
バッチ上から、システム環境変数(本来、マイコンピュータ右クリックでたどっていって編集するもの)を編集したいです。

reg add で編集(追加)はできるんですが、同じバッチ内(コマンドプロンプト内)では、反映されてません。
これを反映させられるようにしたいです。
pathを編集したいわけじゃないので、フルパスにしたからといって解決するものでもないです。

どなたかご存知の方いらっしゃいましたらご教授お願いします。
381デフォルトの名無しさん:2011/12/21(水) 09:34:10.72
>set /?
382デフォルトの名無しさん:2011/12/21(水) 09:58:29.01
馬鹿登場
383デフォルトの名無しさん:2011/12/21(水) 10:26:35.05
reg addしたものと同じものをsetしなおすのが手っ取り早いとは思うけどな。

start "" cmd.exe /c "%~0" %*

とかやって独立したプロセス立ち上げると環境変数って新規のが使われるんだっけ?
そうなったら今度はローカルで変更した環境変数まで消えちゃうんだけど。
384デフォルトの名無しさん:2011/12/21(水) 14:42:17.97
setx/?
385デフォルトの名無しさん:2011/12/21(水) 17:15:10.74
'setx' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
386デフォルトの名無しさん:2011/12/21(水) 17:59:03.37
setx.exeはServer 2003以降、Vista以降で有効の模様。2000/XPでは使えない。
387デフォルトの名無しさん:2011/12/21(水) 18:26:27.91
2000/XPは使わない。
388デフォルトの名無しさん:2011/12/26(月) 11:08:09.34
すいません以前ここでcdは使うな。代わりに○○を使えって教わったのですがそのコマンドが忘れました
どなたか教えてください
389デフォルトの名無しさん:2011/12/26(月) 11:24:55.46
>>252-253 か?
別にcdでもいいよ
390デフォルトの名無しさん:2011/12/26(月) 11:41:51.36
cd /d
かもよ
391デフォルトの名無しさん:2011/12/26(月) 11:58:44.93
pushdとか?
392デフォルトの名無しさん:2011/12/26(月) 12:45:07.22
>>389-391
先生方ありがとうございます
それです
393デフォルトの名無しさん:2011/12/26(月) 18:39:34.18
hoge_012.txt
hoge_12345.txt
hoge_abcd.txt
みたいなファイル名のファイル群から、hoge部分を消したいんですが
どう書けばいいですか?
ren hoge_*.txt _*.txt
ってやると
_oge_012.txt
_oge_12345.txt
_oge_abcd.txt
とリネームされました
期待する結果は
_012.txt
_12345.txt
_abcd.txt
です
394デフォルトの名無しさん:2011/12/26(月) 22:06:51.92
>>393
ファイル名の先頭のhogeを除去したいなら
for /f "tokens=1,* delims=_" %%a in ('dir /a-d /b ^| findstr /r "^hoge.*_.*"') do (echo "%%a_%%b" "_%%b")
こんな感じかな

ファイル名のどこかのhoge部分を除去したいなら、置換を利用して
for /f "delims=" %%a in ('dir /a-d /b ^| find "hoge"') do (call :renhoge "%%a")
goto :eof
:renhoge
set "name=%~1"
set name=%name:hoge=%
echo "%~1" "%name%"
set name=
goto :eof
こんな感じかな

リネームするときはechoをrenに置き換えてね
395デフォルトの名無しさん:2011/12/26(月) 22:24:34.78
>>394
できました!ありがとう
ワイルドカードで簡単に出来るものだと思ってました
396デフォルトの名無しさん:2011/12/27(火) 16:34:39.16
できるよ
397デフォルトの名無しさん:2011/12/28(水) 01:02:03.81
カレントフォルダにあるすべてのファイルに対して
AABBBtxt→AA-BBB.txt
AACCCtxt→AA-CCC.txt
のように3バイト目にハイフンを入れたいです。
AAは必ず同じ文字列となります。
ren AA* AA-*
としたらAA-BB.txtとなりBが1個きえてしまいました。
どのようにしたらよいでしょうか
398デフォルトの名無しさん:2011/12/28(水) 01:08:57.22
まず
set x=AABBBtxt
をAA-BBB.txtに変えてみな
それができればあとはできるだろ?
399デフォルトの名無しさん:2011/12/28(水) 02:20:05.30
> 3バイト目にハイフンを入れたいです。
set a=%~1
set b=%a:~0,2%-%a:~2%
echo %b%
400デフォルトの名無しさん:2011/12/28(水) 02:22:35.04
> AAは必ず同じ文字列となります。
set a=%~1
set a=%a:AA=AA-%
echo %a%
401デフォルトの名無しさん:2011/12/28(水) 11:18:02.60
batファイルからカラーダイアログを呼び出せることって無理ですか?
402397:2011/12/29(木) 00:13:43.43
>>398-400
ループ処理が難しそうですが、なんとかできそうです。
ありがとうございました。
403デフォルトの名無しさん:2012/01/01(日) 02:26:05.21
mshta "about:<script>function b(){new ActiveXObject('Scripting.FileSystemObject'
).GetStandardStream(1).Write(d.ChooseColorDlg().toString(16));close();}</script>
<body onload='b()'><object id='d' classid='clsid:3050f819-98b5-11cf-bb82-00aa00b
dce0b'></object></body>"|more
404デフォルトの名無しさん:2012/01/05(木) 16:14:43.54
【質問】
 ・1-18までカウントしていく関数(サブルーチン?)を作りたいです。
  調べて自分なりに試しているのですが、上手くいかずに行き詰ってしまいました。
  下記のように、1-9までは01-09のように0を付加して表示したいです。
  01/18
  処理結果
  02/18
  処理結果
【 OS 】
 ・Windows XP Professinal SP3
【構文】
SET /A CNT = 1
SET /A IND = 18

CALL :ZERO %CNT%

:ZERO
IF "%1" LEQ "9" (
SET /A DD = %1
SET /A DD += 100
SET /A ABC = %DD:~-2%
ECHO %DD:~1,2%/%IND%
SET /A CNT+=1
)
EXIT /B

よろしくお願いします。
405デフォルトの名無しさん:2012/01/05(木) 17:07:34.22
> 1-18までカウントしていく関数(サブルーチン?)を作りたいです。
仕様がよくわからん。18超えたらどうするの?
01,02,03,・・・17,18とechoさせたいわけじゃないよね?
処理結果とあるけど、別の処理をループさせてのカウントかな?
だとすればわざわざサブルーチンにしなくても set CNT=101
で101-118をカウントして %CNT:~-2% で表示させればいい

@echo off
set CNT=100
:loop
set /a CNT+=1
echo %CNT:~-2%/18
echo 処理結果
if not %CNT%==118 goto :loop
pause
406450: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
407404:2012/01/05(木) 18:43:23.40
>>404です。
>406の名前欄が間違っていました。
失礼しました。

※教えていただいてできたので良かったのですが、
>>404でなぜうまく動作しないのか謎でモヤモヤが。

どうもありがとうございました。
408デフォルトの名無しさん:2012/01/05(木) 21:09:16.86
>>407
if "12" leq "9" echo 文字列の比較は一桁目から
409デフォルトの名無しさん:2012/01/05(木) 21:11:30.07
×一桁目
○左
410デフォルトの名無しさん:2012/01/08(日) 22:31:16.99
コマンドプロンプト上で
for /L %i in (1,1,10) do @(set /a 123)
とやると
123123123123123123123123123123
と改行挟まずに出力されるんですが、これのメカニズムを誰か説明してください。
411デフォルトの名無しさん:2012/01/08(日) 22:46:19.69
set が改行を剥いでいるんじゃね。

set /P とかで、入力は改行で終了するだろうけど、結果には改行が入っていない方が便利だし。
412デフォルトの名無しさん:2012/01/08(日) 23:14:53.08
setが改行を出さないだけだろ
413デフォルトの名無しさん:2012/01/12(木) 19:02:34.30
:loop
execcommand
sleep 600
goto loop

というループがあって
真ん中あたりでユーザーがその挙動を変えられるようにしたいんだけど
何も入力がなければループを妨げない、
入力があったらキーを set key=? して
call :setoption
するにはどうすればいいでしょう。
414デフォルトの名無しさん:2012/01/12(木) 19:47:08.87
>>413
http://www.vector.co.jp/soft/dos/util/se053514.html
こういうツール使うとか
これがまともに動くかどうかわからないから試してダメだったら
似たようなの探すか、作って配布してくれ
415デフォルトの名無しさん:2012/01/12(木) 20:36:27.20
choice/?
416デフォルトの名無しさん:2012/01/12(木) 22:04:41.80
tomeout/?
417デフォルトの名無しさん:2012/01/12(木) 22:42:42.89
treeを入れるとそのディレクトリのファイルをツリー形式で出力されますが
これに加えてファイル名+サイズ名+最終更新日を出力したいのですが可能でしょうか?
418デフォルトの名無しさん:2012/01/12(木) 23:00:03.63
dir /s を整形するとか。。めんどくさそうだけど。
419デフォルトの名無しさん:2012/01/12(木) 23:03:13.11
vbs とかで作った方が楽かと。
420デフォルトの名無しさん:2012/01/12(木) 23:18:18.22
バッチでは?
421デフォルトの名無しさん:2012/01/13(金) 01:17:12.05
ttp://www1.axfc.net/uploader/Sc/so/309130.jpg
ttp://www1.axfc.net/uploader/Sc/so/309131.zip
こんなのどう
普通にtreeするのに比べるとめちゃくちゃ遅いけど
表示のスタイルは tree /a /f を参考に
ファイルの表示は dir /a-d /t:w を行ごとに
422デフォルトの名無しさん:2012/01/13(金) 05:19:27.39
423デフォルトの名無しさん:2012/01/13(金) 06:58:49.41
>>422
スレチ
424デフォルトの名無しさん:2012/01/13(金) 15:57:19.14
>>415-416
choiceはできそうだけど、timeoutはどう判定すんだ?
425デフォルトの名無しさん:2012/01/13(金) 17:00:32.46
むりぽ
426デフォルトの名無しさん:2012/01/13(金) 22:16:52.32
画面で区別できんだからバッチでもできるっしょ
427デフォルトの名無しさん:2012/01/14(土) 02:31:56.51
だめぽ
428デフォルトの名無しさん:2012/01/15(日) 00:23:57.26
%1に渡したファイルやフォルダがルートにあるのかどうかを判定するのってどう書けばいいですか?
%~1が3文字だったら、とか思いついたけどもっと上手い方法だったり定石があるなら教えてください
429428:2012/01/15(日) 00:25:03.61
訂正します
> %~1が3文字だったら
%~dp1が3文字だったら
430デフォルトの名無しさん:2012/01/15(日) 00:36:58.61
UNCとかにも対応したいなら
set a=%cd%
push ..
set b=%cd%
popd
して比較するとか
431デフォルトの名無しさん:2012/01/15(日) 01:41:37.76
"%~p1" == "\" だとダメなの?
432デフォルトの名無しさん:2012/01/15(日) 09:17:31.43
>>430
ありがとうございます
UNCのことはすっかり失念していました
cdでUNCはカレントに出来ないと言われて困りましたけど
pushd "%~dp1" で勝手にネットワークドライブの割り当てをやってくれて
カレントディレクトリを移すことが出来ました
>>431
それでよかったですよねありがとう


pushd "%~dp1"
if exist "%cd%\%~nx1" (call :ROOTEXP "%cd%\%~nx1") else echo ファイル見つからない
pause
exit
:ROOTEXP
echo "%~1"
echo "%~dpnx1"
if "%~p1"=="\" (echo ルートディレクトリにあるよ) else echo ルートじゃないよ
exit /b

一応、これで意図した動作になりました
ルートにあるファイルやフォルダの場合、echo "%~1" がZ:\\test.txt のように\\となるのですが
正常に動いてるみたいですし、"%~dpnx1"で正しいパスは取れるのですが
この書き方で問題が出るケースはありますでしょうか?
433デフォルトの名無しさん:2012/01/15(日) 20:29:01.37
空きメモリか使用メモリを標準出力でゲットするコマンドないですか。
memはさすがに消滅していたw
434デフォルトの名無しさん:2012/01/15(日) 21:04:49.82
wmic
435デフォルトの名無しさん:2012/01/16(月) 00:29:25.23
tasklistの各行の出力結果を合計してみるとか
436デフォルトの名無しさん:2012/01/16(月) 03:38:43.26
それはねーよ
437デフォルトの名無しさん:2012/01/16(月) 12:21:08.71
wmic調べてみます。ありがとうございました。
438デフォルトの名無しさん:2012/01/16(月) 12:27:17.34
wmic os get freephysicalmemory
439デフォルトの名無しさん:2012/01/16(月) 17:08:24.54
for /f %%i in ('wmic os get freephysicalmemory') do set x=%%i
echo %x%

ECHO は <ON> です。
440デフォルトの名無しさん:2012/01/16(月) 17:35:24.25
for /f "eol=F" %i in ('wmic os get freephysicalmemory') do echo %i
441デフォルトの名無しさん:2012/01/16(月) 17:49:41.37
ECHO は <ON> です。
442デフォルトの名無しさん:2012/01/16(月) 21:14:43.83
for /f "skip=1" %i in ('wmic os get freephysicalmemory') do if not defined mem set mem=%i
echo %mem%
443デフォルトの名無しさん:2012/01/16(月) 23:58:50.04
for /f %i in ('wmic os get freephysicalmemory') do (call set x=%i) & if defined x call set mem=%i
echo %mem%
444デフォルトの名無しさん:2012/01/17(火) 03:36:44.19
'wmic' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
445デフォルトの名無しさん:2012/01/17(火) 14:12:06.16
Windows 2000以降のOSではWMIが標準で実装されている
Windows 2000にはwmic.exeは用意されていない
446デフォルトの名無しさん:2012/01/17(火) 15:37:33.32
それを言うならXP以降だろw

以降はそれも含むんだから
447デフォルトの名無しさん:2012/01/17(火) 18:17:43.40
win2kはwmiコンポーネント実装済みだけどwmicは同梱されていないって事じゃね?
448デフォルトの名無しさん:2012/01/17(火) 19:55:57.58
それを言うなら>>446阿呆だろw
449デフォルトの名無しさん:2012/01/18(水) 00:35:34.90
xp homeはwmic入ってないのか
450デフォルトの名無しさん:2012/01/22(日) 15:35:57.54
D:\MUSIC\(複数アーティスト)\(各々に複数アルバム)\Resize\Folder.jpg という階層で
Folder.jpgを1つ上のディレクトリに上書き移動して、Resizeフォルダを削除したいのですがうまくできません。
ご教示いただけないでしょうか、一所懸命初めてバッチ書いてみましたがたぶん見当はずれです

cd /d D:\MUSIC
for /d %%A in (*) do (
cd %%A
for /d %%B in (*) do (
cd %%B\Resize
move /y Folder.jpg ..\Folder.jpg
cd ..
rd /s /q Resize
)
)
451デフォルトの名無しさん:2012/01/22(日) 16:36:07.61
>>450
cd /d d:\music
dir /a-d /b /s Folder.jpg >list_fjpg.txt
dir /ad /b /s Resize >list_Resize.txt
処理するファイルが上のリストで問題ないようならこれで出来ると思う
for /f %%a in ('dir /a-d /b /s Folder.jpg') do move "%%~a" ".."
for /f %%b in ('dir /ad /b /s Resize') do rd /s /q "%%~b"

Resizeフォルダ以外にもFolder.jpgがあって上のがダメなら
dir /a-d /b /s Folder.jpg|findstr /e /l /i "\Resize\Folder.jpg" >list_fjpg.txt
これでたぶん大丈夫だと思うけど試してダメだったらfindstrのオプションとか工夫してみて
452デフォルトの名無しさん:2012/01/22(日) 16:36:27.77
cdをpushdやpopdに変えて試してみてね
453デフォルトの名無しさん:2012/01/22(日) 16:49:17.51
>>450
cd /d "D:\MUSIC"
for /d /r %%a in (*) do (
pushd "%%a"
call :movejpg "%%~na"
popd
)
goto :eof
:movejpg
if not "%~1" == "resize" (if not "%~1" == "Resize" goto :eof)
move Folder.jpg ..\
cd ..\
rmdir resize
goto :eof
454デフォルトの名無しさん:2012/01/22(日) 16:51:54.76
jpgを拾うようにした自前のものがよく似ていたので1行目だけ編集したのを貼ってみる。

cd /d D:\MUSIC
for /r /d %%i in (*) do (
if exist "%%i\resize" (
move "%%i\resize\*.jpg" "%%i"
rd /s /q "%%i\resize"
)
)

趣旨が違うかもしれないが。
455デフォルトの名無しさん:2012/01/22(日) 18:06:41.19
>>454のを少し弄って
cd /d D:\MUSIC
for /r /d %%i in (*) do (
if exist "%%i\resize\folder.jpg" (move /y "%%i\resize\folder.jpg" "%%i"&&rd /s /q "%%i\resize")
)
これで質問者の要求仕様を満たすんじゃね?
456450:2012/01/23(月) 09:47:50.42
みなさんありがとうございます!
せっかくなので環境をコピーして4つとも試してみましたがどれもうまくいきました!
バッチファイルが綺麗に完走するのってピタゴラスイッチ的な爽快感がありますね
457デフォルトの名無しさん:2012/01/25(水) 13:55:01.20
2chブラウザのkakikomi.txtを自動で編集して、
日付データと本文部分だけを残すというbatファイルをつくりました

find /v "Subject:" <kakikomi.txt >kakikomi2.txt
find /v "URL :" <kakikomi2.txt >kakikomi3.txt
find /v "From :" <kakikomi3.txt >kakikomi4.txt
find /v "Mail :" <kakikomi4.txt >kakikomi5.txt

というゴリ押しで一応目的は達成できたのですが、時間もかかるし無駄が多い気がします
もっとスマートな書き方もあるのでしょうか?

kakikomi.txt内の書き込みデータは、
--------------------------------------------
Date : 2012/01/01 00:00:00
Subject: スレッドタイトル
URL : http://...
From :
Mail :

本文
--------------------------------------------
のくり返しになっています
458デフォルトの名無しさん:2012/01/25(水) 14:34:47.86
findstr/?
459デフォルトの名無しさん:2012/01/25(水) 14:37:22.65
findstr /b /v "Subject: URL FROM MAIL" "kakikomi.txt" >"kakikomi2.txt"
本文の行頭に同じ文字列があったらその行も消えるけど>>457よりはマシと思う
460デフォルトの名無しさん:2012/01/26(木) 14:49:55.56
>>459
ありがとう!次回からは書いてくれたものを使ってみます
461デフォルトの名無しさん:2012/01/27(金) 23:44:16.41
フォルダ内のtest*.batを順に実行したいのですが、10回callする毎に標準出力に
メッセージを出したく思います
↓を実行すると毎回echoが実行されてしまうのですがどう修正すべきでしょうか?

set /a N=1
for /F %%a in ('dir .\test*.bat /b') do (
call %%a
set /a N = %N% + 1
if "%N%"=="10" do (
echo ----------
set /a N=1
)
)
462デフォルトの名無しさん:2012/01/28(土) 00:15:29.97
>>461
echo onで実行されたバッチがどうなってるか見りゃわかるけど…

遅延環境変数でググってみ。
463デフォルトの名無しさん:2012/01/28(土) 00:56:33.67
for /f %%a in ('dir /b test*.bat') do (
call %%a
call :COUNT
)
pause&exit

:COUNT
set n+=1
if %n%==10 (echo ----------&set n=
)
exit /b
464デフォルトの名無しさん:2012/01/28(土) 00:59:13.37
> set n+=1
set /a n+=1
465デフォルトの名無しさん:2012/01/28(土) 09:22:44.38
遅延環境変数のことを失念していました(ノ∀`)
サンプルまで書いていただいてありがとうございます
466 忍法帖【Lv=5,xxxP】 :2012/01/28(土) 20:05:08.71
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか?
95とかならexec.batをいじるとできるそうですがいい方法無いですかね
マウスでカチカチみんな設定してるの?
467 忍法帖【Lv=5,xxxP】 :2012/01/28(土) 20:06:15.39
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか?
95とかならexec.batをいじるとできるそうですがいい方法無いですかね
マウスでカチカチみんな設定してるの?
468デフォルトの名無しさん:2012/01/28(土) 20:08:12.26
setx
469デフォルトの名無しさん:2012/01/28(土) 20:37:47.45
autoexec.batだろ
470デフォルトの名無しさん:2012/01/28(土) 20:50:34.72
>>467
GUIだけどキーボードだけで設定ダイアログまで行けるぞ
Windowsキー → 「環境変数」と入力 → 上に「環境変数の設定」が出て来たらEnter
471 忍法帖【Lv=5,xxxP】 :2012/01/28(土) 21:30:25.20
Vista/7などで環境変数を永続的に変えるのってCUI(cmd)じゃできないんですか?
95とかならexec.batをいじるとできるそうですがいい方法無いですかね
マウスでカチカチみんな設定してるの?
472デフォルトの名無しさん:2012/01/28(土) 21:43:58.44
>>469-471
>>468で完璧な回答が出てるのに… メクラ?
473デフォルトの名無しさん:2012/01/28(土) 22:00:05.37
exec.batってなんだよ
474デフォルトの名無しさん:2012/01/28(土) 22:02:10.08
>>472
自分で調べる気がないってことでしょ。
スルーでいいよ。
475デフォルトの名無しさん:2012/01/29(日) 22:33:43.17
コンソールで使える日本語TTフォントはMSゴシックしかないの?
476デフォルトの名無しさん:2012/01/30(月) 00:12:38.08
fixed98epsonマジオススメ
477デフォルトの名無しさん:2012/01/30(月) 20:37:29.16
標準で入ってるものではMSゴシックだけ?
478デフォルトの名無しさん:2012/01/31(火) 20:41:10.62
レジストリいじれば好きなTTフォント使える。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
でググれ
479デフォルトの名無しさん:2012/01/31(火) 21:41:35.10
ほんとかよ 使えなかったが?
480デフォルトの名無しさん:2012/01/31(火) 23:24:15.61
俺は使えてる、XP x64。
レジストリ微妙に何か間違ってるか、プロンプトを間違えているとか?
64bit OS で 32bit の cmd.exe を常用してる?

↓が『64bit OS で 32bit の cmd.exe 』の場合
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
481デフォルトの名無しさん:2012/01/31(火) 23:27:13.38
プッ
482デフォルトの名無しさん:2012/02/01(水) 03:05:05.71
コマンドプロンプトから引数を与えたときはちゃんとaiueo.txt作れるんだけど
ドラッグアンドドロップでやるとaiueo.txtを作ってくれない
どうしたらD&Dで引数受け取ったとき出力をファイルに書き出せる?

aiueo.bat
-------------------
setlocal
set a=aiueo.txt
if not exist %a% (echo Aiueo > %a%)
date /t >> %a%
time /t >> %a%
echo %1 >> %a%
endlocal
483482:2012/02/01(水) 03:12:11.39
ごめんなさい自己解決しました
バッチファイルのあるフォルダじゃないとこに保存されてた・・・
484デフォルトの名無しさん:2012/02/01(水) 04:40:16.31
>%~dp0%a%
485482:2012/02/03(金) 03:10:09.37
d
486忍法帖:2012/02/05(日) 01:47:02.01
--------終了-------
487忍法帖:2012/02/05(日) 01:47:36.54
--------終了-------
488デフォルトの名無しさん:2012/02/05(日) 03:25:30.09
質問をさせて下さい。
親フォルダにbatを置いて実行し、batの力でそこから子フォルダ、よく孫フォルダ、たまに曾孫
稀により下のバラバラな階層にある複数の最下層フォルダを、順々にカレントディレクトリ
にしたいのですが、どうやればよいのでしょうか?
やりたいことは最下層フォルダにあるファイル数が10個未満の場合に
その最下層フォルダを任意の場所に移動したいのです。

最下層フォルダからの個別移動に関しては最後の削除あたりがうまくいきませんでしたが
それ以外はこのスレを参考にして、なんとか動かすことができました。ありがとうございます。
後は親から複数の最下層フォルダに辿り着ければ何とかなりそうなのですが…
どうか知恵をお貸しください。よろしくお願いします。

個別の処理.bat
for /f %%a in ('dir /a-d ^|find "個のファイル"') do (
echo %%a
if %%a LSS 10 ( call :IDOU ) else ( echo 10個以上ある )
)
exit /b

:IDOU
echo このフォルダ内のファイル数は10個未満
for %%I in ("%~dp1.") do (
md "%%~nxI"
set DNAME="%%~nxI"
move *.* "%~dp0%%~nxI"
move "%~dp0%%~nxI" "C:\Users\XXX\Desktop\移動先\"
cd ..
pause
del "%~dp0%%DNAME:~1,-1%"
)
exit /b
489デフォルトの名無しさん:2012/02/05(日) 05:35:08.76
>>488
カレント配下のディレクトリ全てで最下層であるかどうかの判定

for /d /r %%a in (*) do (
for /f "usebackq" %%b in (`dir /ad "%%a"^|find "個のディレクトリ"`) do (
if %%b==2 (echo "%%a" の下にディレクトリはないよ)
)
)
pause
exit /b

> 最下層フォルダからの個別移動に関しては最後の削除あたりがうまくいきませんでしたが
echo on にしてみれば何が悪いか分かるはず
490デフォルトの名無しさん:2012/02/05(日) 05:35:19.42
>>488
:IDOUをcallするときに引数いれてないけど、:IDOUの中で%~dp1って使う意味はあるの?
それとsetするときはset v="〜"じゃなくてset "v=〜"ってしたほうがいいと思うよ
そうすれば変数の中にダブルクォーテーションが入らない
delのところも普通に%DNAME%と書けるようになる
ところでdelのところ%の数がおかしいんじゃないか?
削除がうまくいかない原因はそれではなかろうか

最下層の判定は、そのディレクトリ内のディレクトリの個数調べればいいんじゃね
ディレクトリを順に回りたければ
for /d /r %%a in (*) do (pushd "%%a" 〜)
とか
for /f "delims=" %%a in ('dir /ad /s /b') do (pushd "%%a" 〜)
とか?
こんな感じで実行したところからサブディレクトリを全部回ってくれるんじゃないかな
491デフォルトの名無しさん:2012/02/05(日) 05:40:35.55
レスがかぶっちゃった
delはファイルじゃなくてディレクトリ消したいのか
だったらそもそもdelじゃなくてrmdirにしないと
492デフォルトの名無しさん:2012/02/05(日) 06:14:41.60
>>488
set MVDIR="C:\Users\XXX\Desktop\移動先"

for /d /r %%a in (*) do (
for /f "usebackq" %%b in (`dir /ad "%%a"^|find "個のディレクトリ"`) do (
if %%b==2 (
for /f "usebackq" %%c in (`dir /a-d "%%a"^|find "個のファイル"`) do (
if %%c lss 10 ( move "%%a" "MVDIR" )
))))
pause
exit /b
493デフォルトの名無しさん:2012/02/05(日) 11:23:22.56
実行しなくてもわかる、1個目はリネーム、2個目以降は上書き確認でストップ
494デフォルトの名無しさん:2012/02/05(日) 12:29:44.08
>>489
以前はusebackqも/rも難しく考えて良く分からなかったのですが
このような身に沁みて実用的なアドバイス頂いたお陰で身近な存在になれました。
ググッて他の実用例を見ながら勉強します。ありがとうございます。とても参考になりました。

後はecho onについてなんですが、これは最初の行に@echo onと書くだけで良いのでしょうか?
現在はecho 変数 かアヤシイ直後にpauseでcmd画面の直前を確認する位しか方法が分かりません
初歩的な質問ですみませんが、もしよろしければご指導頂ければ助かります。

>>490
カレントフォルダ名を取得しようとしたforになりますが%~dp0.ですね、失礼しました。
それとsetについてですが、二重の"のうち1つを削る様な場面では有効でしたが
例えばset "v=v&v"とするとecho "%v%"では大丈夫でも%v%ではバグるみたいでした。
もし私のやり方が間違っていたらごめんなさい…けど便利ですね。
これからは使わせて頂きます。最下層判定と合わせてありがとうございました。
495デフォルトの名無しさん:2012/02/05(日) 12:31:41.87
>>491
cdの行を消してrmdir "%~dp0"としてみましたが出来ませんでした。
「プロセスはファイルにアウセスできません。別のプロセスが使用中です。」
との事だったので、そもそもの消すフォルダからbatを実行したのでは難しそうと思い
試しにrmdir "C:\Users\owner\Desktop\移動先\新しいフォルダ"
としてみたら無事に消す事が出来ました。ありがとうございます。

>>492
ありがとうございます!無事に出来ました!
粋な"MVDIR"のお陰でもう忘れないと思います。
後はじっくり解読しながら使いこなせるよう頑張ります。
わざわざ全文書いて頂きどうもありがとうございました。

>>493
>2個目以降は上書き確認でストップ
483では出てきませんでしたが、確かに他の書き方だと出てきました。
てっきり削除確認のY/Nかと思ってましたが上書きだったんですか…
思いもしませんでした。ご指摘どうもありがとうございました。
496デフォルトの名無しさん:2012/02/05(日) 13:04:19.85
>>494
echo %v%でばぐるのかな
これは&を^&に置換するか、
setlocal enabledelayedexpansion
としておいて、echo !v!とかすればちゃんと&も表示されるよ
497デフォルトの名無しさん:2012/02/07(火) 17:07:11.18
置換するにも、遅延しないとできねえよ
498デフォルトの名無しさん:2012/02/09(木) 18:25:43.69
windowsのスタートアップの中でバッチファイルを動かして、他のマシンにマジックパケットを
送りたいんですが、どうもその時点で無線LANが繋がってないようで、対象マシンがWakeUp
してくれません。
バッチ処理を遅延するにはどうしたらよいですか?
499デフォルトの名無しさん:2012/02/09(木) 19:04:48.67
ping -n
timeout
500デフォルトの名無しさん:2012/02/09(木) 21:01:48.95
Vista 以降ならむしろ、スタートアップじゃなくてタスク向きな気がする。
501デフォルトの名無しさん:2012/02/09(木) 21:15:45.22
:loop
ping -n 1 "192.168.0.1"||goto :loop
502デフォルトの名無しさん:2012/02/09(木) 21:29:06.33
powershell -command { start-sleep -s 5 }

なんでWindowsって意地でもsleep標準装備しないんだYO!
503デフォルトの名無しさん:2012/02/09(木) 21:52:33.59
>>502
これ以上Unixからパクるのはプライドが許さないから
なんちてw
504498:2012/02/09(木) 22:27:55.28
みなさま、ありがとうございます。
とりあえず、対象マシンがスリープ状態なので、ping に応答しません

timeout と powershell-command {start-sleep -s 120 }
を試してみたんですが、起動後ならうまく動くんですが、
スタートアップから起動すると、うまく行きません
電文の送信に失敗しました、とか一瞬表示されてパケットは送られていないようです。
505デフォルトの名無しさん:2012/02/09(木) 22:36:54.27
スタートアップだから動かないってことはないだろう
最終行にpause入れて何がどう駄目なのか調べてデバッグするしか
506デフォルトの名無しさん:2012/02/09(木) 22:42:57.44
> 対象マシンがスリープ状態なので、ping に応答しません
無線LAN親機とかデフォルトゲートウェイにpingしてLANが繋がってからマジパケ送ればいい
507デフォルトの名無しさん:2012/02/10(金) 15:18:28.31
システムのパスにbatファイルから一時的に追加する書き方を教えてください
508デフォルトの名無しさん:2012/02/10(金) 15:36:47.43
sex
509デフォルトの名無しさん:2012/02/10(金) 17:29:08.94
set PATH=c:\bin;C:\tool;%PATH%
510デフォルトの名無しさん:2012/02/10(金) 19:16:11.19
path /?
511498:2012/02/10(金) 20:59:56.43
>505,506
そうか、pingは自分のethを試すためだったんですね。
powershellもぐぐってやっと動く用になりました。
ありがとう
512デフォルトの名無しさん:2012/02/11(土) 01:09:40.46
>>502
PowerShellを標準装備するようにしたから、わざわざcmd用に作る必要がないってだけじゃね?
まあたいした手間でも全然ないとは思うが
513デフォルトの名無しさん:2012/02/11(土) 15:44:36.41
質問なんですが、
ping 192.168.0.4 | find "Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)"
echo %errorlevel%

上記をbatで行うと、pingが0%lossでも戻り値が1になってしまいます。

ただ上記のコマンドをプロンプトで実行→echo %errorlevel%で確認すると戻り値は0となります。

これは何故なんでしょうか?
514デフォルトの名無しさん:2012/02/11(土) 15:56:01.63
ローカルにサーバを立ててましてIPが127.0.0.1になります
サーバが動いているかをbatファイルで監視して、サーバが落ちたらbatファイルを終了すると方法を伝授してください
515デフォルトの名無しさん:2012/02/11(土) 15:59:23.21
>>513
バッチファイルにも(0% loss)ってそのまま書いてる?
もしそうなら%を%%にしてやってみて
516デフォルトの名無しさん:2012/02/11(土) 18:21:04.29
>>515
出来ました!ありがとう御座います

でも「0%」だと何かの変数を展開しようとするんですかね?
それを新たに%を付けて文字列として扱う用にしてるとか…

どっちにしろ""で囲んだら変数は展開されないっていう認識だったのでそれも間違いみたいですね…

勉強してきます

517デフォルトの名無しさん:2012/02/11(土) 20:05:54.56
wgetを使ってソフトの最新バージョンをDLできるバッチを作成したいと思ってるのですが
ファイルのリンクがttp://hoge/更新日付/a-z,0-9を含む不規則な文字列/v1.0.0.zip
のような場合で不規則な文字列に対応させるにはどう記述すればいいでしょうか
日付は%date%で置き換えられるのが分かりましたが今回の件で詰まってしまいました・・・
518デフォルトの名無しさん:2012/02/11(土) 20:06:05.33
>>514
@echo off
:pingchk
ping 127.0.0.1 -n 2
if errorlevel 1 goto end
if errorlevel 0 goto pingchk
:end

これで行けるかと
相手先ノードへのping間隔を多くしたいならlocalhostへのpingでsleepにしておけばいいと思います
519デフォルトの名無しさん:2012/02/11(土) 20:35:28.07
@echo off
:re
ping 0.0.0.1||goto re
:end
520デフォルトの名無しさん:2012/02/11(土) 20:47:39.62
for /f "tokens=4 delims=/" %%a in (target.html) do (echo ttp://hoge/更新日付/%%a/v1.0.0.zip)
521デフォルトの名無しさん:2012/02/12(日) 01:24:18.48
>>517
直リン or 不規則な部分、の入ったページがあるならそのページをゲットして
URL を抜き出す or フルのURLを生成、すればいいじゃない
522デフォルトの名無しさん:2012/02/12(日) 11:55:51.46
>>518
ありがとうございます!
523デフォルトの名無しさん:2012/02/12(日) 11:59:26.64
>>518
試してみたんですが、動きませんでした
Windowsにapacheを入れてサーバ起動後にbatファイルを起動して、サーバを終了させても batファイルが終了しませんでした
524デフォルトの名無しさん:2012/02/12(日) 12:13:29.84
鯖が生きてるかどうかとpingが通るかは別だろ
もっとまともなスクリプト使ってチェックするか
wgetしてファイルの中身チェックするか
wget http://localhost/test.htm || echo 死んでる
525デフォルトの名無しさん:2012/02/12(日) 13:22:54.48
>>523
@echo off
:pingchk
tasklist | findstr apache.exe
if errorlevel 1 goto end
if errorlevel 0 goto pingchk
:end
526デフォルトの名無しさん:2012/02/12(日) 13:31:34.25
>>520-521
ありがとうございます
for /f "tokens="勉強になりました
調べまくってようやく521さんの答えにたどり着いたとこでした
527デフォルトの名無しさん:2012/02/12(日) 13:52:56.86
>>524
サーバが停止してたら127.0.0.1にアクセスできなくなるのですがこれは通らないものなんですかね?
>>525
プロセスを監視する方法がいいのかもしれません
そのまま実行するとcpu100%になってしまうので1秒スリープをいれたいのですが
@echo off
:pingchk
ping 198.162.0.0 -n 1 -w 1000>nul
tasklist | findstr httpd.exe
if errorlevel 1 goto end
if errorlevel 0 goto pingchk
:end
とやって1秒スリープを入れてるのですがスリープされません
ping 198.162.0.0 -n 1 -w 1000を単品でdosに打つとタイムアウトはしたので存在しないipであります
528デフォルトの名無しさん:2012/02/12(日) 14:31:07.38
>>527
> サーバが停止してたら127.0.0.1にアクセスできなくなるのですが

そのアクセスとはHTTPアクセスであって、応答無くなるのは
それはwebサーバが停止しているだけの話で
PCそのものネットワークが有効か調べるpingとは直接関係ないから。
529デフォルトの名無しさん:2012/02/12(日) 16:47:17.56
ヘタすると、OS死んでても ping 応答する奴すらあるし。
530デフォルトの名無しさん:2012/02/12(日) 22:38:45.91
>>526
おめ

>>527
ちょい外れるけど
198.162.0.0
への ping がキモ過ぎる……


Apache ならサービスで起動しておいてサービスの状態を監視する方がスマートだと思う。

sc <サーバー> query Apache2.2 | findstr "RUNNING" 1>nul 2>&1
if エラーレベル なんちゃら

みたいに。
531デフォルトの名無しさん:2012/02/15(水) 02:49:03.22
テスト
copy a Ā
532デフォルトの名無しさん:2012/02/15(水) 02:52:17.36
Microsoft Windows XP [Version 5.0.2195]
(C) Copyright 1985-2001 Microsoft Corp.

>copy a Ā
Ā was unexpected at this time.

なんでこうなるの?
533デフォルトの名無しさん:2012/02/15(水) 03:05:39.01
>copy a Ă
1 file(s) copied.
これはokなのに…
534デフォルトの名無しさん:2012/02/15(水) 06:17:53.00
codepageは?
535デフォルトの名無しさん:2012/02/15(水) 08:09:38.30
D:\>chcp
現在のコード ページ: 932

D:\>copy a Ā
Ā の使い方が誤っています。

D:\>copy a Ă
1 個のファイルをコピーしました。

なんだろこれ
536デフォルトの名無しさん:2012/02/15(水) 09:54:38.86
調べてみたらこんな感じ

switch (c){
 case '&':
 case '<':
 case '>':
 case '|':
  return 0x100;
 default:
  return c;
}
537デフォルトの名無しさん:2012/02/15(水) 11:08:50.01
Ā = Ā
538デフォルトの名無しさん:2012/02/15(水) 11:14:57.58
Ā = &#x100;
539デフォルトの名無しさん:2012/02/15(水) 12:17:59.80
C:\proc\data\ ディレクトリ内にある
音響.txt さくら.txt 夕暮れ.txt 冬籠もり.txt 花 暦.txtなどの複数ファイルのうち、
ひとつずつloop+moveで処理したいと思っています

find "C:\proc\data\" -maxdepth 0 -name "txt" -exec set input_file = {} \;

call "C:\proc\resize.bat" "%input_file%"
move %input_file% "C:\proc\data\move\"

txtでファイルを検索し、moveでresize.bat適用後にファイルを移動させることで
最終的にC:\proc\data\内のファイルがなくなって処理終了、と考えているのですが

最初のfindコマンドが「操作可能なプログラムまたはバッチ ファイルとして認識されていません」と表示されてしまいます

おそらく最初のコマンドがunixコマンドなのだと思うのですが
dosコマンドで同じように、特定のフォルダからファイルのパスをひとつだけ検索して変数に置き換えられるコマンドにするにはどうすればいいでしょうか
よろしくお願いします
540デフォルトの名無しさん:2012/02/15(水) 12:36:31.32
for %f in (C:\proc\data\*.txt) do echo %f
次回は「バッチファイル」で検索してから質問する事。

> find "C:\proc\data\" -maxdepth 0 -name "txt" -exec set input_file = {} \;
> call "C:\proc\resize.bat" "%input_file%"
> move %input_file% "C:\proc\data\move\"

そもそも、findがあっても動かねーだろ。w
541デフォルトの名無しさん:2012/02/15(水) 14:12:40.98
それ以前にfindが無いってのはどういうこと?
win98にはあったような…。win95位前は覚えてないんだけど。
542デフォルトの名無しさん:2012/02/15(水) 14:22:32.94
winのはfindはコマンドが違うし別物
どこからか落としてきて使えないことはないけどfor /f使うのがめんどくさい
543デフォルトの名無しさん:2012/02/15(水) 14:27:51.28
いやそれは知ってるけどさ、元からある奴は消さなきゃ無くならないだろ。

最初からないっていう環境はあんの?
544デフォルトの名無しさん:2012/02/15(水) 15:51:48.05
>>539の事だから、どんなことやってるか凡人には想像もできない。
するだけ無駄だから「無い」はそのまま受け入れよう。
545デフォルトの名無しさん:2012/02/15(水) 16:11:39.69
forfiles使えよ
546デフォルトの名無しさん:2012/02/15(水) 17:14:35.31
>>540
うまくいきました!ありがとうございます!

やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね
547デフォルトの名無しさん:2012/02/15(水) 17:37:03.90
>やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね

だって
548デフォルトの名無しさん:2012/02/15(水) 17:45:33.75
UNIXを知ってると自慢したいだけだろw
549デフォルトの名無しさん:2012/02/15(水) 17:54:23.44
一応forfilesがunixのfindもどきなんだけどね。
一応findstrがunixのqgrepもどきなんだけどね。
550デフォルトの名無しさん:2012/02/15(水) 18:49:41.24
551デフォルトの名無しさん:2012/02/15(水) 19:02:11.46
こんなゴミのリンク貼るなよ。
>>550
サポートされているオペレーティング システムWindows 2000 Service Pack 3/Windows 2000 Service Pack 4/Windows Server 2003/Windows XP
552デフォルトの名無しさん:2012/02/15(水) 20:19:45.98
すいません、教えてください。

バッチファイルの中の処理でファイルを作成するステートメントを書きます。

次のステートメントの処理が始まるのは、先のファイル作成の完了(ディスク上にファイルができる)の後ということでよいでしょうか。

コマンドプロンプトを考えれば、そうなると思うのですが、念のため。例えば外部ディスクへの書き込みまちなどをしている間に、次の処理が始まるということはないでしょうか。

初歩的な質問ですがお願いします。
553デフォルトの名無しさん:2012/02/15(水) 21:16:05.18
普通に考えれば分かるだろ?
554デフォルトの名無しさん:2012/02/15(水) 21:33:11.21
へえ?どう分かるんだ。教えろ。
555デフォルトの名無しさん:2012/02/15(水) 21:40:23.55
基本的に逐次処理されるよ
ただしstartコマンドは/waitしない限りプロセスを起動して終了を待たずすぐ制御を返す
556デフォルトの名無しさん:2012/02/15(水) 21:44:12.61
当たり前すぎて、つまらないレスですね
557デフォルトの名無しさん:2012/02/15(水) 21:47:07.31
前のコマンドの終了を待たずに次のコマンドを実行するってことは
前のコマンドの実行開始とほぼ同時に次のコマンドを、更にその次を…ってことで
全てコマンドを同時実行するに等しい
558デフォルトの名無しさん:2012/02/15(水) 21:52:43.88
書き込み量が多くてバッファに残ってるのに
次の処理が始まる可能性は?
559デフォルトの名無しさん:2012/02/15(水) 21:56:07.57
>>558
頭悪そう
560デフォルトの名無しさん:2012/02/15(水) 21:58:16.11
頭悪いひとが悩むようには作られてないってことだよw普通に考えれば
561デフォルトの名無しさん:2012/02/15(水) 22:03:42.82
プロセスから見て終了していても、
実際には終了していない場合もある
562デフォルトの名無しさん:2012/02/15(水) 22:15:24.97
下手の考え休むに似たり
563デフォルトの名無しさん:2012/02/15(水) 22:18:41.49
具体的に反論してくれないとつまらん。
頭良いんだろ?お前ら
564デフォルトの名無しさん:2012/02/15(水) 22:19:44.80
お前を楽しませてどうするbkk
565デフォルトの名無しさん:2012/02/15(水) 22:23:41.72
つまんね
566デフォルトの名無しさん:2012/02/15(水) 22:30:17.34
start hoge
nanika
matiawase hoge
ってどうやればいい?
567デフォルトの名無しさん:2012/02/15(水) 22:34:21.30
頭悪いんで質問の意味が分からん
568デフォルトの名無しさん:2012/02/15(水) 23:19:12.92
start hoge.bat
nanika

hoge.bat
start /w hoge.exe
matiawase hoge以下でやりたかったこと
569デフォルトの名無しさん:2012/02/15(水) 23:20:08.67
わからんならスルーしろよw
570デフォルトの名無しさん:2012/02/15(水) 23:29:55.10
それだと
matiawase hoge以下でやりたかったこと が nanika のあとにならんだろ
571デフォルトの名無しさん:2012/02/15(水) 23:31:59.90
echo ^G
はどうやりぃい?
572デフォルトの名無しさん:2012/02/16(木) 00:15:55.68
hoge|nanika
matiawasego
だな
573デフォルトの名無しさん:2012/02/16(木) 00:20:12.51
>>569
誰に言ってるんだよ
俺は知らんぞ
574デフォルトの名無しさん:2012/02/16(木) 07:54:23.11
552の質問をしたものです。

別プロセスを起動しない限り、先の処理の完了をもって次の処理が始まる
ということですね。何をもって完了というところが、疑問だったのですが、
基本的には、ファイル作成なら作成完了で制御情報が返ってきて、プロセス
が完了と判断すると考えることにしました。

皆様レスありがとうございました。
575デフォルトの名無しさん:2012/02/16(木) 21:26:17.89
下手の考え休むに似たり
576デフォルトの名無しさん:2012/02/17(金) 16:38:44.25
copy 巨大ファイル
なんてやってると、copyから復帰してもガリガリやってるな
577デフォルトの名無しさん:2012/02/19(日) 00:40:52.49
578デフォルトの名無しさん:2012/02/19(日) 12:51:23.53
hou

>for %i in ("<html></html>") do echo %~i > index.htm
>type index.htm
<html></html>
579デフォルトの名無しさん:2012/02/20(月) 10:43:13.48
親フォルダは削除せずに、サブフォルダだけを削除する方法ってありますか?

今は仕方がないので
rd C:\aaa /s /q
mkdir C:\aaa
という風にしています。
580デフォルトの名無しさん:2012/02/20(月) 11:17:08.69
for /d %d in (c:\aaa\*) do rd /s /q %d
581デフォルトの名無しさん:2012/02/20(月) 17:33:05.60
cd C:\aaa
rd . /s /q
582デフォルトの名無しさん:2012/02/20(月) 17:55:32.97
cmdのカレントディレクトリって何故かロックされるんだよな
Explorerからの削除を妨害されて何度泣いたことか
583デフォルトの名無しさん:2012/02/20(月) 18:20:43.56
カレントディレクトリが勝手に削除されたら困るだろが?
584デフォルトの名無しさん:2012/02/20(月) 19:24:16.57
>>580
ありがとうございます
空フォルダが残ってしまいませんか?

>>581
ああ!たしかにこれで充分ですね!
585デフォルトの名無しさん:2012/02/20(月) 19:30:49.87
cd, pushは必ず結果をチェックしないといつか泣きをみるぞ

cd C:\aaa || goto error
rd . /s /q
...

:error
pause
goto :eof
586デフォルトの名無しさん:2012/02/20(月) 20:23:36.15
んじゃ

cd C:\aaa && rd . /s /q
587デフォルトの名無しさん:2012/02/22(水) 02:42:34.41
最後に goto :eof とか書くのは意味あるのか?
588デフォルトの名無しさん:2012/02/22(水) 02:52:17.45
cd の後に rd . /s /q とか怖いぞ
cd /d にしたほうが安全
589デフォルトの名無しさん:2012/02/22(水) 03:40:34.17
バッチは途中でエラーがあっても突っ走るから怖いぞー
590デフォルトの名無しさん:2012/02/22(水) 20:46:15.45
ビビッテンジャネーヨ!
591デフォルトの名無しさん:2012/02/22(水) 21:13:52.68
>>587
その後に別のエラー処理を追加するケースとかを想定してんじゃね?
592デフォルトの名無しさん:2012/02/23(木) 00:07:30.67
cdやpushdなんてせずにフルパス指定すればいいじゃん(いいじゃん)
593デフォルトの名無しさん:2012/02/23(木) 00:08:54.73
どうしてもカレントディレクトリを変える必要があるのって
どんなケース?
594デフォルトの名無しさん:2012/02/23(木) 00:48:49.77
更新日時の更新はどうやるんだっけ?
595デフォルトの名無しさん:2012/02/23(木) 00:55:28.36
ロックしたいからカレントディレクトリを変えてるんだろ
RD フルパス指定だと、それ自体が消えちゃう
もちろん他の方法もあるだろうけど
596デフォルトの名無しさん:2012/02/23(木) 01:16:36.08
type nul >>594
597デフォルトの名無しさん:2012/02/23(木) 01:23:27.14
作成日時の更新はどうやるんだっけ?
598デフォルトの名無しさん:2012/02/23(木) 01:34:16.63
WSHで
599デフォルトの名無しさん:2012/02/23(木) 01:42:12.15
>>596
試したら更新されなかった
600デフォルトの名無しさん:2012/02/23(木) 02:28:12.37
cd /d "%~dp1"
copy %1 +
601デフォルトの名無しさん:2012/02/23(木) 17:08:20.85
対策法を見つけはしたが、皆さんならどうするのか聞かせて。iは、コマンドラインを想定。
set i="a" /? "b c"
if "%i%"==""a" /? "b c"" (echo YES)

602デフォルトの名無しさん:2012/02/23(木) 18:10:01.03
待ち時間作るときって
WSHでやるかpingでやるかどっち使ってる?
603デフォルトの名無しさん:2012/02/23(木) 18:30:05.89
sleep
604デフォルトの名無しさん:2012/02/23(木) 18:58:53.54
timeout.exe 、2003以降なら標準で使えるし
『何かキーを推せば続行』がお手軽なので
timeout.exe が使えないか使えない可能性がある、待ちの確認やスキップが不要、なら ping
605デフォルトの名無しさん:2012/02/23(木) 19:01:34.24
こんな便利なものがあったのかthx
606デフォルトの名無しさん:2012/02/23(木) 22:27:48.98
>>600
cd使うなってよ
607デフォルトの名無しさん:2012/02/24(金) 03:35:01.15
http://oshiete.goo.ne.jp/qa/3913616.html
これをフルPath指定ではなく、前方一致(もしくは部分一致)にするには、どうしたらよい?

http://www.tkssoft.com/cmd/cmd027.html
と組み合わせれば良いのかなー…と思ってるんだけど。
Forをネスト??
608607:2012/02/24(金) 03:47:13.89
↓こんな感じにしてみるも、うまくいかず…

set Folder1=c:\src
set Folder2=c:\dst

for /f %%z in (c:\copy\list.txt) do call :add1 %%z

:exit
pause
exit /b

:add1
set DATA01=%1
cd /d %Folder1%
for /d /r %%a in ( * ) do copy "%%a\*%DATA01%*" "%Folder2%"

exit /b

pause
609デフォルトの名無しさん:2012/02/24(金) 03:53:12.74
>>606
カレントディレクトリにファイルが有るんなら cd は不要だよ
copy /b %1 + nul %1
これは更新されない
copy %1 + nul %1
これは更新されるがファイルにゴミ(0x1A)が付く
610デフォルトの名無しさん:2012/02/24(金) 10:19:43.13
>>601
@echo off
set i="a" /? "b c"
:: jは比較用
set j="b" /? "c"
:: \"a\" /\? \"b c\" を作る
set "t=%i%"
call set "t=%%t:"=\"%%"
call set "t=%%t:?=\?%%"
:: YES1だけ出たらおk
echo %i% | findstr /r /c:"%t%" >nul 2>nul && echo YES1
echo %j% | findstr /r /c:"%t%" >nul 2>nul && echo YES2
pause
611607:2012/02/24(金) 16:13:35.83
自己解決。

:: --------------------------------- set path
set src=c:\copy\src
set dst=c:\copy\dst

:: --------------------------------- main script

echo ------ Search and Copy Start ------

for /f %%z in (list.txt) do call :copy1 %%z

:exit
pause
exit /b

:copy1
set search1=%1
echo %search1%
cd /d %src%
for /R %%i in (%search1%*) do (
copy %%i %dst%
)

exit /b

pause

:: --------------------------------- end
612デフォルトの名無しさん:2012/02/24(金) 16:23:09.36
exit /b

pause <==== これは何のお呪いですか?

:: --------------------------------- end
613デフォルトの名無しさん:2012/02/24(金) 17:16:06.15
お祝いです
614デフォルトの名無しさん:2012/02/24(金) 18:18:43.22
確かにexitの直後のpauseは何の意味がって感じではあるな
615デフォルトの名無しさん:2012/02/24(金) 19:41:10.39
cd /d "%~2"
とかで引数で受けるならサブルーチンでcdする意味あるだろうけど
cd /d %src% だとcallする度にcdするのは効率悪いから
mainのforの前でcdしてしまったほうがいいね
616607: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
617607:2012/02/25(土) 00:48:07.87
set listいみねぇな…まぁいいや…

いろいろありがとノ
618デフォルトの名無しさん:2012/02/25(土) 10:10:40.37
おお、\" で、echo findstr を使うのかー!成る程。ありがとう。
恥を忍んで聞きますが、set "a=b" や、call set が不要に思えます。想定したものがあれば教えて下さい。
対策したのも、あげておきます。spaceだけを置き換えました。他のtabとかも置き換えると、行数が増えます。
set i="a" /? "b c"
set Jyouken="a" /? "b c"
set Jyouken=%i%==%Jyouken%
set Jyouken=%Jyouken: =_SPACE_%
if %Jyouken% echo YES!
619601:2012/02/25(土) 11:39:22.21
618 に 名前:601 とか >>610 つけるの忘れました。
618 がちょっと、舌足らずなので追加します。
>>610
これだけでも動くので、不要に思えました。
set i="a" /? "b c"
set Jyouken="a" /? "b c"
set Jyouken=%Jyouken:"=\"%
echo %i% | findstr /r /c:"%Jyouken%" >nul 2>nul && echo YES1

620デフォルトの名無しさん:2012/02/25(土) 13:37:13.64
拡張子によって処理を分岐させるにはどう書けばいいですか?
621デフォルトの名無しさん:2012/02/25(土) 13:47:11.60
質問者が手を抜いてるのに
それに答えるアホが現れるかどうか
622デフォルトの名無しさん:2012/02/25(土) 13:52:48.57
拡張子を判定してgotoすればいいです。
623デフォルトの名無しさん:2012/02/25(土) 13:55:31.07
>>620
どこにその文字列が格納されているかによるけどサンプルをいくつか

if "%~x1"==".bat" ...

goto label%~x1
...
:label.bat

for %%i in (foo.bat) do call :label%%~x1
624デフォルトの名無しさん:2012/02/25(土) 16:32:51.65
すみませんお騒がせしました
昨日調べて作ってみたのが動かなかったんですが
なぜかさっきもう一回試したら動きました

if "%~x1"==".rar" goto RAR
if "%~x1"==".7z" goto 7Z

shift
:RAR
rar x -y -ep1 "%~1" "%~dp1"
goto END

shift
:7Z
7z x -y "%~1" -o"%~dpn1"
goto END
625デフォルトの名無しさん:2012/02/25(土) 16:38:37.73
linuxのwgetみたいなのってbatだけでは無理ですか?
626デフォルトの名無しさん:2012/02/25(土) 16:47:10.24
ってよく考えたら2つの比較なら
if "%~x1"==".rar" (rar" x -y -ep1 "%~1" "%~dp1") else (7z x -y "%~1" -o"%~dpn1")
でよかったですね
627デフォルトの名無しさん:2012/02/25(土) 17:10:54.72
>>625
1.Powershellでごり押し
2.bat|cmdとwshでハイブリットごり押し
スクリプトのみはちょっときついかもね
628デフォルトの名無しさん:2012/02/25(土) 17:27:47.53
Powershellというのでやってみます
629デフォルトの名無しさん:2012/02/25(土) 20:34:30.84
>>609
> copy /b %1 + nul %1
> これは更新されない
更新されるが?
630デフォルトの名無しさん:2012/02/25(土) 21:31:05.12
>>625
http://opensourcepack.blogspot.com/2010/05/wget-112-for-windows.html
こういうWindowsバイナリを使わずにってこと?
631デフォルトの名無しさん:2012/02/26(日) 08:06:00.39
それ使っていいなら、こんなスレで質問しないと思うが…

バッチ / スクリプトのみではちょっと無理でしょ。

MSXML2.ServerXMLHTTP + スクリプトあたりが無難だと思うが。
632デフォルトの名無しさん:2012/02/26(日) 14:33:59.21
あー聞き方が曖昧だった。
Windowsバイナリ使わずに技術的に可能ならやってみる、ってこと?
を聞いてみたかっただけ。どこまでやってみるのか分からないけど
再帰、階層、ミラー、etc,...、とか考えるだけでしんどそうなのに挑むのかと。
633デフォルトの名無しさん:2012/02/26(日) 14:55:11.72
本当に本人かどうかはわからんけど、>>628 で Powershell でやってみると言ってるよ。

> 再帰、階層

むしろここら辺はスクリプトでも扱いやすいと思うけど。
634デフォルトの名無しさん:2012/02/29(水) 06:27:04.19
バッチに送った複数のファイルやフォルダのパスをソートしたいのですが
@(for %%a in (%*) do @echo "%%~fa")|sort
ですと
"C:\TMP\abc\1ファイル.txt"
"C:\TMP\abc\2ファイル.txt"
"C:\TMP\abc\3ファイル.txt"
"C:\TMP\abc\4フォルダ"
"C:\TMP\abc\5フォルダ"
のようになってしまいます。これをエクスプローラーの並び順のように
"C:\TMP\abc\4フォルダ"
"C:\TMP\abc\5フォルダ"
"C:\TMP\abc\1ファイル.txt"
"C:\TMP\abc\2ファイル.txt"
"C:\TMP\abc\3ファイル.txt"
としたいのですがどう書けばいいですか
635デフォルトの名無しさん:2012/02/29(水) 10:40:52.94
>>629
俺のは更新されない
なんでだろうな
636デフォルトの名無しさん:2012/02/29(水) 10:46:38.26
vbs呼び出して頑張って自分でソートする
637デフォルトの名無しさん:2012/02/29(水) 11:56:21.97
フォルダに他の属性が無いなら
@(@for %%a in (%*) do @if "%%~aa" == "d--------" @echo "%%~fa") | sort
@(@for %%a in (%*) do @if not "%%~aa" == "d--------" @echo "%%~fa") | sort
638デフォルトの名無しさん:2012/02/29(水) 12:02:28.55
forとechoの前の@は不要だな
639ホイミン: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 の方が便利そうだね。
ごめんよ、ややこしくして。
641デフォルトの名無しさん:2012/02/29(水) 15:59:08.48
ちょっと質問なんですが
wget (url) -O ffd.txt
type ffd.txt|findstr xhmikosr.exe 1> ffd1.txt
for /f "tokens=3-4 delims=_" %%a in ('findstr "xhmikosr.exe" ffd1.txt') do set ver=%%a_%%b
wget -N -c (url)
innounp.exe -x "ffdshow_%ver%_xhmikosr.exe"
move {app}\*.dll C:\Program Files\ffdshow
で最後のmoveのとこでコマンド構文が間違ってますといわれるんですが
何が間違ってるんでしょう


642デフォルトの名無しさん:2012/02/29(水) 16:00:18.81
こうだろうな。
move {app}\*.dll "C:\Program Files\ffdshow"
643デフォルトの名無しさん:2012/02/29(水) 16:47:28.73
>>642
またやってしまった・・・
ダブルクォーテーションですね
ありがとうございました
644デフォルトの名無しさん:2012/02/29(水) 20:21:18.27
>>640
おまえ、全然試してないだろ
そのバッチ作ってD&Dしてみろボケ
645ホイミン:2012/03/01(木) 08:22:30.49
>>644 コマンドプロンプトで test.bat .\* 等と、色々やって試したんだけどね、足りなかったね。
dir がフォルダーを展開してしまうのには、書き込んでから気付いたんだけど、くどいので訂正しなかたんだよ。
使えない書き込みだから、みんな無視するだろうと思っていたよ。
一々反応してくれるのはありがたいけど、君は社会性が無いようだね。
646デフォルトの名無しさん:2012/03/01(木) 08:25:30.43
@echo 便所の落書きに(ry&pause
647デフォルトの名無しさん:2012/03/01(木) 11:51:26.33
便所の落書きだか知らんが
どう試したんだよw 全然ダメだろw
648デフォルトの名無しさん:2012/03/01(木) 13:03:21.98
@echo 便所の落書きに^(ry&pause
649デフォルトの名無しさん:2012/03/01(木) 15:15:45.41
dirの/oは引数をソートしないよ
650デフォルトの名無しさん:2012/03/01(木) 15:54:15.80
複数のファイルをバッチにD&Dしたら
引数の順番って、どう決まるの?

echo %*

マウスカーソルの位置のファイルが一番目?
651デフォルトの名無しさん:2012/03/01(木) 22:29:17.92
そうよ
2番目以降は並び順、ラップラウンド
652デフォルトの名無しさん:2012/03/01(木) 22:30:26.30
ついでに言うと、1番目ファイルでカレントディレクトリ
653デフォルトの名無しさん:2012/03/01(木) 23:10:40.16
バッチにD&Dしたら、カレントディレクトリは
%HOMEDRIVE%%HOMEPATH%が既定値なのでは?
654デフォルトの名無しさん:2012/03/01(木) 23:25:46.89
なのではって?そうなるのか?OSは?
655デフォルトの名無しさん:2012/03/01(木) 23:30:35.02
すまん。俺のPCは古い化石なんで、Win2000
他のは違うんかも
656デフォルトの名無しさん:2012/03/02(金) 00:04:32.12
カレントディレクトリはバッチに落とした場合とバッチのショートカットに
落とした場合で異なる。
657デフォルトの名無しさん:2012/03/02(金) 00:38:45.35
ショートカットの場合はプロパティで確認できる。
D&Dしたファイルとは無関係なようです
658デフォルトの名無しさん:2012/03/02(金) 00:40:18.10
ショートカットで設定してなければバッチと同じ
当たり前だろ
659デフォルトの名無しさん:2012/03/02(金) 00:56:50.35
だから何?
おれはショートカットの話は別にどうでもいいんだが
660デフォルトの名無しさん:2012/03/02(金) 01:15:31.22
カレントディレクトリはバッチに落とした場合とVBSに
落とした場合で異なる。
661デフォルトの名無しさん:2012/03/02(金) 01:16:24.16
だから何?
おれはVBSの話は別にどうでもいいんだが
662デフォルトの名無しさん:2012/03/02(金) 01:20:45.18
他人のレスの真似するなよ。
663デフォルトの名無しさん:2012/03/02(金) 02:36:25.83
なんでvbsは違うんだ?
664デフォルトの名無しさん:2012/03/02(金) 02:39:43.76
だから何?
おれはVBSの話は別にどうでもいいんだが
665デフォルトの名無しさん:2012/03/02(金) 02:53:26.53
>>659
お前バカだろ。起動時のカレントディレクトリはあてにしてはいけないという事だ。
つまり、>>652の情報は何の意味もない。
666デフォルトの名無しさん:2012/03/02(金) 02:54:30.97
なんでスレタイ読めないの?
おれはVBSの話は別にどうでもいいんだが
667デフォルトの名無しさん:2012/03/02(金) 03:39:03.93
VBSのドロップハンドラがへぼいんだろ
668デフォルトの名無しさん:2012/03/02(金) 08:52:29.56
>>665
お前バカだろ。当たり前だろ
669ホイミン1:2012/03/02(金) 11:52:24.56
>>649 おお、そうなんだ勉強になったなあ。確認したんだけどなあ。
でもそんなにも僕はうっかり者だったのかと、もう一度確認したけど、ソートされているみたいだよ。
なにか勘違いしているかな? dir が使えなかったのは、変わらないけど。
R:\Ue\Shita>dir /b /on fortest.bat "Shit a2.txt" dirfile.bat
dirfile.bat
fortest.bat
Shit a2.txt

Drug and Drop は absolute で渡されるからいいんだけど、relative path を使った short cut の上に D'nD する際に問題になって、調べた事があるよ。
Drug and Drop は vista 以降で変更されているようだよ。
current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、vista 以降では %~dp1 らしいね。
参考 http://www.hirax.net/diaryweb/2009/06/04.html
670ホイミン2:2012/03/02(金) 12:05:26.19
まとめてみたよ。XP では確認した(けど、でもばっちり確認したわけじゃあないから、低レベルな事を言わないで訂正してくれ)よ。
Current Directory in the various cases of launching
______________________ , 2000, _ XP,VISTA,SEVEN
DrugAndDrop___________ , HOME, HOME, _ %1, _ %1
DoubleClick___________ ,Lnchd,Lnchd,Lnchd,Lnchd
DrugAndDrop On ShortCut, HOME, HOME, _ %1, _ %1
DoubleClick Of ShortCut,Lnchd,Lnchd,Lnchd,Lnchd

-Anotation
-ShortCut is in case of the blank of "Start In". If not blanked, current directry follows it.
- HOME: %HOMEDRIVE%%HOMEPATH%
- _ %1: Directory of the 1st argument
-Lnchd: Launched directory (in case of short cut, directory of short cut)

drug and drop の際の問題といえば、全角スペース(他にも有)を含む "file name.txt" などのファイルを Drug and Drop するとクオートされないよね。他にも知ってる問題があったら、教えて。
671デフォルトの名無しさん:2012/03/02(金) 14:15:09.54
コマンドとか以前に
× Drug
○ Drag
672デフォルトの名無しさん:2012/03/02(金) 19:16:55.25
>current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、
explorer processのcurrent directoryでは?
673デフォルトの名無しさん:2012/03/02(金) 19:33:17.13
moveでフォルダ移動のときフォルダ名指定に*使えないのは嫌がらせでしょうか
674デフォルトの名無しさん:2012/03/02(金) 20:06:48.04
仕様です
675デフォルトの名無しさん:2012/03/03(土) 00:56:48.46
>>669
俺は >>649 じゃないが、dir の /og は引数をソートしないようだ。
他は知らない。
というか間違いを書き込んで放置している奴が、
他人に社会性云々などと言える立場かよ。
レベルが低くて悪かったね。
便所の書き込みでした。
676デフォルトの名無しさん:2012/03/03(土) 01:24:11.63
ドラッグ&ドロップ 前提のバッチファイルならバッチの冒頭とかに
cd /d %~dp0

cd /d %~dp1
とかを状況次第で必要に応じて書き加えていそうなもんだが。
OS による挙動の違いで問題、とかいってる前にしないのかね。
677デフォルトの名無しさん:2012/03/03(土) 01:49:25.89
>>669
dir /b /on test\2\2.txt test\1\1.txt
2.txt
1.txt
678デフォルトの名無しさん:2012/03/03(土) 03:30:18.27
どうでもいいっす
679デフォルトの名無しさん:2012/03/03(土) 05:21:31.12
バージョンの違いだろwあほども
680デフォルトの名無しさん:2012/03/03(土) 09:01:15.54
低レベルな事を言わないでくれってさ
681デフォルトの名無しさん:2012/03/03(土) 10:50:21.10
>>676
バッチファイルでcd前提の処理は
UNCパスで実行された場合、想定外の動作になる

バッチファイルは相対ダメ
ゼッタイ絶対パス指定すべし
682デフォルトの名無しさん:2012/03/03(土) 11:08:26.87
どうでもいいっす
683634: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のソートの方法がまずいということはわかるのですがどうすればいいのやら。。
以下に書いたバッチを貼ります。少し長いですがご容赦願います
684634: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
685634:2012/03/03(土) 12:13:15.16
:sub2
set arglistfile=
for %%c in (%arglist%) do call :sub3 "%%~ac" "%%~fc"
if not defined arglistfile exit /b
for %%d in (%arglistfile%) do >>"%~dp0list.txt" echo "%%~fd"
set arglist=
exit /b
:sub3
set attr=%1
set attr=%attr:~1,1%
if "%attr%"=="d" ( >>"%~dp0list.txt" echo "%~2"
) else ( set arglistfile=%arglistfile% "%~2"
)
set attr=
exit /b
686デフォルトの名無しさん:2012/03/03(土) 12:38:57.51
絡んだおれがバカだった
絶対パスで好きにしてくれ
687デフォルトの名無しさん:2012/03/03(土) 13:57:54.46
てかいまどきバッチファイルなんか書いてる奴らが総じて底辺。
688デフォルトの名無しさん:2012/03/03(土) 14:00:13.55
>>679
テキトーなことぬかすなボケ
689634: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
690634:2012/03/03(土) 15:20:35.76
:sub2
set arglistfile=
for %%c in (%arglist%) do call :sub3 "%%~ac" "%%~fc"
if not defined arglistfile exit /b
for %%d in (%arglistfile%) do >>%output% echo "%%~fd"
set arglist=
exit /b

:sub3
set attr=%1
set attr=%attr:~1,1%
if "%attr%"=="d" ( >>%output% echo "%~2"
) else ( set arglistfile=%arglistfile% "%~2"
)
set attr=
exit /b
691デフォルトの名無しさん:2012/03/03(土) 18:01:42.04
うざ
692デフォルトの名無しさん:2012/03/03(土) 19:48:23.70
%~dpは早退なのかよ
693デフォルトの名無しさん:2012/03/03(土) 20:02:34.08
遅刻なのかよ
694デフォルトの名無しさん:2012/03/03(土) 20:06:23.02
dir /b /on test\2\2.txt test\1\1.txt
1.txt
2.txt
695デフォルトの名無しさん:2012/03/03(土) 21:11:40.93
dir /b /on z:\z.txt y:\y.txt
z.txt
y.txt
696デフォルトの名無しさん:2012/03/03(土) 21:39:04.11
dir /b /on z:\* y:\*
z.txt
y.txt
697デフォルトの名無しさん:2012/03/03(土) 22:59:19.02
dir /b /on test\2\2.txt test\1\1.txt |sort
1.txt
2.txt
698デフォルトの名無しさん:2012/03/04(日) 01:33:17.02
>dir /b /on a.txt b.txt
a.txt
b.txt

>dir /b /o-n a.txt b.txt
b.txt
a.txt
699デフォルトの名無しさん:2012/03/04(日) 01:34:32.16
>>698
確かに引数をソートしてるな
700デフォルトの名無しさん:2012/03/04(日) 01:37:41.92
>dir /b /on a b
a.txt
b.txt
a.txt
b.txt

>dir /b /o-n a b
b.txt
a.txt
b.txt
a.txt
701デフォルトの名無しさん:2012/03/04(日) 01:38:36.31
ディレクトリ単位にソートってことだろ?
702デフォルトの名無しさん:2012/03/04(日) 10:23:07.77
>>689 俺もバッチ作ってみた

@echo off & cd /d "%~dp0"
del tmp1 tmp2 list.txt > nul 2>&1
(for %%i in (%*) do @echo "%%~dpi","%%~fi")| sort /o tmp1
set /a a=10000 & set b=""
for /f "delims=, tokens=1,2" %%i in (tmp1) do (
set c=%%i& set d=%%~aj& set e=%%j& call :x)
for /f "delims=, tokens=2" %%i in ('sort tmp2') do echo %%i>> list.txt
del tmp1 tmp2 & goto :eof
:x
if not %b% == %c% set b=%c%& set /a a+=1
if %d:~0,1% == d (set /a f=0) else set /a f=1
echo %a%%f%,%e:~0,-1%>> tmp2
703デフォルトの名無しさん:2012/03/04(日) 15:41:04.60
うざ
704デフォルトの名無しさん:2012/03/04(日) 16:17:47.60
>>689-690 はファイル名に%文字があると誤動作する
705デフォルトの名無しさん:2012/03/04(日) 18:03:47.92
どの行?
706デフォルトの名無しさん:2012/03/04(日) 18:07:01.85
あの行
707デフォルトの名無しさん:2012/03/04(日) 18:09:41.44
たぶんcallの引数の%が化ける
708デフォルトの名無しさん:2012/03/04(日) 19:27:26.60
引数渡しやめて環境変数渡しにすればよい
709デフォルトの名無しさん:2012/03/04(日) 23:36:02.16
>>704
ファイル名の%ってどうやって環境変数記号でないと判断させればいいの?

ファイル名内の%の位置を調べて存在したら
^でエスケープするしかない?
710デフォルトの名無しさん:2012/03/04(日) 23:38:42.64
%のエスケープは%%だよ
711デフォルトの名無しさん:2012/03/05(月) 00:00:12.25
なんでお前らいまだにバッチファイル書いてるの?
712デフォルトの名無しさん:2012/03/05(月) 00:12:58.43
バッチファイルは基本だよ
713デフォルトの名無しさん:2012/03/05(月) 00:36:58.96
>>709
%%
714デフォルトの名無しさん:2012/03/05(月) 00:42:23.44
for変数と混同するんじゃね
715デフォルトの名無しさん:2012/03/05(月) 15:40:43.79
このバッチに名前が%文字を含むファイルをD&Dしてごらん
違いが分かるよ

@echo off
set a="%~nx1"
call :x %a%
call :x %%a%%
pause
goto :eof
:x
echo %1
716デフォルトの名無しさん:2012/03/05(月) 23:46:11.91
setlocal enabledelayedexpansion
set a="%~nx1"
set a=!a:%%=%%%%!
echo %a%
call :x %a%
call :x %%a%%
pause
exit
:x
echo %1
717デフォルトの名無しさん:2012/03/05(月) 23:48:22.26
@echo off
for %%i in (%*) do (set a=%%i& call :x %%a%%)
pause & goto :eof
:x
echo %1
718デフォルトの名無しさん:2012/03/05(月) 23:49:44.92
^%
719デフォルトの名無しさん:2012/03/06(火) 00:07:24.36
@echo off
for %%i in (%*) do set a=%%i& call :x
pause & goto :eof
:x
echo %a%
720デフォルトの名無しさん:2012/03/06(火) 00:10:12.82
いつまでやってんだよカス
721デフォルトの名無しさん:2012/03/06(火) 00:14:24.77
サンキューカッス
722デフォルトの名無しさん:2012/03/06(火) 00:27:17.77
もっと面白いネタは無いのか
723デフォルトの名無しさん:2012/03/06(火) 00:42:25.31
ない
724デフォルトの名無しさん:2012/03/06(火) 01:06:38.12
とっく枯渇してるので、蒸し返しばっか
725デフォルトの名無しさん:2012/03/06(火) 01:13:44.33
でもスレを覗くんですね
726デフォルトの名無しさん:2012/03/06(火) 01:28:48.52
でもってなにがでもだ?
727デフォルトの名無しさん:2012/03/06(火) 01:34:13.80
新しい知見を得るために覗いていたのか?
728デフォルトの名無しさん:2012/03/06(火) 16:34:55.54
よほど無知なんだろ
729デフォルトの名無しさん:2012/03/06(火) 17:10:05.33
スレ立てるまでもない質問スレで教えていただいたUNIXコマンドがあります
cat `find あるディレクトリ -name test.txt` > 一つのファイル
これはあるディレクトリ以下の全てのサブディレクトリを含めて、test.txtというファイルの内容を一つのファイルにまとめるコマンドです
Windowsでも同じようにやりたいのですが
copy ファイル1.txt+ファイル2.txt・・・・ marge.txt
といった感じに+でいちいち書いていくのが面倒なのでよい方法内でしょうか?
730デフォルトの名無しさん:2012/03/06(火) 17:55:25.05
for /r ディレクトリ %i in (*) do type %i>>test.txt
731デフォルトの名無しさん:2012/03/06(火) 18:14:10.14
まんまじゃねーか
732デフォルトの名無しさん:2012/03/06(火) 18:18:00.13
え?なんかやる事とやってる事が違うくね?
733デフォルトの名無しさん:2012/03/06(火) 18:30:45.73
こまけーことはいいんだよ!
734デフォルトの名無しさん:2012/03/06(火) 22:36:25.51
>>730
試してみたんですが
> の使い方が誤ってます
ってエラーがでます
735デフォルトの名無しさん:2012/03/06(火) 22:53:00.85
試す前に、なにやってるかくらい読めよ
736デフォルトの名無しさん:2012/03/06(火) 23:03:27.10
すいませんコマンドの部分だけ変えてやったら出来たんですが全てのファイルを一つにコピーできません
for /R %%a in (test.txt) do copy /B %%a+test.txt test.txt
737デフォルトの名無しさん:2012/03/06(火) 23:33:28.10
変えるなよバカ
738デフォルトの名無しさん:2012/03/06(火) 23:40:45.65
試す前に、for/?くらい読めよ
739デフォルトの名無しさん:2012/03/06(火) 23:42:24.85
だったらまともに動くものを書いてくださいよ
740デフォルトの名無しさん:2012/03/06(火) 23:43:45.37
応用のできない奴に何を教えても無駄
741デフォルトの名無しさん:2012/03/06(火) 23:52:11.61
それってあなたが書けないだけですよね?
742デフォルトの名無しさん:2012/03/06(火) 23:54:03.40
あぶく銭は身に付かない
743デフォルトの名無しさん:2012/03/06(火) 23:56:28.18
>>741
その手には乗らないよ
744デフォルトの名無しさん:2012/03/06(火) 23:57:57.96
じゃあ邪魔しないでくださいよ
745デフォルトの名無しさん:2012/03/07(水) 00:00:54.15
邪魔なんかしてないよw猫に小判なだけだろ
746デフォルトの名無しさん:2012/03/07(水) 00:04:26.64
別にバッチファイルの勉強しているわけじゃないのに
くだらないクイズやナゾナゾなんて必要が無いんですよ
質問に答えられないなら邪魔でしかありません
747デフォルトの名無しさん:2012/03/07(水) 00:08:04.61
くだらない質問に誰が答えるって?
748デフォルトの名無しさん:2012/03/07(水) 00:09:55.18
いやにのびてると思ったら……
749デフォルトの名無しさん:2012/03/07(水) 00:15:04.29
別にバッチファイルの勉強しているわけじゃないので
くだらない質問なんて答える必要が無いんですよ
750デフォルトの名無しさん:2012/03/07(水) 00:16:51.61
バッチも使えないならUNIX使ってりゃいいじゃん
751デフォルトの名無しさん:2012/03/07(水) 00:19:23.33
いや俺の認識だとむしろバッチだから使えないだと思う
普通に(無意味に)難しいよ、バッチは
752デフォルトの名無しさん:2012/03/07(水) 00:20:15.83
答えられない人はせめて邪魔しないでもらえますか
753デフォルトの名無しさん:2012/03/07(水) 00:22:00.94
俺、答えられるけど答える気ないだけだから邪魔してもいいよね?
754デフォルトの名無しさん:2012/03/07(水) 00:24:14.98
それは答えられないと等しいですよね
答えられるのなら答えてるわけですから
スレの無駄なんて無能さらすのはツイッターでやってください
755デフォルトの名無しさん:2012/03/07(水) 01:07:56.12
marge.txt くすっ
756デフォルトの名無しさん:2012/03/07(水) 01:13:23.19
>>729には教えるだけ無駄 できないと等しいですよね
できるならやってるわけですから
スレの無駄なんて無能さらすのはツイッターでやってください
757デフォルトの名無しさん:2012/03/07(水) 01:22:21.14
便りの無いのは良い便り
758デフォルトの名無しさん:2012/03/07(水) 01:29:04.83
俺っちは>>730で動いたが、感謝の念もない無礼な輩が多いな
759デフォルトの名無しさん:2012/03/07(水) 01:42:48.04
動く、という事と、
期待した結果は別なんじゃないかな。
760デフォルトの名無しさん:2012/03/07(水) 01:43:55.08
エラーが出たら直せばいいと思うよ不通
それしないで逆切れするなんて以上
761デフォルトの名無しさん:2012/03/07(水) 01:48:04.61
期待した結果になるように直せばいいと思うよ不通
それしないで逆切れするなんて以上
762デフォルトの名無しさん:2012/03/07(水) 01:49:14.40
逆に、MS-DOSしかしらない人に
UNIXのシェルで作れって言ったら似たような事になると思うよ。
763デフォルトの名無しさん:2012/03/07(水) 02:45:02.24
ならんと思うよ。
man findとかちゃんと調べるもん
764デフォルトの名無しさん:2012/03/07(水) 02:53:36.94
馬鹿は何やっても駄目だから諦めた方がいいよ
765デフォルトの名無しさん:2012/03/07(水) 03:03:25.28
クレクレ君に答えを与えないでくださいw
766デフォルトの名無しさん:2012/03/07(水) 03:06:41.93
やるんじゃなかったなw
767デフォルトの名無しさん:2012/03/07(水) 03:42:53.07
>>729,734,736,739,741,744,746,752,754
幼稚園からやり直せ
768デフォルトの名無しさん:2012/03/07(水) 11:23:59.92
ファイルの結合はcopyだろ
誰がtypeでDOSに文字をかけと言った
769デフォルトの名無しさん:2012/03/07(水) 16:33:17.37
だってcatじゃん
770デフォルトの名無しさん:2012/03/07(水) 16:35:26.05
便所の書き込みに何を言ってる
771デフォルトの名無しさん:2012/03/07(水) 16:38:23.60
自演ならもう少し面白くやってくれくれくん
772デフォルトの名無しさん:2012/03/07(水) 16:45:22.53
だったらDOSじゃなくてDOGだろ?
773デフォルトの名無しさん:2012/03/07(水) 18:08:10.27
>>755
中学英語からやり直せw
774デフォルトの名無しさん:2012/03/07(水) 18:23:21.56
for /r ディレクトリ %i in (test.txt) do type %i>>marge.txt
775デフォルトの名無しさん:2012/03/07(水) 18:31:08.06
くそ!どいつもこいつもバカにしやがって!!!!!!!!!
776デフォルトの名無しさん:2012/03/07(水) 18:57:22.39
真夜中に2ちゃんでレスの応酬ってw
しかもバッチスレw















出遅れたわw
777デフォルトの名無しさん:2012/03/07(水) 19:06:17.90
遅延展開やねw
778デフォルトの名無しさん:2012/03/07(水) 19:38:22.80
シフトワーカーはバッチがお好き
779デフォルトの名無しさん:2012/03/07(水) 20:48:16.79
こういうのはどうかけますか?
Cドライブに存在する全てのgitフォルダが何個存在するかカウント
780デフォルトの名無しさん:2012/03/07(水) 21:08:57.30
エクスプローラで検索したほうが早くないか
781デフォルトの名無しさん:2012/03/07(水) 21:44:47.11
単純に検索するとゴミ箱の中まで漁る
782デフォルトの名無しさん:2012/03/08(木) 07:03:14.49
cd /d c:\
dir /s /b /ad .git | find /v /c ""
783デフォルトの名無しさん:2012/03/08(木) 07:36:08.58
set n=0
for /r c:\ %%i in (.) do if "%%~nxi"=="git" set /a n+=1
echo %n%個
784デフォルトの名無しさん:2012/03/08(木) 07:47:05.53
>>782の訂正版
cd /d c:\
dir /s /b /ad git | find /v /c ""
785デフォルトの名無しさん:2012/03/08(木) 10:39:13.31
>>783
ifの前に@を付けろ
>>781
for /r はゴミ箱の中まで検索してるな
名前が偶然に一致するなんて、まず無いだろうが
786デフォルトの名無しさん:2012/03/08(木) 10:51:38.35
>>783
nxiってなに?
787デフォルトの名無しさん:2012/03/08(木) 11:19:32.20
>>786
n
x
i
だけじゃないから、自分で調べろ

for /?
788デフォルトの名無しさん:2012/03/09(金) 07:11:46.74
>>782の訂正版
dir /s /b /ad c:\git | find /v /c ""

これでワンライナーOKだった
789デフォルトの名無しさん:2012/03/09(金) 10:31:33.67
>>784,>>788
それ、c:\git というフォルダがあったら
その中身しか検索しないよ
790デフォルトの名無しさん:2012/03/09(金) 11:28:30.28
ここで出てきたテクニックをwikiにまとめていただけませんか?
791デフォルトの名無しさん:2012/03/09(金) 11:32:24.24
いただけませんか?とか書きこんでる間にwikihouseかどっか借りてコピペしてけばいいだろ
792デフォルトの名無しさん:2012/03/09(金) 11:55:03.16
えええ俺がwiki借りるの面倒くさいです
793デフォルトの名無しさん:2012/03/09(金) 12:50:20.55
dir abc*
ってやると先頭がabcから始まるファイルがヒットすれば表示されますが
ファイルの途中にabcが存在するようなファイルもヒットさせる方法を伝授してください
xxxabcxxx.txt
abc.xxx.txt
xxx.abc.txt
とか
拡張子が無いファイルとか拡張子にabcが来ることは無いと考えていただいて結構です
794デフォルトの名無しさん:2012/03/09(金) 13:04:14.56
dir *abc*
795デフォルトの名無しさん:2012/03/09(金) 15:40:42.38
うそこくでねー
796デフォルトの名無しさん:2012/03/09(金) 15:49:29.44
ほんとだ
797デフォルトの名無しさん:2012/03/09(金) 16:05:44.51
以前はウソだった。最近のcmd.exeは可能。いつからウソじゃなくなったか知らない。
798デフォルトの名無しさん:2012/03/09(金) 16:14:51.52
少なくともxpは本当。
799デフォルトの名無しさん:2012/03/09(金) 16:19:08.35
今試したら、98SEでも行けた。
大昔(DOS2とかCP/Mとかの時代)はNGだったのは確かだが、
いつOKになったんだろ?
800デフォルトの名無しさん:2012/03/09(金) 16:29:00.75
*abc* ぐらい試してから質問しろよ
801デフォルトの名無しさん:2012/03/09(金) 16:32:20.65
試したら質問しないだろw
802デフォルトの名無しさん:2012/03/09(金) 16:38:06.29
16bit DOSの場合は
dir *abc*.*
803デフォルトの名無しさん:2012/03/09(金) 17:55:31.57
バッチファイルでも「最新の情報に更新」(F5キー)を使えますか?

デスクトップのファイルを定期的に別のフォルダに移すバッチファイルを書いたんですが、
ファイルが消えても更新するまでアイコンが残ってしまって・・・
804デフォルトの名無しさん:2012/03/09(金) 17:57:57.63
ahk呼んでsendcontrolでもしたら
805デフォルトの名無しさん:2012/03/09(金) 17:58:23.49
山口美江さんが亡くなった・・・
おまえらが急に老けたとか言うから
806デフォルトの名無しさん:2012/03/09(金) 17:58:43.96
ごめん誤爆
807デフォルトの名無しさん:2012/03/09(金) 18:03:59.92
>>803
ふつー残らんよ
でもどうしてっつーなら
createobject("shell.application").windows().item().refreah
808デフォルトの名無しさん:2012/03/09(金) 18:13:03.08
バッチでクリップボードの文字列を引数として渡すことはできますか?
809デフォルトの名無しさん:2012/03/09(金) 18:23:21.58
for /f %%i in ('〜') do echo %%i
ってこと?
'〜'に
cscript.exe 〜〜
mshta.exe 〜〜
powershell.exe 〜〜
ってすりゃいい どれでも得意なのでどぞ
810デフォルトの名無しさん:2012/03/09(金) 18:36:11.79
C:\2012\以下のサブディレクトリも含む全てのファイルの更新履歴が
2012年2月1日0時0分0秒以降になっているものをリストアップするのはbatでできますか?
811デフォルトの名無しさん:2012/03/09(金) 18:38:05.77
forfiles/?
812デフォルトの名無しさん:2012/03/09(金) 18:43:25.00
Aフォルダに入っているファイルを
Bフォルダにバックアップしたいと考えてます
そこでBフォルダには入っていてAフォルダにないファイルを一覧にしたいのですが
どうやるのでしょうか?
813デフォルトの名無しさん:2012/03/09(金) 18:51:10.75
for + if
または
dir + findstr
814デフォルトの名無しさん:2012/03/09(金) 19:43:18.94
>>804
ありがとうございます
ごめんなさい、難しくてよくわかりません;;

>>807
ありがとうございます、教えてもらった方法でできました!
'createobject'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出るのですが、これはこれでいいんでしょうか?
WIN7を使っています。
815デフォルトの名無しさん:2012/03/09(金) 20:37:42.34
正常
816デフォルトの名無しさん:2012/03/09(金) 20:41:47.70
> refreah
817デフォルトの名無しさん:2012/03/09(金) 21:39:36.03
> refresh.vbs
818デフォルトの名無しさん:2012/03/09(金) 22:07:54.59
CSVファイルを読み込んで、ちょっとした処理をしたかったのだけど、
読み込む対象のファイル名に半角スペースが入っていた場合どうすればいい?

ここを参考にしたんだけど、
 ttp://vaindespair.blogspot.com/2009/04/blog-post_09.html
半角スペース入りのファイル名だとうまくいかないのです。


・・・と書いてて閃いたw
FOR /F "tokens=1,3 delims=," %%a IN ( 'type "hannkaku space irino file.csv"' ) DO (
819デフォルトの名無しさん:2012/03/09(金) 22:22:23.19
FOR /F "usebackq tokens=1,3 delims=," %%a IN ( "hannkaku space irino file.csv" ) DO (
だよーん
820818:2012/03/09(金) 22:29:58.17
ありがとう!
821デフォルトの名無しさん:2012/03/09(金) 22:58:55.52
forでcsvって難しくないか?
"abc,def","pqr","xyz"
ってなのがあったらモー駄目だろ?
822デフォルトの名無しさん:2012/03/10(土) 03:16:58.48
>>812
set a="c:\tmp\Aフォルダ"
set b="c:\tmp\Bフォルダ"
set list="c:\tmp\B-A_list.txt"
call >%list%
for /f "usebackq delims=" %%b in (`dir /a-d /b %b%`) do @if not exist %a:~0,-1%\%%b" >>%list% echo %b:~0,-1%\%%b"
823デフォルトの名無しさん:2012/03/10(土) 03:26:27.10
set a="c:\tmp\Aフォルダ"
set list="c:\tmp\B-A_list.txt"
call >%list%
cd /d "c:\tmp\Bフォルダ"
for /f "delims=" %%b in ('dir /a-d /b') do @if not exist %a:~0,-1%\%%b" >>%list% echo "%%~fb"
824デフォルトの名無しさん:2012/03/10(土) 04:11:12.36
findstrは?
825 忍法帖【Lv=14,xxxPT】 :2012/03/10(土) 20:05:58.09
質問です。よろしくお願いします。
バッチファイル(あひゃ.bat)を優先度低で実行させるために
start /b /belownormal あひゃ.bat
と書かれているcmdファイルを作成し、それを実行させているのですが、
あひゃ.batが終了してもDos窓が閉じません。
終了後に自動で閉じるようにするにはどうしたら良いのでしょうか?
826デフォルトの名無しさん:2012/03/10(土) 20:10:47.82
start /b /belownormal cmd /c あひゃ.bat
827デフォルトの名無しさん:2012/03/10(土) 20:31:41.10
あひゃ.bat

echo %cmdcmdline%
を入れてみりゃ理由がわかる
828825 忍法帖【Lv=14,xxxPT】 :2012/03/10(土) 21:12:23.08
早速のレス、感謝します。
>>826サンの方法で見事にDos窓が自動で閉じました。
>>827サンのとおりに実行したらなんとなく解ったような気がします。
cmd /k と cmd /c の違いですね。help startとかhelp cmdを読んでないのがバレバレ(;´∀`)

なんとなく思い込みでstartコマンドの/bオプション(ウインドウを作成しない)を付けたのですが、
実はコレ無くても良かったみたいです。(じ、実は/bオプションの意味もよく解っていないっ!(∀`*ゞ)
とにかく期待通りに動いたので満足です。
お二方ともありかとうございました。
829デフォルトの名無しさん:2012/03/10(土) 21:13:49.52
batを起動しっぱなしにして
タスクマネージャのタスク名に指定した名前(例えばメモ帳を立ち上げて「無題 - メモ帳」など)が出たら
ログに書き込むというのはbatで出来ますか?
830デフォルトの名無しさん:2012/03/10(土) 21:18:31.36
tasklist
831デフォルトの名無しさん:2012/03/10(土) 22:28:53.73
wmic process get name
832デフォルトの名無しさん:2012/03/11(日) 14:15:58.30
>>808
WSHと組み合わせないと無理だったはず
833818:2012/03/11(日) 23:14:37.36
>>821

そこまで本気なことをするには荷が重いものだと理解してます。
(できるかもしれないけど、数ヵ月or数年後の自分に理解ができない、と思うので)
834デフォルトの名無しさん:2012/03/12(月) 00:12:38.31
>>808
clip.exeか類似ソフト使えば出来る
835デフォルトの名無しさん:2012/03/12(月) 04:15:25.41
内蔵のclip.exeじゃだめだけどな
836デフォルトの名無しさん:2012/03/12(月) 06:41:41.28
スレタイ(ry
837デフォルトの名無しさん:2012/03/12(月) 16:34:50.59
>>832
WSHったってIE使ったりして大変だろ?
>>809
お勧めは?
838デフォルトの名無しさん:2012/03/12(月) 17:24:09.19
>>837
> WSHったってIE使ったりして大変だろ?

ならば>>809のは全部同類だから「大変」だ
839デフォルトの名無しさん:2012/03/12(月) 18:01:20.27
そうなのか?
簡単に書けるものってないのか?
840デフォルトの名無しさん:2012/03/12(月) 18:50:35.07
powershellなら簡単よ
841デフォルトの名無しさん:2012/03/12(月) 23:45:56.93
for /f "usebackq tokens=1,* delims=[]" %i in (`mshta "javascript:close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(clipboardData.getData('Text')));"^|find /v /n ""`) do @set "c[%i]=%j"

これでどうだろう
842デフォルトの名無しさん:2012/03/13(火) 02:24:40.37
まあまあやね
843デフォルトの名無しさん:2012/03/13(火) 02:31:28.01
及第点やね
powershell版もできたら満点や
844デフォルトの名無しさん:2012/03/15(木) 00:56:09.43
保守
845デフォルトの名無しさん:2012/03/15(木) 17:57:21.48
powershellってそんなにすごいの?
Vistaでもできますか?
846デフォルトの名無しさん:2012/03/15(木) 18:03:58.62
バッチファイルでただコマンド連続実行するだけじゃなく
for /f "usebackqとかややこしいの書きたくなったら
さっさとPowerShell移ったほうがいい
すごいっていうかまとも
cmd糞すぎ
847デフォルトの名無しさん:2012/03/15(木) 20:42:26.66
powershellだってややこしいぞw
powershell偉すぎ
848デフォルトの名無しさん:2012/03/15(木) 21:41:30.31
スレタイ(ry
849デフォルトの名無しさん:2012/03/15(木) 22:28:27.27
powershellというのもbatに書いて実行できないんですね
なんかググってもよくわかりません
850デフォルトの名無しさん:2012/03/15(木) 23:12:07.41
powershell clipboard cmdでぐぐったら
http://app.m-cocolog.jp/t/typecast/221427/189040/20299306
851デフォルトの名無しさん:2012/03/18(日) 21:06:36.75
バッチでサブフォルダを含むディレクトリを移動させることはできないでしょうか
852デフォルトの名無しさん:2012/03/18(日) 21:23:41.56
@echo off
move サブフォルダを含むディレクトリ 移動先
853デフォルトの名無しさん:2012/03/19(月) 02:31:31.70
そんな簡単な質問なのか?
854デフォルトの名無しさん:2012/03/19(月) 18:33:47.67
taskkill のバッチを作ってスタートアップに登録したのですが
プロセスが開始される前にバッチが適用されてしまうようなのです・・・
どうにか時間を置く方法はないでしょうか?
855デフォルトの名無しさん:2012/03/19(月) 19:31:46.20
タスクスケジューラ
856デフォルトの名無しさん:2012/03/19(月) 20:30:09.99
tasklist で目的のプロセスの有無を調べる
見つかるまで「10秒おきぐらい」でループ
見つかったら即座にtaskkill OR 見つかったらある程度余裕を見て数秒待ちを入れて taskkill

って”全体”の話?
それとも”10秒おきぐらい”のやりかたの話?
857デフォルトの名無しさん:2012/03/19(月) 20:42:50.62
taskkillで成功するまでループ
858デフォルトの名無しさん:2012/03/19(月) 22:12:20.77
教えてください。
例えば
d:\aaaというフォルダとe:\bbbというフォルダがあったとします。
それぞれのフォルダ内にあるファイルを比較して、ファイルの位置(相対パス)とファイルの内容が完全に一致したら
それぞれのフォルダからファイルを削除し、代わりにそのファイルをf:\cccというフォルダに相対パスの位置関係をキープしたまま
移動させたいのですが、バッチファイルでこういうスクリプトは組めますか?
859デフォルトの名無しさん:2012/03/19(月) 22:15:34.04
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して移動するかどうか判断って感じかな
861デフォルトの名無しさん:2012/03/20(火) 16:08:56.57
forとifとfcとmoveとdelだな
862デフォルトの名無しさん:2012/03/20(火) 16:49:13.10
>>856
見つかるまで探せるんですね!!
ありがとうございます。

バッチなる物を作るの初めてなので色々調べてみます。
863デフォルトの名無しさん:2012/03/20(火) 20:11:27.97
バッチのforコマンドでUNIXシェルのwhile trueみたいな
無限ループって書けるのかな?

自分はバッチで条件満たすまでの無限ループ書く時は
:loop
tasklist | findstr /l /i /b /c:"プロセス名 "
if %errorlevel% neq 1 goto loop
みたいにして無限ループさせるようにしてます
864デフォルトの名無しさん:2012/03/20(火) 21:01:00.78
for /L %%n in (1,1,0) do echo %%n
865デフォルトの名無しさん:2012/03/20(火) 21:04:14.37
for /L %%n in (1,1,0) do taskkill /im hoge.exe && goto :eof
866デフォルトの名無しさん:2012/03/20(火) 21:09:41.91
sleep 入れよ
867デフォルトの名無しさん:2012/03/20(火) 21:22:06.24
sleepコマンドなんてないじゃん
868デフォルトの名無しさん:2012/03/20(火) 21:28:28.48
あるよ
>sleep/?
Usage: sleep time-to-sleep-in-seconds
sleep [-m] time-to-sleep-in-milliseconds
sleep [-c] commited-memory ratio (1%-100%)
869デフォルトの名無しさん:2012/03/20(火) 21:29:29.05
sleep なければ入れよ
870デフォルトの名無しさん:2012/03/20(火) 21:47:36.44
スリープネタはいい加減テンプレに入れとけよ
871デフォルトの名無しさん:2012/03/21(水) 00:25:40.37
俺もgotoループのが多いかな
forは「forにしか出来ないこと」に使いたい感じがする
872デフォルトの名無しさん:2012/03/21(水) 05:45:40.88
>>860
ありがとう。
/s を付けると絶対パスで表示されるので、aフォルダとbフォルダのパス名を含めたファイル名が
一致しなくなってしまうのですが、dir /s の結果からaフォルダやbフォルダまでのドライブ名を含めた
パスの文字を消す手段ってありますでしょうか。
質問ばかりですいません。
873デフォルトの名無しさん:2012/03/21(水) 15:53:32.26
>>872
だから>>861と言ったのに無視するならもう知らねえよ
874デフォルトの名無しさん:2012/03/21(水) 16:50:16.48
>>872
860ぢゃないけど、
dir /sの出力をsedとかに渡してパスの最初を取っ払うことを検討してみたらどうかな
onigsed使いだけどちょっとしたテキスト編集に便利
860の例だと、dir /s /b /a-d | onigsed "s/^D:\\aaa\\//"
とやると、行頭の"D:\aaa\"の部分を削除できるよ
875デフォルトの名無しさん:2012/03/21(水) 19:48:12.10
どうしてそれでやりたけりゃset/?で文字列置換すれば
876デフォルトの名無しさん:2012/03/22(木) 11:23:53.95
>>872
subst して dir /s して ドライブ名だけ消したら楽そう
877デフォルトの名無しさん:2012/03/22(木) 11:42:30.76
ていうかaaa bbb cccの3つともsubstして比較してmoveしたら?
878デフォルトの名無しさん:2012/03/22(木) 12:00:00.64
書けるけど書きたくない。が正解。
879デフォルトの名無しさん:2012/03/22(木) 20:00:37.09
オーソドックスにやるのが一番
880デフォルトの名無しさん:2012/03/22(木) 20:30:34.78
ドライブレターが空いてないと使えないし
881デフォルトの名無しさん:2012/03/23(金) 00:21:33.80
subst 甲: c:\
dir 甲:
882デフォルトの名無しさん:2012/03/23(金) 09:09:45.01
>>881
知らんかった…
当然ながらエラーではじくアプリの方が多いが、
まともにパス名として使えたのも結構あってワロタ
883デフォルトの名無しさん:2012/03/23(金) 09:15:36.51
「現在の仮想ドライブ一覧」には出て来ないな。
隠し機能だからか?w
884デフォルトの名無しさん:2012/03/23(金) 10:30:03.87
@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%
885デフォルトの名無しさん:2012/03/23(金) 17:15:40.34
長過ぎだろ
>>861なら1行でできるだろ
886デフォルトの名無しさん:2012/03/23(金) 19:01:31.47
では1行で書いてください
887デフォルトの名無しさん:2012/03/23(金) 19:37:36.92
自分で書けるだろ
888デフォルトの名無しさん:2012/03/23(金) 19:48:16.27
おまえが書けよ
889デフォルトの名無しさん:2012/03/23(金) 20:06:47.18
なんで?
890デフォルトの名無しさん:2012/03/23(金) 20:10:18.24
ヒントは十分出てるからアタマさえあればできるだろ?
できないならできるところまででいいからやれよ
パクリばかりじゃ身に付かないよ
891デフォルトの名無しさん:2012/03/23(金) 22:09:47.66
身に着ける気なんて無いだろbatファイルなんて
動きゃいいじゃん
892デフォルトの名無しさん:2012/03/23(金) 22:42:34.23
だからさ、1行で書いてみろよw
893デフォルトの名無しさん:2012/03/23(金) 23:54:24.16
やだよ
894デフォルトの名無しさん:2012/03/24(土) 00:05:20.44
それは本人のためにならん
895デフォルトの名無しさん:2012/03/24(土) 02:00:07.68
一行で書けたって、本人のやくに立つわけじゃないよな
896デフォルトの名無しさん:2012/03/24(土) 02:13:48.89
>>884
とりあえず set "d=%~f2" とかやると幸せになれるかもね
897デフォルトの名無しさん:2012/03/24(土) 02:48:32.95
不幸になりますw
898デフォルトの名無しさん:2012/03/24(土) 02:56:09.24
ゴミが付かないって事かね
899デフォルトの名無しさん:2012/03/24(土) 03:02:23.21
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 $:
900デフォルトの名無しさん:2012/03/24(土) 03:09:44.64
set "d=%~f2"
set d="%~f2"
なんのためにゴミ付けてるか理解出来てない猿が居てるようだね
901デフォルトの名無しさん:2012/03/24(土) 03:15:45.66
>>899
なんのためにsubstしてんだよw
コーヒー吹いちまっただろw
ふたつめのfor要らない。効率悪すぎ
902デフォルトの名無しさん:2012/03/24(土) 03:18:12.78
夜中にコーヒー飲むと健康によくありませんよ
903デフォルトの名無しさん:2012/03/24(土) 06:04:00.56
うわ、恥ずかしい
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は排他制御かかってる状態だと
コマンド失敗の危険があるからエラー処理が必要だよ
906デフォルトの名無しさん:2012/03/24(土) 08:49:45.74
>>898
2chコピペすると付いてくる
行末のスペースが変数に付かない
907デフォルトの名無しさん:2012/03/24(土) 09:18:05.44
>>904
コンペアできないサンプル プリーズ
908デフォルトの名無しさん:2012/03/24(土) 09:44:04.16
compでの相違点の表示見ると既定では
オフセットもデータも16進数だよな
どう見てもバイナリ比較じゃね
909デフォルトの名無しさん:2012/03/24(土) 10:45:32.44
910デフォルトの名無しさん:2012/03/24(土) 13:28:13.71
>>903

とってもありがとう。こんなに短いばっちふぁいるで出来るなんておどろきです。

ところで、同パス同名ファイルが存在した場合、ファイルサイズが同じ場合だけFCコマンドを実施させるようにしたいと思うのですが、
その場合、%%~zとかをつかうことになるのでしょうか。ちょっといまググって勉強中です。
911デフォルトの名無しさん:2012/03/24(土) 13:40:31.15
サイズ違いとか関係なしにFCに渡せばいいんじゃね。
というかファイル有無のチェックも不要なんじゃね。
ところで昔、FCって戻り値が無かったような気がするけど、
今は大丈夫なのかい?
912デフォルトの名無しさん:2012/03/24(土) 14:03:08.10
fc /b a.jpg b.jpg && echo 一致
でXP機でテストしてみたら一致するファイルの場合だけechoされるから戻り値はあるみたい
2K機以前の環境はもう無いので確認できず
913デフォルトの名無しさん:2012/03/24(土) 14:19:29.94
>>912
ああ、ちょっと俺の書き方が悪かったね。
おれのWin2kではFCの戻り値が

比較するファイルが無い場合 1
ファイルサイズが違う場合 1
同じファイルの場合 0
中身が違うがサイズの同じ場合 0

なんだよ
今は仕様が変わったのかい?
914デフォルトの名無しさん:2012/03/24(土) 14:30:52.99
あ、ごめん
比較するファイルが無い場合 2
だった
915デフォルトの名無しさん:2012/03/24(土) 15:06:59.35
比較するファイルが無い   2
中身が違うがサイズは同じ 1
不一致             1
一致               0

XPとWin7
確認出来ないけど2Kが>>913の言う仕様なら使い物にならないですね
916デフォルトの名無しさん:2012/03/24(土) 15:31:07.55
>>915
情報サンクス
仕様というよりバグかも
917デフォルトの名無しさん:2012/03/24(土) 15:31:53.82
>>910
> %%~zとかをつかうことになるのでしょうか
その場合>>903のバッチだと #:%%~pnxi のファイルのサイズを取得出来ないから
一旦
call :sub "%%~fi" "#:%%~pnxi"
とcallしてサブルーチンで
:sub
if "%~z1"=="%~z2" (fc /b %1 %2 >nul)
とかかな

ファイルサイズが同じで中身が違うなんてことはありえるから
サイズの一致確認なんて必要ないと思うけど
更新したファイルは必ずサイズが変わるの?

>>911
> ファイル有無のチェックも不要なんじゃね
それはさすがに乱暴すぎだと思う
918デフォルトの名無しさん:2012/03/25(日) 00:09:23.97
>>913
> おれのWin2kではFCの戻り値が
>
> 比較するファイルが無い場合 1
> ファイルサイズが違う場合 1
> 同じファイルの場合 0
> 中身が違うがサイズの同じ場合 0

自分の関わったWin2003で稼働するシステムで
fcのリターンコードで処理分岐してる機能があるんですが、
2003でも2000と同じ仕様(相違点はあるが同一サイズ)なら
潜在バグ発覚ですorz
919デフォルトの名無しさん:2012/03/25(日) 00:53:03.12
仕様です
920デフォルトの名無しさん:2012/03/25(日) 09:43:16.46
>>913
もしかして/bオプション付けずにASCIIモードで比較していませんか?

Fc.exe] 正しく動作しませんでは、Windows XP で、コマンドが文字列の 128th バイトすべてを異なるファイルを比較するとき
http://support.microsoft.com/kb/953929/ja
921デフォルトの名無しさん:2012/03/25(日) 10:09:48.23
fc /b で試しましたよ
XP のバグは知らない
922デフォルトの名無しさん:2012/03/25(日) 10:46:35.52
>>920
win2kでもxpと同様のバグがあるようだ
xは128バイト、yはその最後のみを変えた物

>fc x y
FC: 相違点は検出されませんでした
ERRORLEVEL=0

>fc /b x y
0000007F: 61 62
ERRORLEVEL=0

でも>>913はこれとは無関係だよ
923デフォルトの名無しさん:2012/03/25(日) 11:02:09.34
>>921-922
了解しました
2Kでの動作確認までして頂きありがとうございました

このバグは2003でも発生するのですが、2KとXPで戻り値の仕様変更があったということは
このバグもVistaや7では修正されているかもしれないですね
924デフォルトの名無しさん:2012/03/25(日) 11:05:27.88
>>881
subst 愛: h:\
とかやったらExplorerで一覧に出ないどころかパス直打ちでも移動すら出来ねぇ。
エロ動画の隠し場所には使えそうにないな。
925デフォルトの名無しさん:2012/03/25(日) 11:27:57.20
substは隠し場所には使えません
両方アクセスできるでしょ
926デフォルトの名無しさん:2012/03/26(月) 06:37:19.48
comp使ったほうがいいのかな。
927デフォルトの名無しさん:2012/03/26(月) 07:16:08.77
うん
928デフォルトの名無しさん:2012/03/27(火) 02:03:38.52
擬似コード
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"
))
929デフォルトの名無しさん:2012/03/27(火) 02:41:14.60
substなしで1行でお願いします
930デフォルトの名無しさん:2012/03/27(火) 03:38:59.95
改行とって&入れればええがな
931デフォルトの名無しさん:2012/03/27(火) 03:40:06.03
それもできない?
932デフォルトの名無しさん:2012/03/27(火) 03:45:53.69
引数渡しでお願いします。
あとtokens=2*とか無しね。
階層数は任意で。
>>884みたいに。
933デフォルトの名無しさん:2012/03/27(火) 04:00:20.22
それぐらいできない?
934デフォルトの名無しさん:2012/03/27(火) 04:18:41.00
>>884よりこっちがいい
935デフォルトの名無しさん:2012/03/27(火) 16:04:36.49
echo n|comp
するしかないのかい?うっとーしー仕様だこと
936デフォルトの名無しさん:2012/03/27(火) 20:01:34.43
>>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)
937デフォルトの名無しさん:2012/03/27(火) 22:15:11.47
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%%"
))
938デフォルトの名無しさん:2012/03/28(水) 02:25:35.60
パスの駄目文字
>>936 !
>>937 % =
939デフォルトの名無しさん:2012/03/28(水) 04:53:25.21
バッチは駄目でしょ
940デフォルトの名無しさん:2012/03/28(水) 05:19:38.27
工夫すればダメ文字を減らす事もできるけど、
そのために長いバッチを書くのもどうかと思うがね
941デフォルトの名無しさん:2012/03/28(水) 14:42:57.71
Win7のAdminでtitle fooってやると
管理者: foo
ってなってしまうんだけど管理者:がつかないようにする方法無いですか。
foo.lnkというショートカットから起動するとつかないんだけど動的に変えたいんです。
942デフォルトの名無しさん:2012/03/28(水) 15:27:04.25
いまどきバッチファイル書いてるおとこの人って年収低そう。
943デフォルトの名無しさん:2012/03/28(水) 16:25:24.13
年収ある奴はまだマシ
なるほど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
953952: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"
955952:2012/04/07(土) 08:18:41.22
おはようございます。

ここに書き込みして、頭を整理して、ググッて試行錯誤したら
解決することが出来ました。

<変更箇所>
%Converter% "%*" DXT1 "%*"

<変更後>
%Converter% "%*" -f DXT1 -o %~dp1
※Converterは別のEXEを指定

こちらを利用させて頂きありがとうございます。
こんにちわ、
質問させてください。

ex.1) set PATH="%~dp0;%PATH%"
ex.2) set PATH=%~dp0;%PATH%

どちらでもパスは通ります。
MS によると、パスにスペースが含まれている場合は、二重引用符で囲む必要があると云っています。
これは set PATH のみこういう仕様なのでしょうか?
もやもやしています…

参考: ttp://technet.microsoft.com/ja-jp/scriptcenter/ff576179
>>956 です
書き忘れてた;;

すいません、前置きに、%~dp0 のパスにスペースが含まれているとします。
出鱈目だろ
本来は囲まないのが正しい
"%~dp0";%PATH% の間違いじゃないの
自分家でpath表示してみな
>>959

あ、そうです、
>>960
はい自分でやりました。

>>958
その情報聞いて何か、ほっとしました、 笑
神経質すぎますかね、

ありがとうございます。
echoするとわかるが、クォートで括られそう。
set "PATH=%~dp0;%PATH%"
ならば問題ないが。
おまえらpathコマンドも知らんのか?

path/?
それはリンク先に言え。

setでも構わんことは構わん
>echoするとわかるが、クォートで括られそう。

おまえpathコマンドも知らんのか?
おまえpathコマンドも知らんのか?
空白を含むパスは囲む必要はないが、;を含むパスは囲む必要があるな
空白が区切りのときは、空白を含むパスを囲む
;が区切りのときは、;を含むパスを囲む
これが当たり前
ttp://technet.microsoft.com/ja-jp/scriptcenter/ff576179
を書いた奴が間抜けなだけ
set Path = %Path%;"LocalDrive:\Program Files\Log Parser\"
とかホント酷いな
setコマンドで環境変数設定するには=の前後に空白を入れるなって
ライターは義務教育で習わなかったのかよ
970デフォルトの名無しさん:2012/04/13(金) 03:16:48.11
翻訳なら翻訳ミスが考えられるが、日本語オリジナルみたいだし
971デフォルトの名無しさん:2012/04/14(土) 18:15:53.66
長文失礼します。

長時間のバッチを動かすのですが、
バッチ終了時にシャットダウン/休止/サスペンド/何もしないの各動作をさせたいです。
バッチが終了するまでに、これらの動作を予め選択しておきたい場合、
現在の選択状況が容易に把握できて、選択の設定が楽な方法を探しています。

WindowsXP上で動かすのですが、とりあえずの案としては、
デスクトップ上に適当な名前(例えば"xxバッチ終了時シャットダウン予約中"とか)のファイルを置いておき、
そのファイル名の有無で動作を決定するというものです。
他に何かよい方法がありましたらお願いします。

あと、シャットダウン/休止/サスペンドする場合に、
その動作を中止させるための猶予時間を設けたいのですが、
自分自身のコマンドプロンプト画面を最前面に持ってくる方法も探しています。

検索のしかたが悪いのか、いまいちピンと来るものが無くて困っております。
何でもよいので助言を…よろしくお願いします。
972デフォルトの名無しさん:2012/04/14(土) 19:44:07.74
>>971
選択の設定は誰がするの?
デスクトップだと消しちゃう可能性あるから
デスクトップにはスイッチ用と確認用のバッチ置いとくかなあ

猶予時間は標準のダイアログでいいんじゃないの
http://www.atmarkit.co.jp/fwin2k/win2ktips/697cmdpwcfg/cmdpwcfg.html
973デフォルトの名無しさん:2012/04/14(土) 20:24:03.43
shutdown/?
974デフォルトの名無しさん:2012/04/15(日) 20:48:37.20
>>972
レスありがとうございました。すぐにレスできず、すみません。

> デスクトップだと消しちゃう可能性あるから
> デスクトップにはスイッチ用と確認用のバッチ置いとく
設定も私なのですが、たしかに間違えてゴミ箱へポイとかやりそうですよねw
そっちの方向でも考えてみます。提案をありがとうございました。

リンク先の記事は実は参照済みでして、シャットダウン時には使えますね。
休止もスタンバイも出来ると良かったのですが…

引き続き調べているのですが、シャットダウン・休止・スタンバイの猶予&中止については
vbscriptと連携させて、バッチが終了したらvbscript起動してダイアログを最前面で表示。
その中で、タイマ監視しつつ、中止ボタン押下待ちみたいなことで出来る気がしてきました。

シャットダウンは>>972-973氏紹介のコマンドで、
休止・スタンバイはSetSuspendStateというプログラムが使えそうです。

引き続き、助言をよろしくお願いします。
975デフォルトの名無しさん:2012/04/20(金) 19:40:39.39
windowsのショートカットで
powershell c:\foo\hoge.ps1
としてpowershellスクリプトを実行するようにしています.
マウスでクリックするぶんには良いのですが
cmd.exeから.lnkを実行しようとしてもリンク先のファイルをクリックしたのと
同じあつかいになるみたいでノートパッドで開かれるだけです.
.lnkをクリックした時と同じように動作させるにはどうしたらよいでしょう?
976デフォルトの名無しさん:2012/04/20(金) 20:01:30.17
ttp://blog.livedoor.jp/seec/archives/996252.html
こういうふうに作ったショートカットを
cmd.exeから使おうという話です
977デフォルトの名無しさん:2012/04/21(土) 00:05:00.19
>cmd.exeから.lnkを実行しようとしてもリンク先のファイルをクリックしたのと
>同じあつかいになるみたいでノートパッドで開かれるだけです.

そんなはずがない
978デフォルトの名無しさん:2012/04/21(土) 00:23:21.81
psが起動しても関連づけされてなければ不明なファイルとしてnotepadで開くのは普通だろ
979デフォルトの名無しさん:2012/04/21(土) 00:43:56.20
解決しました.すみません。
980デフォルトの名無しさん:2012/04/21(土) 01:01:36.90
>>978
>windowsのショートカットで
>powershell c:\foo\hoge.ps1
>としてpowershellスクリプトを実行するようにしています.
よく読め
981デフォルトの名無しさん:2012/04/21(土) 01:02:51.16
>解決しました.すみません。
ほらみろ
982デフォルトの名無しさん:2012/04/21(土) 01:49:57.03
>よく読め
ほらみろ
983デフォルトの名無しさん:2012/04/21(土) 02:04:22.25
>>981-982
外人の作ったやつはどうにもモンスター的な怖さが多くて・・・
やはり和製の方がジトっとくる感じの演出で好きよ?
984デフォルトの名無しさん:2012/04/21(土) 02:33:02.70
>外人の作ったやつはどうにもモンスター的な怖さが多くて・・・
よく読め

>やはり和製の方がジトっとくる感じの演出で好きよ?
ほらみろ
985デフォルトの名無しさん:2012/04/21(土) 11:44:31.51
ほらみろ
986デフォルトの名無しさん:2012/04/21(土) 12:46:49.17
よく読め
987デフォルトの名無しさん:2012/04/21(土) 16:28:08.54
かわいそうにそんなに痛いか?
988デフォルトの名無しさん:2012/04/21(土) 17:06:08.85
>かわいそうにそんなに痛いか?
よく読め
989デフォルトの名無しさん:2012/04/21(土) 18:14:23.46
あらますっかり壊れてるみたいねかわいそ杉
990デフォルトの名無しさん:2012/04/21(土) 18:53:42.95
ほらよめ
991デフォルトの名無しさん:2012/04/21(土) 19:06:46.43
ぺたぺた
992デフォルトの名無しさん:2012/04/21(土) 19:24:49.63
>psが起動しても関連づけされてなければ不明なファイルとしてnotepadで開くのは普通だろ
993デフォルトの名無しさん:2012/04/21(土) 19:32:40.33
>windowsのショートカットで
>powershell c:\foo\hoge.ps1
>としてpowershellスクリプトを実行するようにしています.
994デフォルトの名無しさん:2012/04/21(土) 21:25:11.11
>psが起動しても関連づけされてなければ不明なファイルとしてnotepadで開くのは普通だろ
ほらよめ
>windowsのショートカットで
>powershell c:\foo\hoge.ps1
>としてpowershellスクリプトを実行するようにしています.
ぺたぺた
995デフォルトの名無しさん:2012/04/21(土) 21:27:41.62
うめ
996デフォルトの名無しさん:2012/04/21(土) 22:06:53.38
はずいので早く埋めたいのか?
997【.cmd】 バッチファイルスクリプト %9 【.bat】:2012/04/21(土) 22:35:55.86
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %8 【.bat】
http://toro.2ch.net/test/read.cgi/tech/1315844420/

【.cmd】 バッチファイルスクリプト %7 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1298873550/
【.cmd】 バッチファイルスクリプト %6 【.bat】
http://hibari.2ch.net/test/read.cgi/tech/1277465356/
【.cmd】 バッチファイルスクリプト %5 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1242268171/
【.cmd】 バッチファイルスクリプト %4 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1229955189/
【.cmd】 バッチファイルスクリプト %3 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1217860043/
【.cmd】 バッチファイルスクリプト %2 【.bat】
http://pc12.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
998デフォルトの名無しさん:2012/04/21(土) 22:36:09.64
>はずいので早く埋めたいのか?
ほらみろ
999997:2012/04/21(土) 22:39:35.11
すれ立て間違えたw

【.cmd】 バッチファイルスクリプト %9 【.bat】
http://toro.2ch.net/test/read.cgi/tech/1335015478/
1000デフォルトの名無しさん:2012/04/21(土) 22:40:10.51
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。