12/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:デフォルトの名無しさん
12/02/05 12:31:41.87
>>491
cdの行を消してrmdir "%~dp0"としてみましたが出来ませんでした。
「プロセスはファイルにアウセスできません。別のプロセスが使用中です。」
との事だったので、そもそもの消すフォルダからbatを実行したのでは難しそうと思い
試しにrmdir "C:\Users\owner\Desktop\移動先\新しいフォルダ"
としてみたら無事に消す事が出来ました。ありがとうございます。
>>492
ありがとうございます!無事に出来ました!
粋な"MVDIR"のお陰でもう忘れないと思います。
後はじっくり解読しながら使いこなせるよう頑張ります。
わざわざ全文書いて頂きどうもありがとうございました。
>>493
>2個目以降は上書き確認でストップ
483では出てきませんでしたが、確かに他の書き方だと出てきました。
てっきり削除確認のY/Nかと思ってましたが上書きだったんですか…
思いもしませんでした。ご指摘どうもありがとうございました。
496:デフォルトの名無しさん
12/02/05 13:04:19.85
>>494
echo %v%でばぐるのかな
これは&を^&に置換するか、
setlocal enabledelayedexpansion
としておいて、echo !v!とかすればちゃんと&も表示されるよ
497:デフォルトの名無しさん
12/02/07 17:07:11.18
置換するにも、遅延しないとできねえよ
498:デフォルトの名無しさん
12/02/09 18:25:43.69
windowsのスタートアップの中でバッチファイルを動かして、他のマシンにマジックパケットを
送りたいんですが、どうもその時点で無線LANが繋がってないようで、対象マシンがWakeUp
してくれません。
バッチ処理を遅延するにはどうしたらよいですか?
499:デフォルトの名無しさん
12/02/09 19:04:48.67
ping -n
timeout
500:デフォルトの名無しさん
12/02/09 21:01:48.95
Vista 以降ならむしろ、スタートアップじゃなくてタスク向きな気がする。
501:デフォルトの名無しさん
12/02/09 21:15:45.22
:loop
ping -n 1 "192.168.0.1"||goto :loop
502:デフォルトの名無しさん
12/02/09 21:29:06.33
powershell -command { start-sleep -s 5 }
なんでWindowsって意地でもsleep標準装備しないんだYO!
503:デフォルトの名無しさん
12/02/09 21:52:33.59
>>502
これ以上Unixからパクるのはプライドが許さないから
なんちてw
504:498
12/02/09 22:27:55.28
みなさま、ありがとうございます。
とりあえず、対象マシンがスリープ状態なので、ping に応答しません
timeout と powershell-command {start-sleep -s 120 }
を試してみたんですが、起動後ならうまく動くんですが、
スタートアップから起動すると、うまく行きません
電文の送信に失敗しました、とか一瞬表示されてパケットは送られていないようです。
505:デフォルトの名無しさん
12/02/09 22:36:54.27
スタートアップだから動かないってことはないだろう
最終行にpause入れて何がどう駄目なのか調べてデバッグするしか
506:デフォルトの名無しさん
12/02/09 22:42:57.44
> 対象マシンがスリープ状態なので、ping に応答しません
無線LAN親機とかデフォルトゲートウェイにpingしてLANが繋がってからマジパケ送ればいい
507:デフォルトの名無しさん
12/02/10 15:18:28.31
システムのパスにbatファイルから一時的に追加する書き方を教えてください
508:デフォルトの名無しさん
12/02/10 15:36:47.43
sex
509:デフォルトの名無しさん
12/02/10 17:29:08.94
set PATH=c:\bin;C:\tool;%PATH%
510:デフォルトの名無しさん
12/02/10 19:16:11.19
path /?
511:498
12/02/10 20:59:56.43
>505,506
そうか、pingは自分のethを試すためだったんですね。
powershellもぐぐってやっと動く用になりました。
ありがとう
512:デフォルトの名無しさん
12/02/11 01:09:40.46
>>502
PowerShellを標準装備するようにしたから、わざわざcmd用に作る必要がないってだけじゃね?
まあたいした手間でも全然ないとは思うが
513:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/11 15:56:01.63
ローカルにサーバを立ててましてIPが127.0.0.1になります
サーバが動いているかをbatファイルで監視して、サーバが落ちたらbatファイルを終了すると方法を伝授してください
515:デフォルトの名無しさん
12/02/11 15:59:23.21
>>513
バッチファイルにも(0% loss)ってそのまま書いてる?
もしそうなら%を%%にしてやってみて
516:デフォルトの名無しさん
12/02/11 18:21:04.29
>>515
出来ました!ありがとう御座います
でも「0%」だと何かの変数を展開しようとするんですかね?
それを新たに%を付けて文字列として扱う用にしてるとか…
どっちにしろ""で囲んだら変数は展開されないっていう認識だったのでそれも間違いみたいですね…
勉強してきます
517:デフォルトの名無しさん
12/02/11 20:05:54.56
wgetを使ってソフトの最新バージョンをDLできるバッチを作成したいと思ってるのですが
ファイルのリンクがURLリンク(hoge)更新日付/a-z,0-9を含む不規則な文字列/v1.0.0.zip
のような場合で不規則な文字列に対応させるにはどう記述すればいいでしょうか
日付は%date%で置き換えられるのが分かりましたが今回の件で詰まってしまいました・・・
518:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/11 20:35:28.07
@echo off
:re
ping 0.0.0.1||goto re
:end
520:デフォルトの名無しさん
12/02/11 20:47:39.62
for /f "tokens=4 delims=/" %%a in (target.html) do (echo URLリンク(hoge)更新日付/%%a/v1.0.0.zip)
521:デフォルトの名無しさん
12/02/12 01:24:18.48
>>517
直リン or 不規則な部分、の入ったページがあるならそのページをゲットして
URL を抜き出す or フルのURLを生成、すればいいじゃない
522:デフォルトの名無しさん
12/02/12 11:55:51.46
>>518
ありがとうございます!
523:デフォルトの名無しさん
12/02/12 11:59:26.64
>>518
試してみたんですが、動きませんでした
Windowsにapacheを入れてサーバ起動後にbatファイルを起動して、サーバを終了させても batファイルが終了しませんでした
524:デフォルトの名無しさん
12/02/12 12:13:29.84
鯖が生きてるかどうかとpingが通るかは別だろ
もっとまともなスクリプト使ってチェックするか
wgetしてファイルの中身チェックするか
wget URLリンク(localhost) || echo 死んでる
525:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/12 13:31:34.25
>>520-521
ありがとうございます
for /f "tokens="勉強になりました
調べまくってようやく521さんの答えにたどり着いたとこでした
527:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/12 14:31:07.38
>>527
> サーバが停止してたら127.0.0.1にアクセスできなくなるのですが
そのアクセスとはHTTPアクセスであって、応答無くなるのは
それはwebサーバが停止しているだけの話で
PCそのものネットワークが有効か調べるpingとは直接関係ないから。
529:デフォルトの名無しさん
12/02/12 16:47:17.56
ヘタすると、OS死んでても ping 応答する奴すらあるし。
530:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/15 02:49:03.22
テスト
copy a Ā
532:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/15 03:05:39.01
>copy a Ă
1 file(s) copied.
これはokなのに…
534:デフォルトの名無しさん
12/02/15 06:17:53.00
codepageは?
535:デフォルトの名無しさん
12/02/15 08:09:38.30
D:\>chcp
現在のコード ページ: 932
D:\>copy a Ā
Ā の使い方が誤っています。
D:\>copy a Ă
1 個のファイルをコピーしました。
なんだろこれ
536:デフォルトの名無しさん
12/02/15 09:54:38.86
調べてみたらこんな感じ
switch (c){
case '&':
case '<':
case '>':
case '|':
return 0x100;
default:
return c;
}
537:デフォルトの名無しさん
12/02/15 11:08:50.01
Ā = Ā
538:デフォルトの名無しさん
12/02/15 11:14:57.58
Ā = Ā
539:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/15 14:12:40.98
それ以前にfindが無いってのはどういうこと?
win98にはあったような…。win95位前は覚えてないんだけど。
542:デフォルトの名無しさん
12/02/15 14:22:32.94
winのはfindはコマンドが違うし別物
どこからか落としてきて使えないことはないけどfor /f使うのがめんどくさい
543:デフォルトの名無しさん
12/02/15 14:27:51.28
いやそれは知ってるけどさ、元からある奴は消さなきゃ無くならないだろ。
最初からないっていう環境はあんの?
544:デフォルトの名無しさん
12/02/15 15:51:48.05
>>539の事だから、どんなことやってるか凡人には想像もできない。
するだけ無駄だから「無い」はそのまま受け入れよう。
545:デフォルトの名無しさん
12/02/15 16:11:39.69
forfiles使えよ
546:デフォルトの名無しさん
12/02/15 17:14:35.31
>>540
うまくいきました!ありがとうございます!
やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね
547:デフォルトの名無しさん
12/02/15 17:37:03.90
>やっぱりDOSコマンドとUNIXコマンドは別物でwindowsでのバッチコマンドは前者のみを示すんですね
だって
548:デフォルトの名無しさん
12/02/15 17:45:33.75
UNIXを知ってると自慢したいだけだろw
549:デフォルトの名無しさん
12/02/15 17:54:23.44
一応forfilesがunixのfindもどきなんだけどね。
一応findstrがunixのqgrepもどきなんだけどね。
550:デフォルトの名無しさん
12/02/15 18:49:41.24
URLリンク(technet.microsoft.com)
551:デフォルトの名無しさん
12/02/15 19:02:11.46
こんなゴミのリンク貼るなよ。
>>550
サポートされているオペレーティング システムWindows 2000 Service Pack 3/Windows 2000 Service Pack 4/Windows Server 2003/Windows XP
552:デフォルトの名無しさん
12/02/15 20:19:45.98
すいません、教えてください。
バッチファイルの中の処理でファイルを作成するステートメントを書きます。
次のステートメントの処理が始まるのは、先のファイル作成の完了(ディスク上にファイルができる)の後ということでよいでしょうか。
コマンドプロンプトを考えれば、そうなると思うのですが、念のため。例えば外部ディスクへの書き込みまちなどをしている間に、次の処理が始まるということはないでしょうか。
初歩的な質問ですがお願いします。
553:デフォルトの名無しさん
12/02/15 21:16:05.18
普通に考えれば分かるだろ?
554:デフォルトの名無しさん
12/02/15 21:33:11.21
へえ?どう分かるんだ。教えろ。
555:デフォルトの名無しさん
12/02/15 21:40:23.55
基本的に逐次処理されるよ
ただしstartコマンドは/waitしない限りプロセスを起動して終了を待たずすぐ制御を返す
556:デフォルトの名無しさん
12/02/15 21:44:12.61
当たり前すぎて、つまらないレスですね
557:デフォルトの名無しさん
12/02/15 21:47:07.31
前のコマンドの終了を待たずに次のコマンドを実行するってことは
前のコマンドの実行開始とほぼ同時に次のコマンドを、更にその次を…ってことで
全てコマンドを同時実行するに等しい
558:デフォルトの名無しさん
12/02/15 21:52:43.88
書き込み量が多くてバッファに残ってるのに
次の処理が始まる可能性は?
559:デフォルトの名無しさん
12/02/15 21:56:07.57
>>558
頭悪そう
560:デフォルトの名無しさん
12/02/15 21:58:16.11
頭悪いひとが悩むようには作られてないってことだよw普通に考えれば
561:デフォルトの名無しさん
12/02/15 22:03:42.82
プロセスから見て終了していても、
実際には終了していない場合もある
562:デフォルトの名無しさん
12/02/15 22:15:24.97
下手の考え休むに似たり
563:デフォルトの名無しさん
12/02/15 22:18:41.49
具体的に反論してくれないとつまらん。
頭良いんだろ?お前ら
564:デフォルトの名無しさん
12/02/15 22:19:44.80
お前を楽しませてどうするbkk
565:デフォルトの名無しさん
12/02/15 22:23:41.72
つまんね
566:デフォルトの名無しさん
12/02/15 22:30:17.34
start hoge
nanika
matiawase hoge
ってどうやればいい?
567:デフォルトの名無しさん
12/02/15 22:34:21.30
頭悪いんで質問の意味が分からん
568:デフォルトの名無しさん
12/02/15 23:19:12.92
start hoge.bat
nanika
hoge.bat
start /w hoge.exe
matiawase hoge以下でやりたかったこと
569:デフォルトの名無しさん
12/02/15 23:20:08.67
わからんならスルーしろよw
570:デフォルトの名無しさん
12/02/15 23:29:55.10
それだと
matiawase hoge以下でやりたかったこと が nanika のあとにならんだろ
571:デフォルトの名無しさん
12/02/15 23:31:59.90
echo ^G
はどうやりぃい?
572:デフォルトの名無しさん
12/02/16 00:15:55.68
hoge|nanika
matiawasego
だな
573:デフォルトの名無しさん
12/02/16 00:20:12.51
>>569
誰に言ってるんだよ
俺は知らんぞ
574:デフォルトの名無しさん
12/02/16 07:54:23.11
552の質問をしたものです。
別プロセスを起動しない限り、先の処理の完了をもって次の処理が始まる
ということですね。何をもって完了というところが、疑問だったのですが、
基本的には、ファイル作成なら作成完了で制御情報が返ってきて、プロセス
が完了と判断すると考えることにしました。
皆様レスありがとうございました。
575:デフォルトの名無しさん
12/02/16 21:26:17.89
下手の考え休むに似たり
576:デフォルトの名無しさん
12/02/17 16:38:44.25
copy 巨大ファイル
なんてやってると、copyから復帰してもガリガリやってるな
577:デフォルトの名無しさん
12/02/19 00:40:52.49
>>576
遅延書き込みのせいかも
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
578:デフォルトの名無しさん
12/02/19 12:51:23.53
hou
>for %i in ("<html></html>") do echo %~i > index.htm
>type index.htm
<html></html>
579:デフォルトの名無しさん
12/02/20 10:43:13.48
親フォルダは削除せずに、サブフォルダだけを削除する方法ってありますか?
今は仕方がないので
rd C:\aaa /s /q
mkdir C:\aaa
という風にしています。
580:デフォルトの名無しさん
12/02/20 11:17:08.69
for /d %d in (c:\aaa\*) do rd /s /q %d
581:デフォルトの名無しさん
12/02/20 17:33:05.60
cd C:\aaa
rd . /s /q
582:デフォルトの名無しさん
12/02/20 17:55:32.97
cmdのカレントディレクトリって何故かロックされるんだよな
Explorerからの削除を妨害されて何度泣いたことか
583:デフォルトの名無しさん
12/02/20 18:20:43.56
カレントディレクトリが勝手に削除されたら困るだろが?
584:デフォルトの名無しさん
12/02/20 19:24:16.57
>>580
ありがとうございます
空フォルダが残ってしまいませんか?
>>581
ああ!たしかにこれで充分ですね!
585:デフォルトの名無しさん
12/02/20 19:30:49.87
cd, pushは必ず結果をチェックしないといつか泣きをみるぞ
cd C:\aaa || goto error
rd . /s /q
...
:error
pause
goto :eof
586:デフォルトの名無しさん
12/02/20 20:23:36.15
んじゃ
cd C:\aaa && rd . /s /q
587:デフォルトの名無しさん
12/02/22 02:42:34.41
最後に goto :eof とか書くのは意味あるのか?
588:デフォルトの名無しさん
12/02/22 02:52:17.45
cd の後に rd . /s /q とか怖いぞ
cd /d にしたほうが安全
589:デフォルトの名無しさん
12/02/22 03:40:34.17
バッチは途中でエラーがあっても突っ走るから怖いぞー
590:デフォルトの名無しさん
12/02/22 20:46:15.45
ビビッテンジャネーヨ!
591:デフォルトの名無しさん
12/02/22 21:13:52.68
>>587
その後に別のエラー処理を追加するケースとかを想定してんじゃね?
592:デフォルトの名無しさん
12/02/23 00:07:30.67
cdやpushdなんてせずにフルパス指定すればいいじゃん(いいじゃん)
593:デフォルトの名無しさん
12/02/23 00:08:54.73
どうしてもカレントディレクトリを変える必要があるのって
どんなケース?
594:デフォルトの名無しさん
12/02/23 00:48:49.77
更新日時の更新はどうやるんだっけ?
595:デフォルトの名無しさん
12/02/23 00:55:28.36
ロックしたいからカレントディレクトリを変えてるんだろ
RD フルパス指定だと、それ自体が消えちゃう
もちろん他の方法もあるだろうけど
596:デフォルトの名無しさん
12/02/23 01:16:36.08
type nul >>594
597:デフォルトの名無しさん
12/02/23 01:23:27.14
作成日時の更新はどうやるんだっけ?
598:デフォルトの名無しさん
12/02/23 01:34:16.63
WSHで
599:デフォルトの名無しさん
12/02/23 01:42:12.15
>>596
試したら更新されなかった
600:デフォルトの名無しさん
12/02/23 02:28:12.37
cd /d "%~dp1"
copy %1 +
601:デフォルトの名無しさん
12/02/23 17:08:20.85
対策法を見つけはしたが、皆さんならどうするのか聞かせて。iは、コマンドラインを想定。
set i="a" /? "b c"
if "%i%"==""a" /? "b c"" (echo YES)
602:デフォルトの名無しさん
12/02/23 18:10:01.03
待ち時間作るときって
WSHでやるかpingでやるかどっち使ってる?
603:デフォルトの名無しさん
12/02/23 18:30:05.89
sleep
604:デフォルトの名無しさん
12/02/23 18:58:53.54
timeout.exe 、2003以降なら標準で使えるし
『何かキーを推せば続行』がお手軽なので
timeout.exe が使えないか使えない可能性がある、待ちの確認やスキップが不要、なら ping
605:デフォルトの名無しさん
12/02/23 19:01:34.24
こんな便利なものがあったのかthx
606:デフォルトの名無しさん
12/02/23 22:27:48.98
>>600
cd使うなってよ
607:デフォルトの名無しさん
12/02/24 03:35:01.15
URLリンク(oshiete.goo.ne.jp)
これをフルPath指定ではなく、前方一致(もしくは部分一致)にするには、どうしたらよい?
URLリンク(www.tkssoft.com)
と組み合わせれば良いのかなー…と思ってるんだけど。
Forをネスト??
608:607
12/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:デフォルトの名無しさん
12/02/24 03:53:12.74
>>606
カレントディレクトリにファイルが有るんなら cd は不要だよ
copy /b %1 + nul %1
これは更新されない
copy %1 + nul %1
これは更新されるがファイルにゴミ(0x1A)が付く
610:デフォルトの名無しさん
12/02/24 10:19:43.13
>>601
@echo off
set i="a" /? "b c"
:: jは比較用
set j="b" /? "c"
:: \"a\" /\? \"b c\" を作る
set "t=%i%"
call set "t=%%t:"=\"%%"
call set "t=%%t:?=\?%%"
:: YES1だけ出たらおk
echo %i% | findstr /r /c:"%t%" >nul 2>nul && echo YES1
echo %j% | findstr /r /c:"%t%" >nul 2>nul && echo YES2
pause
611:607
12/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:デフォルトの名無しさん
12/02/24 16:23:09.36
exit /b
pause <==== これは何のお呪いですか?
:: --------------------------------- end
613:デフォルトの名無しさん
12/02/24 17:16:06.15
お祝いです
614:デフォルトの名無しさん
12/02/24 18:18:43.22
確かにexitの直後のpauseは何の意味がって感じではあるな
615:デフォルトの名無しさん
12/02/24 19:41:10.39
cd /d "%~2"
とかで引数で受けるならサブルーチンでcdする意味あるだろうけど
cd /d %src% だとcallする度にcdするのは効率悪いから
mainのforの前でcdしてしまったほうがいいね
616:607
12/02/25 00:47:22.76
>>612-615
指摘さんくす
いちおう修正版投下しとくね
※list.txtがバッチファイルと同じディレクトリにあるから、ちょっと面倒だった…
:: --------------------------------- set path
set src=C:\Users\xxxxx\Desktop\copy\src
set dst=C:\Users\xxxxx\Desktop\copy\dst
set list=list.txt
:: --------------------------------- main script
echo ------ Search and Copy Start ------
set listpath=%~dp0list.txt
cd /d %src%
for /f %%z in (%listpath%) do call :copy1 %%z
:exit
pause
exit /b
:copy1
set search1=%1
echo %search1%
for /R %%i in (%search1%*) do (
copy %%i %dst%
)
exit /b
:: --------------------------------- end
617:607
12/02/25 00:48:07.87
set listいみねぇな…まぁいいや…
いろいろありがとノ
618:デフォルトの名無しさん
12/02/25 10:10:40.37
おお、\" で、echo findstr を使うのかー!成る程。ありがとう。
恥を忍んで聞きますが、set "a=b" や、call set が不要に思えます。想定したものがあれば教えて下さい。
対策したのも、あげておきます。spaceだけを置き換えました。他のtabとかも置き換えると、行数が増えます。
set i="a" /? "b c"
set Jyouken="a" /? "b c"
set Jyouken=%i%==%Jyouken%
set Jyouken=%Jyouken: =_SPACE_%
if %Jyouken% echo YES!
619:601
12/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:デフォルトの名無しさん
12/02/25 13:37:13.64
拡張子によって処理を分岐させるにはどう書けばいいですか?
621:デフォルトの名無しさん
12/02/25 13:47:11.60
質問者が手を抜いてるのに
それに答えるアホが現れるかどうか
622:デフォルトの名無しさん
12/02/25 13:52:48.57
拡張子を判定してgotoすればいいです。
623:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/25 16:38:37.73
linuxのwgetみたいなのってbatだけでは無理ですか?
626:デフォルトの名無しさん
12/02/25 16:47:10.24
ってよく考えたら2つの比較なら
if "%~x1"==".rar" (rar" x -y -ep1 "%~1" "%~dp1") else (7z x -y "%~1" -o"%~dpn1")
でよかったですね
627:デフォルトの名無しさん
12/02/25 17:10:54.72
>>625
1.Powershellでごり押し
2.bat|cmdとwshでハイブリットごり押し
スクリプトのみはちょっときついかもね
628:デフォルトの名無しさん
12/02/25 17:27:47.53
Powershellというのでやってみます
629:デフォルトの名無しさん
12/02/25 20:34:30.84
>>609
> copy /b %1 + nul %1
> これは更新されない
更新されるが?
630:デフォルトの名無しさん
12/02/25 21:31:05.12
>>625
URLリンク(opensourcepack.blogspot.com)
こういうWindowsバイナリを使わずにってこと?
631:デフォルトの名無しさん
12/02/26 08:06:00.39
それ使っていいなら、こんなスレで質問しないと思うが…
バッチ / スクリプトのみではちょっと無理でしょ。
MSXML2.ServerXMLHTTP + スクリプトあたりが無難だと思うが。
632:デフォルトの名無しさん
12/02/26 14:33:59.21
あー聞き方が曖昧だった。
Windowsバイナリ使わずに技術的に可能ならやってみる、ってこと?
を聞いてみたかっただけ。どこまでやってみるのか分からないけど
再帰、階層、ミラー、etc,...、とか考えるだけでしんどそうなのに挑むのかと。
633:デフォルトの名無しさん
12/02/26 14:55:11.72
本当に本人かどうかはわからんけど、>>628 で Powershell でやってみると言ってるよ。
> 再帰、階層
むしろここら辺はスクリプトでも扱いやすいと思うけど。
634:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/29 10:40:52.94
>>629
俺のは更新されない
なんでだろうな
636:デフォルトの名無しさん
12/02/29 10:46:38.26
vbs呼び出して頑張って自分でソートする
637:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/29 12:02:28.55
forとechoの前の@は不要だな
639:ホイミン
12/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:ホイミン
12/02/29 15:06:06.53
でも dir /b /og の方が便利そうだね。
ごめんよ、ややこしくして。
641:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/29 16:00:18.81
こうだろうな。
move {app}\*.dll "C:\Program Files\ffdshow"
643:デフォルトの名無しさん
12/02/29 16:47:28.73
>>642
またやってしまった・・・
ダブルクォーテーションですね
ありがとうございました
644:デフォルトの名無しさん
12/02/29 20:21:18.27
>>640
おまえ、全然試してないだろ
そのバッチ作ってD&Dしてみろボケ
645:ホイミン
12/03/01 08:22:30.49
>>644 コマンドプロンプトで test.bat .\* 等と、色々やって試したんだけどね、足りなかったね。
dir がフォルダーを展開してしまうのには、書き込んでから気付いたんだけど、くどいので訂正しなかたんだよ。
使えない書き込みだから、みんな無視するだろうと思っていたよ。
一々反応してくれるのはありがたいけど、君は社会性が無いようだね。
646:デフォルトの名無しさん
12/03/01 08:25:30.43
@echo 便所の落書きに(ry&pause
647:デフォルトの名無しさん
12/03/01 11:51:26.33
便所の落書きだか知らんが
どう試したんだよw 全然ダメだろw
648:デフォルトの名無しさん
12/03/01 13:03:21.98
@echo 便所の落書きに^(ry&pause
649:デフォルトの名無しさん
12/03/01 15:15:45.41
dirの/oは引数をソートしないよ
650:デフォルトの名無しさん
12/03/01 15:54:15.80
複数のファイルをバッチにD&Dしたら
引数の順番って、どう決まるの?
echo %*
マウスカーソルの位置のファイルが一番目?
651:デフォルトの名無しさん
12/03/01 22:29:17.92
そうよ
2番目以降は並び順、ラップラウンド
652:デフォルトの名無しさん
12/03/01 22:30:26.30
ついでに言うと、1番目ファイルでカレントディレクトリ
653:デフォルトの名無しさん
12/03/01 23:10:40.16
バッチにD&Dしたら、カレントディレクトリは
%HOMEDRIVE%%HOMEPATH%が既定値なのでは?
654:デフォルトの名無しさん
12/03/01 23:25:46.89
なのではって?そうなるのか?OSは?
655:デフォルトの名無しさん
12/03/01 23:30:35.02
すまん。俺のPCは古い化石なんで、Win2000
他のは違うんかも
656:デフォルトの名無しさん
12/03/02 00:04:32.12
カレントディレクトリはバッチに落とした場合とバッチのショートカットに
落とした場合で異なる。
657:デフォルトの名無しさん
12/03/02 00:38:45.35
ショートカットの場合はプロパティで確認できる。
D&Dしたファイルとは無関係なようです
658:デフォルトの名無しさん
12/03/02 00:40:18.10
ショートカットで設定してなければバッチと同じ
当たり前だろ
659:デフォルトの名無しさん
12/03/02 00:56:50.35
だから何?
おれはショートカットの話は別にどうでもいいんだが
660:デフォルトの名無しさん
12/03/02 01:15:31.22
カレントディレクトリはバッチに落とした場合とVBSに
落とした場合で異なる。
661:デフォルトの名無しさん
12/03/02 01:16:24.16
だから何?
おれはVBSの話は別にどうでもいいんだが
662:デフォルトの名無しさん
12/03/02 01:20:45.18
他人のレスの真似するなよ。
663:デフォルトの名無しさん
12/03/02 02:36:25.83
なんでvbsは違うんだ?
664:デフォルトの名無しさん
12/03/02 02:39:43.76
だから何?
おれはVBSの話は別にどうでもいいんだが
665:デフォルトの名無しさん
12/03/02 02:53:26.53
>>659
お前バカだろ。起動時のカレントディレクトリはあてにしてはいけないという事だ。
つまり、>>652の情報は何の意味もない。
666:デフォルトの名無しさん
12/03/02 02:54:30.97
なんでスレタイ読めないの?
おれはVBSの話は別にどうでもいいんだが
667:デフォルトの名無しさん
12/03/02 03:39:03.93
VBSのドロップハンドラがへぼいんだろ
668:デフォルトの名無しさん
12/03/02 08:52:29.56
>>665
お前バカだろ。当たり前だろ
669:ホイミン1
12/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 らしいね。
参考 URLリンク(www.hirax.net)
670:ホイミン2
12/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:デフォルトの名無しさん
12/03/02 14:15:09.54
コマンドとか以前に
× Drug
○ Drag
672:デフォルトの名無しさん
12/03/02 19:16:55.25
>current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、
explorer processのcurrent directoryでは?
673:デフォルトの名無しさん
12/03/02 19:33:17.13
moveでフォルダ移動のときフォルダ名指定に*使えないのは嫌がらせでしょうか
674:デフォルトの名無しさん
12/03/02 20:06:48.04
仕様です
675:デフォルトの名無しさん
12/03/03 00:56:48.46
>>669
俺は >>649 じゃないが、dir の /og は引数をソートしないようだ。
他は知らない。
というか間違いを書き込んで放置している奴が、
他人に社会性云々などと言える立場かよ。
レベルが低くて悪かったね。
便所の書き込みでした。
676:デフォルトの名無しさん
12/03/03 01:24:11.63
ドラッグ&ドロップ 前提のバッチファイルならバッチの冒頭とかに
cd /d %~dp0
や
cd /d %~dp1
とかを状況次第で必要に応じて書き加えていそうなもんだが。
OS による挙動の違いで問題、とかいってる前にしないのかね。
677:デフォルトの名無しさん
12/03/03 01:49:25.89
>>669
dir /b /on test\2\2.txt test\1\1.txt
2.txt
1.txt
678:デフォルトの名無しさん
12/03/03 03:30:18.27
どうでもいいっす
679:デフォルトの名無しさん
12/03/03 05:21:31.12
バージョンの違いだろwあほども
680:デフォルトの名無しさん
12/03/03 09:01:15.54
低レベルな事を言わないでくれってさ
681:デフォルトの名無しさん
12/03/03 10:50:21.10
>>676
バッチファイルでcd前提の処理は
UNCパスで実行された場合、想定外の動作になる
バッチファイルは相対ダメ
ゼッタイ絶対パス指定すべし
682:デフォルトの名無しさん
12/03/03 11:08:26.87
どうでもいいっす
683:634
12/03/03 12:11:55.59
>>637
ありがとうございます
教えて頂いた方法でやりたいことが出来ました
好奇心から、異なるディレクトリのものをまとめて送れるランチャーやファイルのリストなどから
同様のことが出来ないものかと機能拡張を試みて試行錯誤していてお礼が遅くなりました
申し訳ございません
改めまして再度質問です。よいお知恵があればご助言お願いします
arg.tmpの内容 list.txt 表示したい結果
"C:\TMP\aaa.txt" "C:\TMP\abc" "C:\TMP\abc"
"C:\TMP\abc" "C:\TMP\aaa.txt" "C:\TMP\aaa.txt"
"C:\TMP\abc.txt" "C:\TMP\abc.txt" "C:\TMP\abc.txt"
"C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\4フォルダ" "C:\TMP\abd.txt"
"C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\5フォルダ" "C:\TMP\bbb.txt"
"C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\4フォルダ"
"C:\TMP\abc\4フォルダ" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\5フォルダ"
"C:\TMP\abc\5フォルダ" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\1ファイル.txt"
"C:\TMP\abd.txt" "C:\TMP\abd.txt" "C:\TMP\abc\2ファイル.txt"
"C:\TMP\abd\123.txt" "C:\TMP\abd\efg" "C:\TMP\abc\3ファイル.txt"
"C:\TMP\abd\456.txt" "C:\TMP\abd\123.txt" "C:\TMP\abd\efg"
"C:\TMP\abd\efg" "C:\TMP\abd\456.txt" "C:\TMP\abd\123.txt"
"C:\TMP\bbb.txt" "C:\TMP\bbb.txt" "C:\TMP\abd\456.txt"
arg.tmpのソートの方法がまずいということはわかるのですがどうすればいいのやら。。
以下に書いたバッチを貼ります。少し長いですがご容赦願います
684:634
12/03/03 12:12:59.66
@echo off
set argpath=
set arglist=
call >"%~dp0list.txt"
@(for %%a in (%*) do @echo "%%~fa")|sort /o "%~dp0arg.tmp"
for /f "usebackq" %%b in ("%~dp0arg.tmp") do call :sub1 %%b
call :sub2
rem del "%~dp0arg.tmp"
pause&exit /b
:sub1
if not defined argpath (
set argpath="%~dp1"
set arglist=%1
exit /b
)
if %argpath%=="%~dp1" (
set arglist=%arglist% %1
exit /b
)
call :sub2
set argpath="%~dp1"
set arglist=%1
exit /b
685:634
12/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:デフォルトの名無しさん
12/03/03 12:38:57.51
絡んだおれがバカだった
絶対パスで好きにしてくれ
687:デフォルトの名無しさん
12/03/03 13:57:54.46
てかいまどきバッチファイルなんか書いてる奴らが総じて底辺。
688:デフォルトの名無しさん
12/03/03 14:00:13.55
>>679
テキトーなことぬかすなボケ
689:634
12/03/03 15:20:00.58
arg.tmpの内容を "%%~dpa" "%%~fa" としてソートし :sub1 の%1を%2とすることで解決出来ました
こっちのほうが効率がいいとかありましたら指摘お願いします。以下、修正したバッチです
@echo off
set argpath=
set arglist=
set tmpfile="%~dp0arg.tmp"
set output="%~dp0list.txt"
call >%output%
@(for %%a in (%*) do @echo "%%~dpa" "%%~fa")|sort /o %tmpfile%
for /f "usebackq delims=" %%b in (%tmpfile%) do call :sub1 %%b
call :sub2
del %tmpfile%
exit /b
:sub1
if not defined argpath ( goto :jump )
if %argpath%=="%~dp2" ( set arglist=%arglist% %2
exit /b )
call :sub2
:jump
set argpath="%~dp2"
set arglist=%2
exit /b
690:634
12/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:デフォルトの名無しさん
12/03/03 18:01:42.04
うざ
692:デフォルトの名無しさん
12/03/03 19:48:23.70
%~dpは早退なのかよ
693:デフォルトの名無しさん
12/03/03 20:02:34.08
遅刻なのかよ
694:デフォルトの名無しさん
12/03/03 20:06:23.02
dir /b /on test\2\2.txt test\1\1.txt
1.txt
2.txt
695:デフォルトの名無しさん
12/03/03 21:11:40.93
dir /b /on z:\z.txt y:\y.txt
z.txt
y.txt
696:デフォルトの名無しさん
12/03/03 21:39:04.11
dir /b /on z:\* y:\*
z.txt
y.txt
697:デフォルトの名無しさん
12/03/03 22:59:19.02
dir /b /on test\2\2.txt test\1\1.txt |sort
1.txt
2.txt
698:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/04 01:34:32.16
>>698
確かに引数をソートしてるな
700:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/04 01:38:36.31
ディレクトリ単位にソートってことだろ?
702:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/04 15:41:04.60
うざ
704:デフォルトの名無しさん
12/03/04 16:17:47.60
>>689-690 はファイル名に%文字があると誤動作する
705:デフォルトの名無しさん
12/03/04 18:03:47.92
どの行?
706:デフォルトの名無しさん
12/03/04 18:07:01.85
あの行
707:デフォルトの名無しさん
12/03/04 18:09:41.44
たぶんcallの引数の%が化ける
708:デフォルトの名無しさん
12/03/04 19:27:26.60
引数渡しやめて環境変数渡しにすればよい
709:デフォルトの名無しさん
12/03/04 23:36:02.16
>>704
ファイル名の%ってどうやって環境変数記号でないと判断させればいいの?
ファイル名内の%の位置を調べて存在したら
^でエスケープするしかない?
710:デフォルトの名無しさん
12/03/04 23:38:42.64
%のエスケープは%%だよ
711:デフォルトの名無しさん
12/03/05 00:00:12.25
なんでお前らいまだにバッチファイル書いてるの?
712:デフォルトの名無しさん
12/03/05 00:12:58.43
バッチファイルは基本だよ
713:デフォルトの名無しさん
12/03/05 00:36:58.96
>>709
%%
714:デフォルトの名無しさん
12/03/05 00:42:23.44
for変数と混同するんじゃね
715:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/05 23:49:44.92
^%
719:デフォルトの名無しさん
12/03/06 00:07:24.36
@echo off
for %%i in (%*) do set a=%%i& call :x
pause & goto :eof
:x
echo %a%
720:デフォルトの名無しさん
12/03/06 00:10:12.82
いつまでやってんだよカス
721:デフォルトの名無しさん
12/03/06 00:14:24.77
サンキューカッス
722:デフォルトの名無しさん
12/03/06 00:27:17.77
もっと面白いネタは無いのか
723:デフォルトの名無しさん
12/03/06 00:42:25.31
ない
724:デフォルトの名無しさん
12/03/06 01:06:38.12
とっく枯渇してるので、蒸し返しばっか
725:デフォルトの名無しさん
12/03/06 01:13:44.33
でもスレを覗くんですね
726:デフォルトの名無しさん
12/03/06 01:28:48.52
でもってなにがでもだ?
727:デフォルトの名無しさん
12/03/06 01:34:13.80
新しい知見を得るために覗いていたのか?
728:デフォルトの名無しさん
12/03/06 16:34:55.54
よほど無知なんだろ
729:デフォルトの名無しさん
12/03/06 17:10:05.33
スレ立てるまでもない質問スレで教えていただいたUNIXコマンドがあります
cat `find あるディレクトリ -name test.txt` > 一つのファイル
これはあるディレクトリ以下の全てのサブディレクトリを含めて、test.txtというファイルの内容を一つのファイルにまとめるコマンドです
Windowsでも同じようにやりたいのですが
copy ファイル1.txt+ファイル2.txt・・・・ marge.txt
といった感じに+でいちいち書いていくのが面倒なのでよい方法内でしょうか?
730:デフォルトの名無しさん
12/03/06 17:55:25.05
for /r ディレクトリ %i in (*) do type %i>>test.txt
731:デフォルトの名無しさん
12/03/06 18:14:10.14
まんまじゃねーか
732:デフォルトの名無しさん
12/03/06 18:18:00.13
え?なんかやる事とやってる事が違うくね?
733:デフォルトの名無しさん
12/03/06 18:30:45.73
こまけーことはいいんだよ!
734:デフォルトの名無しさん
12/03/06 22:36:25.51
>>730
試してみたんですが
> の使い方が誤ってます
ってエラーがでます
735:デフォルトの名無しさん
12/03/06 22:53:00.85
試す前に、なにやってるかくらい読めよ
736:デフォルトの名無しさん
12/03/06 23:03:27.10
すいませんコマンドの部分だけ変えてやったら出来たんですが全てのファイルを一つにコピーできません
for /R %%a in (test.txt) do copy /B %%a+test.txt test.txt
737:デフォルトの名無しさん
12/03/06 23:33:28.10
変えるなよバカ
738:デフォルトの名無しさん
12/03/06 23:40:45.65
試す前に、for/?くらい読めよ
739:デフォルトの名無しさん
12/03/06 23:42:24.85
だったらまともに動くものを書いてくださいよ
740:デフォルトの名無しさん
12/03/06 23:43:45.37
応用のできない奴に何を教えても無駄
741:デフォルトの名無しさん
12/03/06 23:52:11.61
それってあなたが書けないだけですよね?
742:デフォルトの名無しさん
12/03/06 23:54:03.40
あぶく銭は身に付かない
743:デフォルトの名無しさん
12/03/06 23:56:28.18
>>741
その手には乗らないよ
744:デフォルトの名無しさん
12/03/06 23:57:57.96
じゃあ邪魔しないでくださいよ
745:デフォルトの名無しさん
12/03/07 00:00:54.15
邪魔なんかしてないよw猫に小判なだけだろ
746:デフォルトの名無しさん
12/03/07 00:04:26.64
別にバッチファイルの勉強しているわけじゃないのに
くだらないクイズやナゾナゾなんて必要が無いんですよ
質問に答えられないなら邪魔でしかありません
747:デフォルトの名無しさん
12/03/07 00:08:04.61
くだらない質問に誰が答えるって?
748:デフォルトの名無しさん
12/03/07 00:09:55.18
いやにのびてると思ったら……
749:デフォルトの名無しさん
12/03/07 00:15:04.29
別にバッチファイルの勉強しているわけじゃないので
くだらない質問なんて答える必要が無いんですよ
750:デフォルトの名無しさん
12/03/07 00:16:51.61
バッチも使えないならUNIX使ってりゃいいじゃん
751:デフォルトの名無しさん
12/03/07 00:19:23.33
いや俺の認識だとむしろバッチだから使えないだと思う
普通に(無意味に)難しいよ、バッチは
752:デフォルトの名無しさん
12/03/07 00:20:15.83
答えられない人はせめて邪魔しないでもらえますか
753:デフォルトの名無しさん
12/03/07 00:22:00.94
俺、答えられるけど答える気ないだけだから邪魔してもいいよね?
754:デフォルトの名無しさん
12/03/07 00:24:14.98
それは答えられないと等しいですよね
答えられるのなら答えてるわけですから
スレの無駄なんて無能さらすのはツイッターでやってください
755:デフォルトの名無しさん
12/03/07 01:07:56.12
marge.txt くすっ
756:デフォルトの名無しさん
12/03/07 01:13:23.19
>>729には教えるだけ無駄 できないと等しいですよね
できるならやってるわけですから
スレの無駄なんて無能さらすのはツイッターでやってください
757:デフォルトの名無しさん
12/03/07 01:22:21.14
便りの無いのは良い便り
758:デフォルトの名無しさん
12/03/07 01:29:04.83
俺っちは>>730で動いたが、感謝の念もない無礼な輩が多いな
759:デフォルトの名無しさん
12/03/07 01:42:48.04
動く、という事と、
期待した結果は別なんじゃないかな。
760:デフォルトの名無しさん
12/03/07 01:43:55.08
エラーが出たら直せばいいと思うよ不通
それしないで逆切れするなんて以上
761:デフォルトの名無しさん
12/03/07 01:48:04.61
期待した結果になるように直せばいいと思うよ不通
それしないで逆切れするなんて以上
762:デフォルトの名無しさん
12/03/07 01:49:14.40
逆に、MS-DOSしかしらない人に
UNIXのシェルで作れって言ったら似たような事になると思うよ。
763:デフォルトの名無しさん
12/03/07 02:45:02.24
ならんと思うよ。
man findとかちゃんと調べるもん
764:デフォルトの名無しさん
12/03/07 02:53:36.94
馬鹿は何やっても駄目だから諦めた方がいいよ
765:デフォルトの名無しさん
12/03/07 03:03:25.28
クレクレ君に答えを与えないでくださいw
766:デフォルトの名無しさん
12/03/07 03:06:41.93
やるんじゃなかったなw
767:デフォルトの名無しさん
12/03/07 03:42:53.07
>>729,734,736,739,741,744,746,752,754
幼稚園からやり直せ
768:デフォルトの名無しさん
12/03/07 11:23:59.92
ファイルの結合はcopyだろ
誰がtypeでDOSに文字をかけと言った
769:デフォルトの名無しさん
12/03/07 16:33:17.37
だってcatじゃん
770:デフォルトの名無しさん
12/03/07 16:35:26.05
便所の書き込みに何を言ってる
771:デフォルトの名無しさん
12/03/07 16:38:23.60
自演ならもう少し面白くやってくれくれくん
772:デフォルトの名無しさん
12/03/07 16:45:22.53
だったらDOSじゃなくてDOGだろ?
773:デフォルトの名無しさん
12/03/07 18:08:10.27
>>755
中学英語からやり直せw
774:デフォルトの名無しさん
12/03/07 18:23:21.56
for /r ディレクトリ %i in (test.txt) do type %i>>marge.txt
775:デフォルトの名無しさん
12/03/07 18:31:08.06
くそ!どいつもこいつもバカにしやがって!!!!!!!!!
776:デフォルトの名無しさん
12/03/07 18:57:22.39
真夜中に2ちゃんでレスの応酬ってw
しかもバッチスレw
出遅れたわw
777:デフォルトの名無しさん
12/03/07 19:06:17.90
遅延展開やねw
778:デフォルトの名無しさん
12/03/07 19:38:22.80
シフトワーカーはバッチがお好き
779:デフォルトの名無しさん
12/03/07 20:48:16.79
こういうのはどうかけますか?
Cドライブに存在する全てのgitフォルダが何個存在するかカウント
780:デフォルトの名無しさん
12/03/07 21:08:57.30
エクスプローラで検索したほうが早くないか
781:デフォルトの名無しさん
12/03/07 21:44:47.11
単純に検索するとゴミ箱の中まで漁る
782:デフォルトの名無しさん
12/03/08 07:03:14.49
cd /d c:\
dir /s /b /ad .git | find /v /c ""
783:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/08 07:47:05.53
>>782の訂正版
cd /d c:\
dir /s /b /ad git | find /v /c ""
785:デフォルトの名無しさん
12/03/08 10:39:13.31
>>783
ifの前に@を付けろ
>>781
for /r はゴミ箱の中まで検索してるな
名前が偶然に一致するなんて、まず無いだろうが
786:デフォルトの名無しさん
12/03/08 10:51:38.35
>>783
nxiってなに?
787:デフォルトの名無しさん
12/03/08 11:19:32.20
>>786
n
x
i
だけじゃないから、自分で調べろ
for /?
788:デフォルトの名無しさん
12/03/09 07:11:46.74
>>782の訂正版
dir /s /b /ad c:\git | find /v /c ""
これでワンライナーOKだった
789:デフォルトの名無しさん
12/03/09 10:31:33.67
>>784,>>788
それ、c:\git というフォルダがあったら
その中身しか検索しないよ
790:デフォルトの名無しさん
12/03/09 11:28:30.28
ここで出てきたテクニックをwikiにまとめていただけませんか?
791:デフォルトの名無しさん
12/03/09 11:32:24.24
いただけませんか?とか書きこんでる間にwikihouseかどっか借りてコピペしてけばいいだろ
792:デフォルトの名無しさん
12/03/09 11:55:03.16
えええ俺がwiki借りるの面倒くさいです
793:デフォルトの名無しさん
12/03/09 12:50:20.55
dir abc*
ってやると先頭がabcから始まるファイルがヒットすれば表示されますが
ファイルの途中にabcが存在するようなファイルもヒットさせる方法を伝授してください
xxxabcxxx.txt
abc.xxx.txt
xxx.abc.txt
とか
拡張子が無いファイルとか拡張子にabcが来ることは無いと考えていただいて結構です
794:デフォルトの名無しさん
12/03/09 13:04:14.56
dir *abc*
795:デフォルトの名無しさん
12/03/09 15:40:42.38
うそこくでねー
796:デフォルトの名無しさん
12/03/09 15:49:29.44
ほんとだ
797:デフォルトの名無しさん
12/03/09 16:05:44.51
以前はウソだった。最近のcmd.exeは可能。いつからウソじゃなくなったか知らない。
798:デフォルトの名無しさん
12/03/09 16:14:51.52
少なくともxpは本当。
799:デフォルトの名無しさん
12/03/09 16:19:08.35
今試したら、98SEでも行けた。
大昔(DOS2とかCP/Mとかの時代)はNGだったのは確かだが、
いつOKになったんだろ?
800:デフォルトの名無しさん
12/03/09 16:29:00.75
*abc* ぐらい試してから質問しろよ
801:デフォルトの名無しさん
12/03/09 16:32:20.65
試したら質問しないだろw
802:デフォルトの名無しさん
12/03/09 16:38:06.29
16bit DOSの場合は
dir *abc*.*
803:デフォルトの名無しさん
12/03/09 17:55:31.57
バッチファイルでも「最新の情報に更新」(F5キー)を使えますか?
デスクトップのファイルを定期的に別のフォルダに移すバッチファイルを書いたんですが、
ファイルが消えても更新するまでアイコンが残ってしまって・・・
804:デフォルトの名無しさん
12/03/09 17:57:57.63
ahk呼んでsendcontrolでもしたら
805:デフォルトの名無しさん
12/03/09 17:58:23.49
山口美江さんが亡くなった・・・
おまえらが急に老けたとか言うから
806:デフォルトの名無しさん
12/03/09 17:58:43.96
ごめん誤爆
807:デフォルトの名無しさん
12/03/09 18:03:59.92
>>803
ふつー残らんよ
でもどうしてっつーなら
createobject("shell.application").windows().item().refreah
808:デフォルトの名無しさん
12/03/09 18:13:03.08
バッチでクリップボードの文字列を引数として渡すことはできますか?
809:デフォルトの名無しさん
12/03/09 18:23:21.58
for /f %%i in ('~') do echo %%i
ってこと?
'~'に
cscript.exe ~~
mshta.exe ~~
powershell.exe ~~
ってすりゃいい どれでも得意なのでどぞ
810:デフォルトの名無しさん
12/03/09 18:36:11.79
C:\2012\以下のサブディレクトリも含む全てのファイルの更新履歴が
2012年2月1日0時0分0秒以降になっているものをリストアップするのはbatでできますか?
811:デフォルトの名無しさん
12/03/09 18:38:05.77
forfiles/?
812:デフォルトの名無しさん
12/03/09 18:43:25.00
Aフォルダに入っているファイルを
Bフォルダにバックアップしたいと考えてます
そこでBフォルダには入っていてAフォルダにないファイルを一覧にしたいのですが
どうやるのでしょうか?
813:デフォルトの名無しさん
12/03/09 18:51:10.75
for + if
または
dir + findstr
814:デフォルトの名無しさん
12/03/09 19:43:18.94
>>804
ありがとうございます
ごめんなさい、難しくてよくわかりません;;
>>807
ありがとうございます、教えてもらった方法でできました!
'createobject'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出るのですが、これはこれでいいんでしょうか?
WIN7を使っています。
815:デフォルトの名無しさん
12/03/09 20:37:42.34
正常
816:デフォルトの名無しさん
12/03/09 20:41:47.70
> refreah
817:デフォルトの名無しさん
12/03/09 21:39:36.03
> refresh.vbs
818:デフォルトの名無しさん
12/03/09 22:07:54.59
CSVファイルを読み込んで、ちょっとした処理をしたかったのだけど、
読み込む対象のファイル名に半角スペースが入っていた場合どうすればいい?
ここを参考にしたんだけど、
URLリンク(vaindespair.blogspot.com)
半角スペース入りのファイル名だとうまくいかないのです。
・・・と書いてて閃いたw
FOR /F "tokens=1,3 delims=," %%a IN ( 'type "hannkaku space irino file.csv"' ) DO (
819:デフォルトの名無しさん
12/03/09 22:22:23.19
FOR /F "usebackq tokens=1,3 delims=," %%a IN ( "hannkaku space irino file.csv" ) DO (
だよーん
820:818
12/03/09 22:29:58.17
ありがとう!
821:デフォルトの名無しさん
12/03/09 22:58:55.52
forでcsvって難しくないか?
"abc,def","pqr","xyz"
ってなのがあったらモー駄目だろ?
822:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/10 04:11:12.36
findstrは?
825: 忍法帖【Lv=14,xxxPT】
12/03/10 20:05:58.09
質問です。よろしくお願いします。
バッチファイル(あひゃ.bat)を優先度低で実行させるために
start /b /belownormal あひゃ.bat
と書かれているcmdファイルを作成し、それを実行させているのですが、
あひゃ.batが終了してもDos窓が閉じません。
終了後に自動で閉じるようにするにはどうしたら良いのでしょうか?
826:デフォルトの名無しさん
12/03/10 20:10:47.82
start /b /belownormal cmd /c あひゃ.bat
827:デフォルトの名無しさん
12/03/10 20:31:41.10
あひゃ.bat
に
echo %cmdcmdline%
を入れてみりゃ理由がわかる
828:825 忍法帖【Lv=14,xxxPT】
12/03/10 21:12:23.08
早速のレス、感謝します。
>>826サンの方法で見事にDos窓が自動で閉じました。
>>827サンのとおりに実行したらなんとなく解ったような気がします。
cmd /k と cmd /c の違いですね。help startとかhelp cmdを読んでないのがバレバレ(;´∀`)
なんとなく思い込みでstartコマンドの/bオプション(ウインドウを作成しない)を付けたのですが、
実はコレ無くても良かったみたいです。(じ、実は/bオプションの意味もよく解っていないっ!(∀`*ゞ)
とにかく期待通りに動いたので満足です。
お二方ともありかとうございました。
829:デフォルトの名無しさん
12/03/10 21:13:49.52
batを起動しっぱなしにして
タスクマネージャのタスク名に指定した名前(例えばメモ帳を立ち上げて「無題 - メモ帳」など)が出たら
ログに書き込むというのはbatで出来ますか?
830:デフォルトの名無しさん
12/03/10 21:18:31.36
tasklist
831:デフォルトの名無しさん
12/03/10 22:28:53.73
wmic process get name
832:デフォルトの名無しさん
12/03/11 14:15:58.30
>>808
WSHと組み合わせないと無理だったはず
833:818
12/03/11 23:14:37.36
>>821
そこまで本気なことをするには荷が重いものだと理解してます。
(できるかもしれないけど、数ヵ月or数年後の自分に理解ができない、と思うので)
834:デフォルトの名無しさん
12/03/12 00:12:38.31
>>808
clip.exeか類似ソフト使えば出来る
835:デフォルトの名無しさん
12/03/12 04:15:25.41
内蔵のclip.exeじゃだめだけどな
836:デフォルトの名無しさん
12/03/12 06:41:41.28
スレタイ(ry
837:デフォルトの名無しさん
12/03/12 16:34:50.59
>>832
WSHったってIE使ったりして大変だろ?
>>809
お勧めは?
838:デフォルトの名無しさん
12/03/12 17:24:09.19
>>837
> WSHったってIE使ったりして大変だろ?
ならば>>809のは全部同類だから「大変」だ
839:デフォルトの名無しさん
12/03/12 18:01:20.27
そうなのか?
簡単に書けるものってないのか?
840:デフォルトの名無しさん
12/03/12 18:50:35.07
powershellなら簡単よ
841:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/03/13 02:24:40.37
まあまあやね
843:デフォルトの名無しさん
12/03/13 02:31:28.01
及第点やね
powershell版もできたら満点や