1 名前:デフォルトの名無しさん [2009/05/14(木) 11:29:31 ] 前スレ 【.cmd】 バッチファイルスクリプト %4 【.bat】 pc12.2ch.net/test/read.cgi/tech/1229955189/
367 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:09:33 ] bat起動時に、Shiftキーが押されていない場合はA.exe 押されている場合はB.exeを実行したいのですが、 キー押下状態の取得がうまくいきません。 @echo off ←ここでShiftキー押下状態の取得したいです。 IF ERRORLEVEL 1 GOTO SHIFT_KEY START "" "D:\My Documents\A.exe" GOTO END :SHIFT_KEY START "" "D:\My Documents\B.exe" :END ご存知の方教えてください。
368 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:27:25 ] >>367 > キー押下状態の取得がうまくいきません。 何をやってうまく行かないのかを、まず書いてくれ。 OSその他の環境情報もだ。 本当は「キー押下状態の取得方法が分かりません」じゃないのか?
369 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 16:45:31 ] わからないやつは黙ってろ
370 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 17:42:07 ] 標準のコマンドのみでは無理 DOS用だとbatuyとかあったけどWin用はしらん
371 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:04:08 ] ttp://www.page.sannet.ne.jp/mtoga/etc/dos/bih-g_d2.htm キー入力による分岐 ERRORLEVEL ここらへん使えば出来そうかなぁと。 WinXPです。
372 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:35:42 ] 一から勉強して出直して来い
373 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:40:31 ] 三くらいからで勘弁してください
374 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:47:17 ] .NET Framework 2.0がインストールされてるなら 以下をCheckShiftKey.jsのような名前を付けて保存し、 コマンドプロンプトで %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\jsc.exe CheckShiftKey.js を実行してCheckShiftKey.exeを作ればよい。 // CheckShiftKey.js import Accessibility; import System; import System.Drawing; import System.Windows.Forms; if (Control.ModifierKeys & Keys.Shift) Environment.Exit(1);
375 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 22:04:39 ] >>374 import Accessibility; import System.Drawing; import System.Windows.Forms; import System.Diagnostics; if (Control.ModifierKeys & Keys.Shift) { Process.Start("D:\\My Documents\\A.exe"); } else { Process.Start("D:\\My Documents\\B.exe"); } うまく出来ました。ありがとうございました。スレ違い失礼しました。
376 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 23:17:03 ] >>370 標準のコマンドのみでは無理 そんなことはなかろう
377 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 07:38:47 ] どうやるの?
378 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 08:12:03 ] すまん勘違いだった
379 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 14:39:20 ] せっかく解決済みなんだからほっとこーよ
380 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 15:31:38 ] すまん余計なお世話だった
381 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 16:08:05 ] >>364 タスクスケジューラを使えばできるよ
382 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 17:04:12 ] 質問してもよろしかったでしょうか? バッチで標準入力がリダイレトされているか判定できましたでしょうか?
383 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 20:00:57 ] はい
384 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 22:39:51 ] foo.bat | bar.bar > baz.txt で foo, barが> baz.txtされてるかどうかを検出、分岐するってことなら無理だろ。
385 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 00:21:16 ] >標準出力の話じゃないだろ。
386 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 14:50:20 ] foo.bat | bar.bar > baz.txt は知らんが foo.bat > baz.txt や foo.bat | bar.bat なら可能だろ。
387 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 15:25:48 ] >質問してもよろしかったでしょうか? 過去に遡って質問するわけじゃないのだから、過去について聞くことは無意味だと思うのだが。
388 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 15:36:16 ] 過去から現在に渡ってよろしいことになっていたかどうかを聞いているので 問題なかろう。
389 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:10:06 ] >質問してもよろしかったでしょうか? という質問をした時点で、その質問は過去の事象で、その可否を聞いているのだろう
390 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 20:20:16 ] うざ
391 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:04:37 ] メモ帳(memo.exe)でテキストファイルを開くコマンドを書いたのだが、 バッチを実行するとメモ帳は開くがプロンプトが閉じない。 メモ帳を開いた時点でプロンプトを閉じるにはどうすればよい? 以下バッチの内容 ---------------------------------------- C:\Program 〜省略〜 \memo.exe test.txt EXIT ----------------------------------------
392 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:08:18 ] のだが、 またお前か
393 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:10:09 ] start
394 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:16:20 ] >>393 ありがとう。 無事できました。
395 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:04:18 ] うざ
396 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 17:02:11 ] >>393 start バッチ とやってみたのだが、閉じない。
397 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 19:06:13 ] test1 test2 test3 test4 という文字の入ったtest.txtがあるとします。 バッチファイルからピンポイントで二行目(test2)を引き出して変数とおくにはどうしたらよいでしょうか? for /f "skip=1" %%a in (test.txt) do set hensuu=%%a を使っても、 hensuu=test2 hensuu=test3 hensuu=test4 となってしまい結局変数はtest4になってしまいます。 どなたか教えてください。
398 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 21:05:24 ] setlocal enableextensions enabledelayedexpansion set hensuu= for /f "skip=1" %%a in (test.txt) do if "!hensuu!"=="" set hensuu=%%a
399 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:20:18 ] >>398 ありがとうございます!できました! enableextensionsでコマンド拡張機能を有効にしたからできるようになったってことですか? コマンド追ってググったりしてもこの文でなぜできるのか理解できないです
400 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 03:09:59 ] enabledelayedexpansionで遅延展開を有効にしたから forの中でsetした変数(hensuu)が参照できるようになっている。 遅延展開が無効だと if "%hensuu%"=="" の部分がfor実行段階で if ""=="" になって常に真ということになる。
401 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 11:32:45 ] >>400 遅延展開を有効にすることでhensuu=test2にその時点でなるから、 if "%hensuu%"=="" には引っかからずにその時点でforを終了させられるという事ですね。 遅延展開についてよく理解できました。 わかりやすいレスありがとうございます。
402 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 14:18:58 ] forが終了するわけじゃない。 hensuu=test2となった以降はifが偽になるため何も実行されずにループする。 test.txtの残りが凄く長ければそれだけ終了時間は伸びる
403 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 18:50:55 ] >>402 てことは test3は偽、よって実行なし test4は偽、よって実行なし ・ ・ ・ って感じに最後の行になるまでされるわけですか。 だとしたら500行のtest.txtだとこれが500行分されるんですね・・・ やっと完全に理解できました。ありがとうございます
404 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:26:52 ] そんな無駄なことせんでも
405 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:28:31 ] for /f "skip=1" %%a in (test.txt) do set hensuu=%%a&goto x :x
406 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:03:56 ] 遅延展開使わんでも set hensuu= for /f "skip=1" %%a in (test.txt) do if not defined hensuu set hensuu=%%a
407 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:09:51 ] if 条件A or 条件B ( 処理1 ) else ( 処理2 ) ここで「条件A or 条件B」と言う構文はバッチファイルでは使えないんでしたっけ?
408 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:25:03 ] if/?
409 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:19:54 ] >>408 解決しました。ありがとうございます。
410 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:00:34 ] set or= if 条件A set or=true if 条件B set or=true if defined or ( 処理1 ) else ( 処理2 )
411 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 17:10:49 ] more|notepad /dev/stdin みたいなことはできないのですか?
412 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:16:31 ] echoで2段階にファイル書き出しをしたいのですが、うまくできません。 echo echo start "" コマンド.bat "引数" >B.bat >>A.bat 上記コマンドを実行して、まずA.batに echo start "" コマンド.bat "引数" >B.bat を書き出し、その作成したA.batを実行しB.batに start "" コマンド.bat "引数" ができるようにしたいのですが、実際には最初のコマンドを実行したところでA.batに echo start "" コマンド.bat "引数" のように、 >B.batが抜けた状態で作成されます。 何かいい方法は無いでしょうか。ご教示お願いいたします。
413 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:40:05 ] こんな感じか? echo echo start "" コマンド.bat "引数" ^>B.bat >A.bat
414 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:08:33 ] >>413 当方412ではありませんが、感動しました。 ^>を使えばそういう事ができるんですね 差し支えなければ、^のしくみを教えていただけないでしょうか?
415 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:19:52 ] (^^)
416 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 11:42:53 ] >>414 単なるエスケープ文字
417 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 17:30:23 ] ^^は^をエスケープしてるので echo (^^) は (^) となる
418 名前:412 mailto:sage [2009/11/18(水) 20:00:18 ] >>413 レス遅くなって申し訳ないです。ありがとうございました! ばっちり希望どおりの動作をしてくれるようになりました! >>416 >>417 仕組みがよくわかってなかったので勉強になりました。 みなさんどうもありがとうございました。
419 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 22:15:12 ] bash とかでいうところの``で囲んだ時のような、コマンドの出力結果をコマンドラインオプションに回す文法はありませんか?
420 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:41:46 ] for /f "usebackq" %I in (`dir /b`) do echo %I
421 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 00:28:27 ] >>420 ありがとうございました
422 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 01:56:20 ] usebackqはコマンド中に「'」を使う必要がある時に「'」の代わりに「`」を使うってオプションだろ? for /f %i in ('dir /b') do echo %i でいいのに何故わざわざusebackq付けんの?
423 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 02:15:37 ] 420じゃないけど常に usebackq 付けるようにした方が面倒な事考えなくて済む。 www.atmarkit.co.jp/fwin2k/operation/command008/command02.html
424 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 16:02:45 ] 好みだろ どーでもいー
425 名前:423 mailto:sage [2009/11/21(土) 16:20:50 ] >>424 そう、好み てか昔ハマッたことがあるから、俺は付ける派
426 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 13:26:23 ] 外部プログラムを起動させるコマンドを実行すると そのアプリが終了するまでbatへ制御が戻らないのですが それを回避することは可能ですか?
427 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 13:48:22 ] startコマンドを使う
428 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 16:10:21 ] batファイルを分けることなく処理の優先順位を変更する方法があれば教えてください。
429 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 18:57:10 ] startコマンドを使う
430 名前:428 mailto:sage [2009/11/24(火) 19:10:35 ] >>429 start /b /low :exec ではうまくいきませんでした。 どのように記述すればいいのでしょうか?
431 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 22:29:40 ] ところで ttp://itpro.nikkeibp.co.jp/article/Windows/20051006/222374/ start /b test.bat てどういう意味がある? call test.bat とは違うの?
432 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 12:44:00 ] ウィンドウ開かないだけで、別プロセスのcmd.exeが立ち上がる…んだと思う。
433 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 20:20:58 ] >>431 誰が書いたか知らんが、阿呆が意味も分らず、最初のオプション使って、無理矢理、使用例を作っただけなんだろ
434 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 20:25:13 ] >>430 goto %1 start /low "" %0 :exec
435 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 16:18:48 ] そういやstartって start file はokで start "file" はngな時があるけどどういう理屈なんだろうか
436 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 16:27:01 ] 理屈って言う程のことはないよ start/?見りゃ自明だろ?
437 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 16:32:00 ] >>430 wmiのsetpriorityを使え
438 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 20:12:44 ] そんなこと言っても難しかろ startにしとけ
439 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 02:25:00 ] data.dat というファイルがあったとして、これを一日に一回 data1129.datみたいに日時をつけてバックアップとして保存していけるようなバッチファイル 作れる方いましたら教えてください スタートアップに登録するとして、同日に一回でも度ってあったらコピーしないという仕様で
440 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 03:40:36 ] if not exist data%date:/=%.dat copy /b data.dat data%date:/=%.dat
441 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:46:20 ] プロンプト文字にerrorlevel出すにはpromptコマンドにどう書けばよい?
442 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 15:20:51 ] これは、結局バッチスクリプトとは関係ないんですけど、copyコマンドでオプションに /A(テキストモード)を指定しても、BOMありUTF-8のテキストファイルを結合すると ファイルとファイルの間にBOMが残るんです。 現在はWinXPのコマンドプロンプトでしか試せないんですが、VistaやWin7なら、ちゃん とBOMを外してくれますか?
443 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 15:40:21 ] Vistaでやってみたが、入ってるね /Aは改行コードしか見ないだろうから仕方がないかも
444 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 15:44:42 ] あ、改行とEOFだったかな
445 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:41:05 ] /A ASCII テキスト ファイルとして扱います。 UTF-8じゃないのに何言ってんだか
446 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:50:38 ] /Aが改行をどうするって?
447 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 21:49:14 ] COPY /8
448 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 14:30:54 ] バッチスクリプトならできるが、関係ないな
449 名前:442 mailto:sage [2009/12/03(木) 18:30:00 ] >>443 Vistaでも駄目ですか、どなたかWin7の状況を教えて下さい。
450 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:27:40 ] 逆に7でこの挙動が変わってたらおかしいでしょう
451 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:43:06 ] 別におかしくないが?
452 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:46:19 ] chcp 65001
453 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 21:15:54 ] BOM削除してからcopyすれば?
454 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 21:54:01 ] ところで^Z削除するのはどうすれば?
455 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 15:10:43 ] >>452 フォントを変えるコマンドは?
456 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:47:30 ] ぐぐれ まあ変えても解決にはならんが
457 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:58:36 ] 作れ setconsolefont() setcurrentconsolefontex()
458 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:13:56 ] 代替コマンドシェルにnyacusなんてのがあるんだな。 cmdと比べると構文が結構まともだ。 PowerShellより圧倒的に軽いしちょっと覚えてみる気になった。
459 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 03:55:32 ] nyacus落ちない?数年前に使ったけど、それでやめた。
460 名前:デフォルトの名無しさん mailto:sage [2009/12/10(木) 01:06:30 ] 今のところ落ちてないよ。まだ大した使い方してないけど。 最終更新日が先月でまだまだメンテが続いてるね。
461 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 15:53:24 ] CMD.exeのfor文は頑張りすぎ
462 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 18:23:45 ] runasの/trustlevelってどういうときに使うの?
463 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 21:14:34 ] for /F %%a in (filelist.txt) do move "%%a" %dir% filelist.txtにファイルの一覧をリストアップしてそのファイルをすべて特定のフォルダへ移動したいです ですがファイル名に半角スペースが含まれていると移動されずにスルーされてしまいます 困ってしまいます お願いします
464 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 21:15:18 ] >>439 >>440 これの改良版で1週間分のみバックアップを残す仕様に出来る方おりませんか? ファイルが7個以上あった場合、古いものから消していくようになると思うんですが
465 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 21:25:48 ] >>463 "delims="
466 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 21:32:10 ] >>464 for /f "skip=6 delims=" %%i in ('dir /b/o-d data*.dat') do del %%i これで新しいものから順に6個を除いたファイルは全部消える
467 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 21:33:20 ] >>465 ありがとうございました 助かりました