[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 07/26 10:45 / Filesize : 187 KB / Number-of Response : 837
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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
ありがとうございました
助かりました






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<187KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef