1 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 21:33:11 ] 拡張子が .cmd または .bat のバッチファイルの スクリプティング(プログラミング)にかかわる 質問,テクニック(JScript,Perl等の埋め込みなど含む), 関連情報のためのスレです。 【関連スレ】 バッチファイルプログラミング 3.bat pc11.2ch.net/test/read.cgi/tech/1148485555/ WSH(・∀・)スレッド! Part 2 pc11.2ch.net/test/read.cgi/tech/1176698934/ Windows PowerShell (正式版リリース)1.0 pc11.2ch.net/test/read.cgi/tech/1163818863/ HTAをもっと流行らせる計画 pc11.2ch.net/test/read.cgi/tech/1124559962/ ユーザー必読!コマンドライン(DOS Pt.6) pc11.2ch.net/test/read.cgi/win/1176558776/ MS-DOS・Win3.1総合スレッド pc11.2ch.net/test/read.cgi/win/1025462258/ ※なんでも無理矢理バッチでやろうとせずWSH等の使用も 検討しましょう。
541 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 12:01:48 ] del a.txt "c:\program files\b.txt" c.txt
542 名前:540 [2007/09/11(火) 12:16:43 ] >>541 ありがとうございました
543 名前:デフォルトの名無しさん [2007/09/11(火) 12:45:09 ] ゲームで極める シェルスクリプトスーパーテクニック www.gihyo.co.jp/books/978-4-7741-3202-0 slashdot.jp/books/article.pl?sid=07/09/06/2334232 動画 jp.youtube.com/watch?v=HaKhw2nUgTk バッチファイルおわった・・・
544 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 13:16:48 ] ファイル消すのにもいちいち質問してるようじゃ 入門書すら存在しないんだろうね
545 名前:デフォルトの名無しさん [2007/09/11(火) 19:14:05 ] 今時バッチの入門書なんて
546 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:16:28 ] >>543 そもそも動作環境が違うんだから、比較する意味が無いだろう。 むしろ将来的にパワーシェルがWindows標準になる事を考えれば、 そっちのほうが。 バッチファイルはちょっと複雑な事をさせようとすると、感覚的に わかりづらい記述になるので、バッチファイルを極めるより、WSHを 覚えたほうがマシだね。 ちなみにモレは丁度、一昨日買った所。1キー入力で反応させるのとか目から鱗だった。
547 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 15:32:16 ] 本の宣伝にしか見えないんだけどw
548 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:19:39 ] 宣伝にマジレス。漏れおわった・・・・
549 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 08:44:07 ] >>543 すげーな。俺この本買ってUNIXに乗り換えるわ。 お前らはいつまでもしょぼいバッチファイルをしこしこ書いてなさいってこった。
550 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 11:23:01 ] rem文中のメモでも %~~ の表記があるとバッチが落ちて驚いた ということはremでメモを残すことにもリスクがあるのか
551 名前:デフォルトの名無しさん [2007/09/13(木) 16:20:51 ] aaa.log というファイルが0バイトなら削除するっていうのはどう書いたらいい?
552 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 16:26:59 ] call :main c:\test.txt exit /b :main if "%~z1"=="0" del "%~1"
553 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 18:59:32 ] @echo off && goto enddoc 指定時間まで寝るコマンド :usage echo Usage: SleepAt TIME [COMMAND] echo. echo Sample: SleepAt 16:00 %systemroot%\media\tada.wav goto exit :enddoc if "%~1" == "/h" goto usage if "%~1" == "/?" goto usage if "%~1" == "" goto usage :loop title sleepat %~1 now:%time:~0,8% if "%time%" gtr "%~1" goto exit sleep 1 goto loop :exit if "%~2" == "" exit /b %2 %3 %4 %5 %6 %7 %8 %9
554 名前:903 [2007/09/14(金) 02:04:28 ] バッチファイルに Format C とかいて スタートアップにおいたらどうなります?
555 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 02:09:21 ] >>554 無効なドライブ指定です。
556 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 08:12:57 ] >>554 アクセスは拒否されました。
557 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:16:40 ] 質問させてください。 FireFoxとかインストールするときに次へ進むボタンとかあるけど batだけで全部処理できますか?
558 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:38:00 ] ここはバッチでプログラミングするスレなので、 既にバッチを使いこなせる人を対象としています。 バッチを知らない人やバッチ初心者はこちらへ ユーザー必読!コマンドライン(DOS Pt.6) pc11.2ch.net/test/read.cgi/win/1176558776/
559 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:29:17 ] 558(荒らし)の言っていることに騙されてはいけませんよ。
560 名前:デフォルトの名無しさん [2007/09/19(水) 10:55:29 ] ファイルの中に特定の文字列があれば削除するってのはどう書けば良い??
561 名前:560 [2007/09/19(水) 11:04:30 ] ごめん、できた。 ありがとう。
562 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 13:46:02 ] 特定の文字列があれば、そのファイル自体を削除するのか その文字列を削除するのかわからないけど バッチ組めたならアップしておくと参考になっていいと思うよ
563 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 15:07:03 ] その程度の物に参考も糞もあるかよw
564 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 10:42:30 ] バッチでバイナリって扱えたっけ?
565 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 16:27:14 ] /b
566 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:55:45 ] テキストもある意味バイナリ
567 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 21:36:30 ] いいえ、それはトムです。
568 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 19:41:48 ] forの中でsetする時などは、遅延展開 !変数! を使うと思いますが、 名前に ! が含まれてるファイルを引数にすると期待通り動かなくなりますよね callを使って遅延展開を代替することもできますが、やはり限界があると思います みなさんははどうやって対処していますか?
569 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 19:47:01 ] 初心者はこちらへ ユーザー必読!コマンドライン(DOS Pt.6) pc11.2ch.net/test/read.cgi/win/1176558776/
570 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 19:51:13 ] >568 他のスクリプト言語を使う
571 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:39:23 ] なんだってエスケープは必要だろ
572 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:46:21 ] >>568 対処法はWSHを使う
573 名前:デフォルトの名無しさん [2007/09/22(土) 16:47:45 ] ユーザー必読!コマンドライン(DOS Pt.6) への誘導には 従う必要はありませんので。念のため。
574 名前:デフォルトの名無しさん [2007/09/22(土) 16:54:32 ] 任意のフォルダに任意のテキストファイル(内容在り)を 作成すること可能ですか?
575 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:58:33 ] >>574 echo 在り > 任意の\任意の.txt
576 名前:574 [2007/09/22(土) 17:04:21 ] >>575 ありがとうございます!
577 名前:574 [2007/09/22(土) 17:15:08 ] 度々すいません。 echo 「ファイル内容」 > 任意の\任意の.txt のコマンドですが、 「ファイル内容」を複数行にしたい場合はどう記述すればよいのでしょうか? \nとかは試してみましたけどダメでした・・・
578 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:29:07 ] echo 1行目> 任意の\任意の.txt echo 2行目>> 任意の\任意の.txt echo 3行目>> 任意の\任意の.txt ……
579 名前:574 [2007/09/22(土) 17:31:19 ] >>578 すいません。 どうもありがとうございました。
580 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:37:41 ] 小学生?
581 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:39:17 ] >>580 例の病気の人ですか?
582 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 05:51:46 ]
583 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 14:34:48 ] どっかで echo >> filnemae.txt aaaaaaaaaaaaaa echo >> filnemae.txt bbbbbbbbb echo >> filnemae.txt cccccccccccccccccccccccccc echo >> filnemae.txt dddddd みたいな書きかたしててちょっとよさげにみえた
584 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 19:10:09 ] filnemae?
585 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:14:20 ] >>583 > filnamae.txt echo aaaaaaaaaaaaaa >> filnamae.txt echo bbbbbbbbb >> filnamae.txt echo cccccccccccccccccccccccccc >> filnamae.txt echo dddddd こんなんでもいいんだよね
586 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 19:00:48 ] ( echo aaaaaaaaaaaaaa echo bbbbbbbbb echo cccccccccccccccccccccccccc echo dddddd ) >> filnemae.txt
587 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 05:33:10 ] へー、美しい書き方だな
588 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:31:51 ] echo aaaaaaaa^ bb^ ccc^ ddd もいけるぜ改行されないけど
589 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 21:44:08 ] echo aaaaa^ bbbbb^ ccccc^ ddddd> failname.txt でも行ける。改行がCR+LFでなくLFだけでも良ければ。
590 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 19:53:17 ] dllの読み込みって、%path%とカレントディレクトリでどっちが優先されるのでしょうか?
591 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:12:46 ] アプリケーション側で読み込む DLL のパスを指定していなければ 1. アプリケーションのあるディレクトリ 2. カレントディレクトリ 3. システムディレクトリ 4. Windows ディレクトリ 5. 環境変数 PATH に書かれているディレクトリ の順。、
592 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:37:56 ] ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dllproc/base/dynamic-link_library_search_order.htm 最近のWindowsでは、システム・ウィンドウズディレクトリより カレントディレクトリの順位のほうが低い。 環境変数PATHより高いことに違いはないけどな。
593 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:38:55 ] 上のURLはローカルなms-helpだったな、すまん。 msdn2.microsoft.com/en-us/library/ms682586.aspx
594 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:49:39 ] おまいらスレタイ見直せ
595 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 22:23:01 ] >>1 に書いてある関連情報の範疇
596 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 08:17:15 ] powershellの話もここで扱うの?
597 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 08:20:41 ] pc11.2ch.net/test/read.cgi/win/1163764836/
598 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 10:36:38 ] win板か、じゃぁイラネ
599 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:56:34 ] 同一ディレクトリ内に、 同一内容のファイル(ファイル名は異なるが内容は一緒)があれば、 一方を削除して、その消したログを吐き出すっていう バッチファイルを作りたいんですが・・・。 教えてエロイ人!
600 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 10:07:01 ] まだ自分でプログラムを作れない初心者はこっちへ↓ ユーザー必読!コマンドライン(DOS Pt.6) pc11.2ch.net/test/read.cgi/win/1176558776/
601 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:41:01 ] 600は荒らしなので無視してかまいません
602 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:56:59 ] >>599 そういうのはWSHでやったほうが
603 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 12:02:15 ] >>599 ifとforとerrorlevelとfcとdelでできるかも 遅いだろうね
604 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 12:15:46 ] 総当りになるからファイル数の二乗で処理が増えるわな その前にファイルサイズでふるいにかけて… UnDupでも使っとけって話だな。
605 名前:599 mailto:sage [2007/10/23(火) 12:46:41 ] >>600-604 ありがとうございます! やっぱり総当たりになるから遅いですよね。 ファイルサイズで対象を削ってから・・・なるほど。。。 WSHについても、調べてみますー。
606 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 19:22:57 ] @echo off setlocal EnableExtensions EnableDelayedExpansion pushd %1 set FileSize=-1 set FileName="" for /f "tokens=*" %%I in ('dir "%TargetDir%" /o:sn /b /a:-d') do ( if !FileSize! EQU %%~zI ( fc /b !FileName! "%%~fI">nul if not errorlevel 1 echo del "%%~fI" ) else ( set FileSize=%%~zI set FileName="%%~fI" ) ) popd
607 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 19:27:23 ] >>606 消し忘れた 誤: ('dir "%TargetDir%" /o:sn /b /a:-d') 正: ('dir /o:sn /b /a:-d') あと、十分にデバッグしてもらった後に 誤: echo del "%%~fI" 正: del "%%~fI"
608 名前:606 mailto:sage [2007/10/23(火) 19:30:37 ] ・・・すまん 同じサイズで内容の異なるファイルが3つ以上あるとこれじゃだめだね。 めんどいので、後は任せた・・・
609 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:34:06 ] >>599 WSHでやるなら↓を流用するといいかも pc11.2ch.net/test/read.cgi/tech/1176698934/227-228
610 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:32:47 ] わざわざ作ったのか
611 名前:606 mailto:sage [2007/10/23(火) 22:38:09 ] 任せた・・・とか言いながらやっぱり自分で書いてみたりして・・・ @echo off setlocal EnableExtensions EnableDelayedExpansion pushd %1 set FileSize=-1 set FileList="" for /f "tokens=*" %%I in ('dir /o:sn /b /a:-d') do ( if !FileSize! EQU %%~zI ( call :CmpFile "%%~fI" !FileList! ) else ( set FileSize=%%~zI set FileList="%%~fI" ) ) popd endlocal goto :eof :CmpFile fc /b %1 %2>nul if not errorlevel 1 ( echo del %1 REM del %1 goto :eof ) shift /2 if not "%~2"=="" goto :CmpFile set FileList=%FileList% %1
612 名前:デフォルトの名無しさん [2007/10/23(火) 22:48:54 ] バッチのFOR文ってすごく難しいと思うんですが 自分だけでしょうか?
613 名前:デフォルトの名無しさん [2007/10/23(火) 22:50:38 ] 難しいかどうかは、人それぞれだろうが 奥が深いのは確か。
614 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:54:29 ] 難しいと言うより可読性がとても悪いような
615 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:06:15 ] スペースでインデントするとIEでは(専ブラでも)削除されるからだよ。 エディタにコピペしてみ。
616 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:09:55 ] for文の可読性の悪さはインデント関係ないよ
617 名前:デフォルトの名無しさん [2007/10/23(火) 23:56:08 ] java なんてこうだぜ! for (String str : a) { System.out.println(str); } コレに比べたら FOR %%I IN (*.*) DO ( ECHO %%I ) こっちがマシ。
618 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:59:18 ] どう見ても拡張しすぎだよな。 まったく異なる機能が一つのコマンドに無理やり詰め込まれてるって気がする。 ところで in のあとの ( ) は グループ化の ( ) より強いんだろうか?
619 名前:デフォルトの名無しさん [2007/10/24(水) 06:08:18 ] つーかさっさとマルチタブなcmd.exe作れよ。糞エス PowerShellでもガワが古いままとかドンだけてぇぬいてんだカス
620 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 07:51:29 ] そんなぐらい自分でやれよ
621 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 11:28:23 ] 乞食らしくPowerShellIDEでも使わせてもらえよ。
622 名前:599 mailto:sage [2007/10/24(水) 12:02:13 ] >>606 さん ありがとうございます! 早速、勉強しながらテストさせて頂きます! こんなことがパッと書けるなんて、すごいなぁ。 >>609 さん おお!こっちも参考になりそうですね! WSHも勉強してみたいと思います。 皆さん、色々ありがとうございましたー。
623 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:35:14 ] unixみたいに、コマンドをバックグラウンド実行ってできないのでしょうか?
624 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:38:43 ] ない cygwinのbash使うか start使うと別窓で開くが
625 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:15:39 ] バッチじゃなくてOSやコマンドラインの話だな
626 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:24:34 ] >>624 ありがとうございます。 コマンドプロンプトを非表示の状態でバッチを実行することってできますか?
627 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:49:25 ] ここはパソコンの使い方を教える所じゃなくて プログラムを作るスレ
628 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 17:08:00 ] CreateProcessでSW_HIDEで実行すれば非表示に出来るが一般的とは言いがたいな。 start /min で最小化して実行するのが無難だな。
629 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:46:54 ] 627は阿保だろ
630 名前:デフォルトの名無しさん [2007/10/25(木) 03:01:55 ] スタート⇒ファイル名を指定して実行 もしくはショートカットアイコンでも作ってクリックしろ
631 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:37:22 ] >>626 FAQ >>358
632 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:43:48 ] >>599 つ C:\Program Files\Support Tools\dupfinder.exe
633 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:05:33 ] >>626 つ AT
634 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:53:11 ] フォルダに入っているすべてのWMVをEXEに渡して とある変換処理をさせています↓ FOR %%F IN (*.WMV) DO C:\CONVERT.EXE "%%F" しかし、このEXEは出力先が指定できず、同じフォルダ内に結果のWMVを作ります。 それでFOR対象の中に変換後のWMVが入ってきてしまい、 必要のない変換を行ってしまいます。 こういう場合どう書けばいいんでしょうか? 変換後のファイルは頭に'[Converted]-'とつきます。 これがついてるものだけを弾きたいんですが。 私の古い知識では他のバッチを作るとか リネームして戻すととかくだらない方法しか思いつきませんorz それと最近のバッチコマンド(WinNT以降?)について よく解説されてるサイトとかってあります?
635 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 00:18:38 ] FOR %%F IN ('DIR /B *.WMV') DO C:\CONVERT.EXE "%%F"
636 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 00:21:38 ] >>626 ftp://ftp.microsoft.com/ResKit/win2000/soon.zip
637 名前:デフォルトの名無しさん [2007/10/26(金) 00:25:34 ] >>634 >それと最近のバッチコマンド(WinNT以降?)について >よく解説されてるサイトとかってあります? pc11.2ch.net/test/read.cgi/tech/1178281991/6
638 名前:デフォルトの名無しさん [2007/10/26(金) 01:26:13 ] FOR %%F IN (*.CS) DO CALL :convert "%%F" GOTO :EOF :convert SET T=%~1 SET T=%T:~0,12% IF NOT "%T%" == "[Converted]-" C:\CONVERT.EXE "%~1" EXIT /B
639 名前:デフォルトの名無しさん [2007/10/26(金) 01:29:56 ] いかん、まちごた。WMV やった・・・ FOR %%F IN (*.WMV) DO CALL :convert "%%F" GOTO :EOF :convert SET T=%~1 SET T=%T:~0,12% IF NOT "%T%" == "[Converted]-" C:\CONVERT.EXE "%~1" EXIT /B 要するに、頭12文字が [Converted]- で無いヤツを処理するサブルーチン つくればよかたい。
640 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 03:47:01 ] >>634 同じフォルダ内というのが、CONVERT.EXEのあるフォルダじゃなくて カレントディレクトリっていうことなら、話は簡単だが?
641 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 03:57:46 ] >>635 より簡単?