1 名前:デフォルトの名無しさん [2009/05/14(木) 11:29:31 ] 前スレ 【.cmd】 バッチファイルスクリプト %4 【.bat】 pc12.2ch.net/test/read.cgi/tech/1229955189/
751 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:43:39 ] if exist "dir name\*" は?
752 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:51:37 ] オラも考えてみた。 if exist "%~1" ( dir /a:d "%~1" 1>nul 2>&1 if errorlevel 2 goto nazo if errorlevel 1 goto fileeee if errorlevel 0 goto dirrrrr ) else ( echo "%~1" が無いよ? goto naiyo ) 優雅さに欠けるし、= でダメだ... orz ふと思ったのは %1 を渡された時にたとえば aaa と aaa========== を見分けるにはどーすりゃいいんだ?
753 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 02:11:47 ] pushd %1&&popd echo %errorlevel%
754 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 07:01:38 ] >>752 >ふと思ったのは %1 を渡された時にたとえば aaa と aaa========== を見分けるにはどーすりゃいいんだ? ヒント:findstr /x
755 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:22:25 ] >>754 findstr をしようにも、たとえば echo %1 というバッチファイル test.bat で test.bat aaa と test.bat aaa===== でどちらも aaa となって末尾の = が拾えない のを「見分けるにはどーすりゃいいんだ?」と思ったんですが。 オレ何か勘違いしてる?
756 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 14:29:01 ] >>751 あまいな .もない、空のフォルダってぇのがあるのだ >>752 >>753 アクセス権がないフォルダはファイルなのか >>755 別の話を絡めるな test.bat "aaa====="
757 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 14:35:30 ] 厳密にやりたきゃ別の言語使えよ。もう質問してる奴もいないし秋田。
758 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 15:56:47 ] 別の言語使いたけりゃ他スレへ行けよ
759 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 17:34:27 ] 厳密にやりたきゃ%~a1を使えばよいだけの話
760 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:31:02 ] あるソフトウェアのバージョン違いが3つほど入ってるんだけど デスクトップに同じ見た目のアイコンが3つあるからややこしくて。 バッチファイルをクリックすると上下ボタンでどのソフトを起動するか 選択できて、エンター押すと実行っていうのを作りたいんだけど 誰か作ってくんない? イメージ的にはウィンドウズをセーフモードで起動したときに 選択する画面がまずでてくるんだけどあんな感じ☆
761 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:56:46 ] アイコン変えればいいじゃん
762 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 18:03:24 ] デスクトップに3つあるアイコンそれぞれに 異なるショートカットキーを指定すればいいじゃん
763 名前:760 mailto:sage [2010/03/28(日) 18:25:55 ] こんな感じのを作ってみたんだけど やっぱり上下のキーで選択するUIがいいなぁと思うので 誰か改造求む! @echo off echo アプリケーションを選択して下さい echo [1] : メモ帳 echo [2] : ペイント echo [3] : 電卓 set /p INPUT= if "%INPUT%"=="1" start notepad if "%INPUT%"=="2" start mspaint if "%INPUT%"=="3" start calc
764 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:38:46 ] Enterなしにキー入力を受け取る方法がないから無理
765 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:47:41 ] 指定したファイルをホームページ(FTPで)にバッチファイルで送信することは可能でしょうか?
766 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:59:09 ] @echo off echo アプリケーションを選択して下さい echo [1] : メモ帳 echo [2] : ペイント echo [3] : 電卓 choice /c 123 if "%ERRORLEVEL%"=="1" start notepad if "%ERRORLEVEL%"=="2" start mspaint if "%ERRORLEVEL%"=="3" start calc
767 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:17:58 ] if 1==2 ( start notepad start mspaint start calc ) ↑
768 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 21:11:49 ] 大昔はそういうメニューが普通にあったが、GUIで死滅したな あってもブート選択画面ぐらいか
769 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 21:15:15 ] 1文字読み取って制御を返すツール作ればいろいろ用途が広がるよ。 2ストロークで26^2個のツール呼び出せるランチャ作ったけど軽くて便利。
770 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:05:34 ] powershell使えばカーソル選択メニューが作れるよ
771 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:32:52 ] >>765 できるよ バッチファイルとまた一つftpコマンドを書いたテキストファイルが必要になる
772 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 13:10:44 ] >>771 遅レスすみません。 ありがとうございます。おかげでできました。
773 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:37:47 ] コマンドプロンプトに表示された文字を(txt等)に出力ってできますか?
774 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:42:46 ] 無理
775 名前:773 mailto:sage [2010/03/29(月) 22:54:06 ] すみません、自己解決しました。 test.bat > log.txt
776 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:40:05 ] >>775 それだと標準エラーがファイル出力できないよ
777 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:48:00 ] test.bat > log.txt 2<&1
778 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:59:44 ] >>776-777 そうなんですか、知りませんでした! ありがとうございます。
779 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 11:24:07 ] 質問です。 ファイル a.txt.bak ab.html.bal abc.exe.bak があるとすると 拡張子.bakだけ一括で名前変更できるでしょうか?
780 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 13:17:31 ] できないわけがない
781 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 13:35:10 ] ren *.bak *.hoge
782 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 13:51:39 ] それじゃ a.txt.baka ab.html.aho abc.exe.baka 拡張子.bakaだけ一括で名前変更できるでしょうか?
783 名前:779 mailto:sage [2010/03/30(火) 14:02:57 ] すみません、質問の仕方が間違えていました。 bakの部分だけ消したいんです。 a.txt.bak→a.txt
784 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 14:17:18 ] ren *.bak *.
785 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 15:07:17 ] >>784 ありがとうございます できました
786 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 16:00:55 ] hogeよりはahoやbakaの方が好き おっと、kusoも使うなw
787 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 17:21:12 ] chinko manko unko shikko
788 名前:デフォルトの名無しさん [2010/04/06(火) 00:27:29 ] すみません。テキストファイルの中身の特定行だけ抜き出す方法を教えてください。 test.txt中身 --------------- morning hello bye --------------- 上のようなファイルがあったとして、1行目のmorningや、3行目のbyeを 変数やファイルに出力する方法はないでしょうか。 外部コマンドは使えないWindowsXP/2003環境です。
789 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 02:28:58 ] for /?
790 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 02:28:59 ] >>788 find使って >baka.txtとかで出力 うまく使えば一つのバッチファイルで色んなバッチファイルを作成することができるから便利
791 名前:デフォルトの名無しさん [2010/04/06(火) 07:40:04 ] findは外部コマンド
792 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 07:56:00 ] >>788 findstr /r "^morning$ ^bye$" > hoge.txt
793 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 09:11:31 ] >>791 空気読め馬鹿
794 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 09:28:43 ] 料理できないと買ってきた惣菜をならべるぐらいのことでも自慢するんだよ それ外で買ってきたんだろとあきれられてても本人は満足
795 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 20:43:40 ] バッチファイルでテトリス作って
796 名前:デフォルトの名無しさん [2010/04/06(火) 22:12:33 ] >>792 ありがとうございます。 説明が不足してたのですが、必ずしも1行目にmorningがあって、3行目にbyeがあるわけじゃない場合に 1行目、3行目を抽出って出来るんでしょうか。根本から違うやり方考えた方が良いですかね・・・。
797 名前:792 mailto:sage [2010/04/06(火) 22:28:25 ] findstrコマンドは/cオプションを指定しない場合は、 二重引用符内で半角空白区切りで指定されたキーワードを OR検索できるんだけど、 やりたいのは、特定キーワードで抽出したいんじゃなくて、 特定の行番号を抜き出したいってこと?
798 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 23:05:41 ] 下のようなのを作る場合変数iの引数は12個まで とかいう決まりがあるのでしょうか? for %%i in (%*) do xxxxx %%i pause このバッチファイルに引数となるファイルをドラッグ&ドロップしたら 「指定されたデバイス、パス、またはファイルにアクセスできません。 アクセス許可がない可能性があります。」 と言われます。ちなみに12個まではOKでした。
799 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 23:18:13 ] >>798 D&Dした複数ファイルのフルパス文字列の長さが限界に達したのでは? その12ファイルをもっと浅い(フルパスの短い)階層に移動させれば、 13ファイル以上もいけるかと。 Win9x系かNT系かでも変わってくると思う。
800 名前:799 [2010/04/06(火) 23:21:16 ] ごめん。NT系でもNT4.0や2000とXP以降で違うみたい。 support.microsoft.com/kb/830473/ja
801 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 23:25:24 ] >>799 ,800 たぶん、ファイルの長さだと思います。 ありがとうございました。
802 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 23:34:51 ] たぶん? 結局どうでもよかったのか
803 名前:792 [2010/04/06(火) 23:55:34 ] >>796 find /n /v "" test.txt|findstr /b /l "[1] [3]" または type test.txt|find /n /v ""|findstr /b /l "[1] [3]" または type test.txt|findstr /n /v ""|findstr /r "^1: ^3:" Mac環境から書き込んでてテストしてないから間違ってるかも。 特に3つ目の「findstr /n /v ""」は入力ファイルの全行に行番号出力になってないかも。
804 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 23:02:04 ] >>801 >たぶん、ファイルの長さだと思います。 ファイルサイズは関係ないだろ
805 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 23:09:06 ] <test.txt ( set /p x= call echo %%x%% >1.txt set /p x= call echo %%x%% >2.txt set /p x= call echo %%x%% >3.txt )
806 名前:spectre [2010/04/11(日) 18:40:33 ] アクティブな画面を「最新の情報に更新」にするバッチってありますかぁ? どなたかよろしくお願いします。
807 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 19:47:26 ] バッチでは不向きな気が… 簡単なものでよければ VBScript 辺りでどう? ' ## update.vbs ## Dim objWshShell ' WshShell オブジェクト Set objWshShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then objWshShell.SendKeys "{F5}" ' F5 を送信 Else WScript.Echo "エラー: " & Err.Description End If Set objWshShell = Nothing
808 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 19:53:59 ] しかしどうやって動かすんだ? 動いたときアクティブなウィンドウは?
809 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 20:05:00 ] 想定の範囲外です(キリッ 適当なフリーソフト使え
810 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 19:17:26 ] ローカルでphpスクリプトを動かす際に一連の流れを バッチファイルでまとめてしまおうと思ったのですが cd "ディレクトリ1" httpd.exe cd "ディレクトリ2" C:\php\php.exe batchtest.php このようなバッチファイルを作ったところ httpd.exeを起動したところで止まってしまい、httpd.exeを終了させないと 次の行に行きませんでした。 どのようにすればすべての処理が行われるでしょうか?
811 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 19:36:02 ] cd "ディレクトリ1" httpd.exe taskkill /im httpd.exe cd "ディレクトリ2" C:\php\php.exe batchtest.php
812 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 20:56:35 ] start httpd.exe
813 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 07:38:21 ] >>811 ヒネリがないので笑えん。
814 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 12:59:02 ] >>813 素直な奴だな。 httpd.exeを終了させないとtaskkillが実行されないという二段オチなのに。
815 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 14:49:58 ] 下記のバッチ内、:mpexec_core にある if 文で落ちてしまいます。 書き方に何か問題があるのでしょうか? ideone.com/OvSYW
816 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 15:10:11 ] その行だけじゃわからないよ 環境変数に適切な値が入っているならちゃんと動くように見える echoの表示やエラーメッセージはどうなってんの? エスパー初級な解答 if "%xxx%" geq "%yyy%"のように""で括れば 環境変数が空の場合でも落ちる事はなくなるはず
817 名前:815 mailto:sage [2010/04/13(火) 15:25:07 ] >816 if "%MP_MAX%" geq "%MP_NUM%" ( に変更しても落ちました。 直前の出力は if 1 geq 1 ( なので、両方に1が入っていることは確認済みなのですが・・・。 エラーは 「コマンドの構文が誤っています。」 です。
818 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 18:43:38 ] エラーの詳細が出るようにバッチの先頭におまじないを書いておく echo W 100 2 0 200 | debug
819 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 18:47:20 ] >>817 ()のなかの命令が不適切なのでは?
820 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 19:54:16 ] ( ) の中で SET を使うのはやめといた方がいいよ GOTO 文などに置き換えれば動くはず
821 名前:815 mailto:sage [2010/04/13(火) 20:06:10 ] >>819 ,820 ()の中を関数化したら正常に動作しました。 ありがとうございました。
822 名前:デフォルトの名無しさん [2010/04/13(火) 20:43:32 ] すべてのウィンドウを「最新の情報に更新」にするバッチってありますかぁ?
823 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 22:48:22 ] ないよ
824 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 02:26:10 ] ありがとうございました。
825 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 17:07:20 ] 作成日時は%~t1で取れますかぁ?
826 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 17:14:10 ] ヘルプ見るの面倒
827 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 09:14:28 ] >>825 こういうこと? for /? より %~tI - %I ファイルの日付/時刻に展開します。
828 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 14:10:17 ] それ更新日時
829 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 18:25:03 ] >>828 827じゃないが、ファイルの日付が何になるかって、 環境変数で変更できなかったっけ? まぁ、できなくても、作成日時だったら、 他の手段で、何とでもなるから困らないけどね
830 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:08:20 ] それDIRCMD
831 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 06:44:59 ] >>814 だから、それは一目見て分かることで何の面白味もないの。
832 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 07:35:16 ] >>810 httpdが無いと動かないようなphpなら netstatとか使って、httpdが起動完了したことを検知しないと駄目な気がする まぁ、batchtest.php内で成功するまで待つって手もあるけど… あと、最後にhttpdを止める必要はないの? 動かしっぱなしなら、httpdをバッチで起動する意味はないと思うけど?
833 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 18:16:02 ] 馬鹿じゃないんだからそんなこといちいち聞かれなくても分かってますよ。
834 名前:デフォルトの名無しさん [2010/04/23(金) 20:48:27 ] バッチでキューを実装したいけど実装できますよね? 現状想定案 ■I/F QUE.bat -que|-deq -prm1 prm1=パラメタファイル 格納DIR 、入力元DIR、出力先DIR、ファイル名 ■que指定時 1.入力ファイル名と同名のファイルが格納先にないかチェック ↓ ↓ない ↓ 末尾0付格納 3.カウンタをインクリし2に戻る ■deq指定 1.格納先ディレクトリに末尾0ファイルがあるかチェック ↓ ↓ない ↓ エラー返却 ↓ ↓ある 2.ファイルを出力先に出力 ↓ 3.カウンタで小さい方からサーチ カウンタ-1でリネーム
835 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:48:57 ] 実装自体はいけそう que指定時の2の処理が不明だったり 格納ファイルのフォーマット(ファイル名の規則)をどう定義するか カウンタの初期値をどこから設定するかなど細部が気になる
836 名前:デフォルトの名無しさん [2010/04/24(土) 00:35:27 ] >>835 携帯から書いたら改行多すぎと言われて、消しすぎたぜ… ■大体決めたこと 1.格納先のファイル名は入力ファイル名+連番。 1〜が数えやすそうかな。 2.返却値はキューの残数。 取出失敗時はマイナス ■迷ってること 1.格納先DIRパスとファイルの種類は1対1で対応させるかどうか? 2.キュー残数チェック用のオプションを実装するか? 3.もっと汎用的な設計がないか? (サンプル的なやつ) 4.バッチ暦10日だけどそもそも言語仕様的に無理とかないよね? できそうと聞いて安心したよ。 迷4以外はただの設計とアルゴリズムだし。 技術的に困ったらまたお願いします。