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


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

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



1 名前:デフォルトの名無しさん [2008/08/04(月) 23:27:23 ]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。

【前スレ】 (関連スレは>>2)
【.cmd】 バッチファイルスクリプト %2 【.bat】
pc11.2ch.net/test/read.cgi/tech/1197881068/



74 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 10:44:58 ]
こういう事書くのだけが生きがいのキモオタっているんだよね。

75 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 12:19:34 ]
nconvertとか

76 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 18:20:47 ]
>>74
キモヲタ涙目w

77 名前:デフォルトの名無しさん [2008/08/17(日) 02:55:50 ]
ウィザード形式でバッチファイルやバッチコマンドを生成してくれるようなソフトってある?
全部のコマンドとは言わないけど、for系とかfindstr系とかのややこしそうなやつだけでも。

78 名前:デフォルトの名無しさん [2008/08/17(日) 03:26:33 ]

こなの見つけた
www.google.com/search?q=dr.batcher&num=5


79 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 03:58:05 ]
便利な外部コマンド(ベクターとかに)いっぱいあるけど、
普通のfor文やwhile文が使える外部コマンドがあったら、
すげー便利だろうなぁ

80 名前:77 [2008/08/17(日) 11:09:46 ]
>>78

いやぁ、あるもんだなぁ。さんくす。ちょっと使い込んでみるわ。

81 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 13:36:41 ]
>>79
powershell.exe
cscript.exe
mshta.exe

82 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 19:35:23 ]
>>78
それってOS/2のDr.Dialog作ってたところ?



83 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 22:42:10 ]
DrDialog、あれはいいものだ・・・

84 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 04:25:11 ]
ひょっとしたら1行で済むかもしれないが、俺には考え付かなかったので質問…

ren *.exe *.exe.dat で拡張子を偽造したファイルが同一ディレクトリに大量に
存在するのだが、この拡張子を簡単に *.exe に戻すバッチが思いつかない。
仕方ないので今はバッチからWSHを呼び出しているが、これをなるべく少ない行数
のバッチで処理する方法ってある?
exe等の外部ファイルが使用できないため、何とかバッチだけで処理したいのだが
何かいい方法ってあります?
(1行で済むなら板違いなので申し訳ない)

85 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 04:36:09 ]
ren *.exe *.

86 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 04:37:08 ]
>>85 ren *.exe.dat *.

87 名前:デフォルトの名無しさん [2008/08/20(水) 05:44:14 ]
>>84
for %i in (*.exe.dat) do ren %i %~ni

for文使えるとラクだぞ。
ディフォルトのWindowsである程度の処理は可能。
C:\WINDOWS\Help\ntcmds.chm

88 名前:デフォルトの名無しさん [2008/08/20(水) 06:20:53 ]
Windowsならbat+wsh最強。
なんたってディフォルト。
RubyとかPerlとかPythonとかいらね。
Windowsしか使わないのにRubyとか笑えるw
スクリプトで済む事をexeにしてVectorに臆面もなく公開とか超うけるw

まぁ、異論は認める。

89 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 10:16:53 ]
>>88
昔、某セキュリティソフトにwshであるというだけでウィルスの疑いをかけられたので
なんとなくwshを敬遠してしまう。

90 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 11:18:42 ]
WSHっつってもVBScriptかJScriptでしょ?

91 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 12:34:56 ]
VBScriptはFSOとかすぐに反応してくるからな…

92 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 12:44:37 ]
WSH用のbatエンジンが開発されたのかとおもったぜ。



93 名前:84 ◆W4wSOopp0M mailto:sage [2008/08/20(水) 13:45:45 ]
>>85
>>87
ありがとう!
というか、やっぱり1行でできるのか…
特に ren の *. には参った。
普段よく使うコマンドなのに、こういう使い方、全く知らなかった。
なぜ [*.] で拡張子が消えるのかいまだにわからないが、
恥ずかしくて、これ以上ここで質問できない…。

94 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 14:03:37 ]
*.はDOS時代からの仕様というしかないからな。
ファイル名にほぼ制限のない現在からすると変に見えるのはしかたない。

95 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 15:27:23 ]
↑こいつは何を言ってるんだw

96 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 18:34:36 ]
>>93
なぜもなにも、そういう仕様だからだよ。
technet2.microsoft.com/WindowsServer/ja/library/f924c4f9-d135-4f25-900d-8e95ad1b09391041.mspx

97 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 21:20:19 ]
↑こいつは何を言ってるんだw

98 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 00:13:28 ]
command.comからcmd.exeに変わったときに切り捨ててもよかったと思う物の一つだねぇ。拡張子のアレ


99 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 01:32:14 ]
このスレの人間はワイルドカードも知らんのか?!

100 名前:デフォルトの名無しさん [2008/08/21(木) 08:17:43 ]
知ってるけどなにか

101 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 11:48:24 ]
あぁゴメン
>>94>>98だけだよな、ワイルドカード知らないのなんてw

102 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 14:31:01 ]
>拡張子のアレ
ソレは関係ないよ



103 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 14:35:40 ]
>なぜもなにも、そういう仕様だからだよ。
>ttp://technet2.microsoft.com/WindowsServer/ja/library/f924c4f9-d135-4f25-900d-8e95ad1b09391041.mspx
ほんとかどうか試してから言えよ。


104 名前:その1 mailto:sage [2008/08/21(木) 22:16:44 ]
分かり難くて申し訳ありませんが、ご教授お願いします。
以下は、temp.txtというファイルに「ok」の文字列があった場合、
何もせず次の処理へ移行し、もし「ok」の文字列が無い場合は、
hello!!を5回連続して表示させたいと思い書いたものです。
----------------------------------------------------------------
@echo off
for /L %%i in (1,1,5) do (
echo %%i回目の処理を行います。
find "OK" < temp.txt
if errorlevel 1 goto NG temp.txt
if errorlevel 0 goto OK temp.txt

:NG
echo hello

:OK
echo 条件に一致している為、なにもしません。
goto END
)
:END
echo 次の処理へ続く・・・
----------------------------------------------------------------

105 名前:その2 [2008/08/21(木) 22:18:04 ]

自分の行わせたかった動作としては、「ok」の文字列が無い場合、
1回目の処理を行います。
hello
2回目の処理を行います。
hello
・・・・が、5回続くようにしたかったのですが、実際には以下になります。

1回目の処理を行います。
hello
条件に一致している為、なにもしません。
次の処理へ続く・・・

5回繰り返すというfor文の記述が無視されています。
「goto END」に問題があるとは思いますが、いろいろ記述を変更しても、
思うような動作になりません。
どのようにすれば、for文の記述通り、5回の処理を行えるでしょうか。

106 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 23:37:07 ]
OKラベルをforの外、いっちゃうとENDと置き換える。
たぶん勘違いしてるところはラベルは制御ブロックをつくるわけじゃなく
単に飛び先を提供しているだけなので、NGラベルへ飛んでecho helloしたら
次はOKラベル以降に突入するってこと。
とりあえず慣れんうちは先頭の@echo offを外しとく。

107 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 23:41:31 ]
>>105
全部書き直したくなるが…w

:NG → :OK と書くからNGに行ったものも全てOKの処理を経て全部ENDへ飛ぶ。
:OK → :NG と書いてNGの時はOKの処理を飛ばせ。

108 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 00:13:49 ]
>>104
仮にそれで動いたとして、
temp.txtを5回走査することになるがどう思うよ?

109 名前:デフォルトの名無しさん [2008/08/23(土) 15:26:09 ]
>>105
テスト用ソースじゃなくて実際にする事を詳しく聞いた方がいいぞ


110 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:34:59 ]
>>104
IF okが見つかった (
    SET FLAG=TRUE
) ELSE (
    SET FLAG=FALSE
)

IF NOT %FLAG%==FALSE (
    FOR /L %%I IN (1,1,5) DO (
        ECHO hello
    )
)

ECHO 次の処理へ

111 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 23:03:51 ]
つーかFLAG必要なくね?

112 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 22:29:25 ]
俺ならforの処理内容を丸ごとラベルに飛ばしてcallするところかな



113 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 23:18:56 ]
>>112
IF おk (
    CALL :OK
) ELSE (
    CALL :NG
)

GOTO :END

NG:
ECHO 次の処理へ
GOTO :EOF

:OK
るーぷ
GOTO :EOF

:END
GOTO :EOF



114 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 10:18:07 ]
NGのラベル付け間違ってるぞ

115 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:41:10 ]
大文字やめろよ、気持ち悪いw

116 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 11:46:50 ]
ラベルをCALLするなんて上等なことができるのか
きちんと戻るんだろうな?

117 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 12:55:57 ]
>>116

118 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 15:27:08 ]
いくらなんでもこれは釣りだよな?

119 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:17:53 ]
call exit
戻ってこないよー

120 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:29:45 ]
call call echo なんて

121 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:13:51 ]
dosのbat書いてた人にしてみれば普通の感想。
call %1 とかやって罠にはまったことのあるやつも多いだろう。

122 名前: ↑ mailto:sage [2008/08/29(金) 19:15:35 ]
%1 じゃなくて %0 の間違い



123 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:54:05 ]
それは関係ないだろ
%0
と書いても同じ

124 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:41:22 ]
リカーシブコールで罠にはまるとか(笑)

125 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:48:39 ]
罠ってのはね〜、中でcdしてるとき相対パスで使われちゃうとか〜

126 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:04:53 ]
再帰呼び出しも出来ないマヌケw

127 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:15:35 ]
そうそう、単なるサブルーチンを同一ファイルにまとめたいだけだったのに、
わけ分からん動作になってまいりましたよw

128 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:58:42 ]
>>116
call /?

129 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:31:45 ]
echo で空行って表示出来ないの?


@echo off
aaa
ECHO は <OFF> です。
bbb
pause

を実行すると
aaa
ECHO は <OFF> です。
bbb
って表示される


130 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:33:38 ]
間違えた。こっち。


@echo off
echo aaa
echo
echo bbb
pause


131 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:39:45 ]
echo=
scho\
echo[
echo]
echo{
echo:
echo;
echo+

132 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 21:35:53 ]
>>129
echo.
だろjk



133 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 22:41:11 ]
できた!サンキュッ!

134 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 00:01:17 ]
つくづく、echo って、おバカな仕様ですよね。

135 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 01:10:10 ]
↑echoよりバカ

136 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 16:03:39 ]
echo.exe

137 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 15:47:13 ]
>131
横レスだがこんなんでも出来たのか。
2番目スペルミスで5番目はエラーだけど。

138 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 23:47:01 ]
エチョー

139 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 15:41:06 ]
エクスプローラで
 chinco.txt ← これをマウスでドラッグして
 unko,bat ← ここにドロップする
これは出来るんですが、

インターネットエクスプローラかFireFoxで表示中のWEBページの
リンクをマウスでドラッグしてバッチファイルにドロップできません。
BAT でも VBS でもできません。
なにかいい方法はありませんか?

140 名前:デフォルトの名無しさん [2008/09/03(水) 15:50:07 ]
ファイル名を指定して実行にはドロップできるよ

141 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 17:45:39 ]
>>139
エクスプローラやインターネットエクスプローラかFireFoxみたいな
パソコンの使い方の質問は板違い
こっち↓で質問した方がいい

PC初心者
pc11.2ch.net/pcqa/

142 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 19:20:17 ]
このスレにしてはめずらしく正しい誘導だな



143 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 22:38:22 ]
htaで受ける

144 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 00:49:48 ]
このスレの住人は、wshについてどういう見解なのでしょうか?

1.バッチもWSHも両方出来る
2.バッチしか出来ない(Wshに移行したい)
3.Wshよりバッチの方が優れてる(Wshに移行するつもりは無い)



145 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 03:09:28 ]
1

146 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:40:39 ]
両方使えるが、ここがム板のバッチスレである以上
どうしてもバッチじゃ無理なところだけは例外にしても
7割以上WSHでゴリゴリやるようならスレ違いだと思ってる

147 名前:デフォルトの名無しさん [2008/09/04(木) 19:44:11 ]
そもそもバッチというものはだな、

148 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 20:08:29 ]
俺達の未来そのものだよ

149 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:45:15 ]
>>144
釣り… だよな

150 名前:デフォルトの名無しさん [2008/09/05(金) 01:45:43 ]
ていうかさ、bat通り越してplとかpyとかrbとかって健全じゃないと思うんだ。
wshとかならまだいいけどさ。
batが頼りないのは誰もが承知してるんだ。
でもディフォルトで使えるのはbatかwshくらいなもんだろ?
で、どっちが早く仕事できるかっつったらやっぱbat。異論は認める。
ちょっとしたインストーラなんてほんの数行から十数行で済むしさ、
エンドユーザ共にシステムフォルダにhoge.dllをコピーしてregsvr32するんだっつっても
奴らちんぷんかんぷんだからさ、ちょっとbatつけたげればそれで解決。説明するよりずっと早いわけ。
ここでさ、お前らRubyのwin32バイナリをダウンロードして、インストールしろって説明から始めよう
としたら本末転倒だろ?
やっぱbat。お前らこれからもbatには世話になるはずだろ?

151 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 10:11:27 ]
del /Q *.*

152 名前:デフォルトの名無しさん [2008/09/05(金) 16:10:32 ]
PROGRAM filename
というように実行するプログラム PROGRAM がありますが、
どうも filename と同じフォルダからしか実行できないみたいなんです。

そこで、以下を実行するバッチを作りたいと思います。
cd filenameと同じフォルダ
PROGRAM filename を実行
cd 元のフォルダ

filename と同じフォルダをどうやって取得するのか分からないので、
教えていただけないでしょうか。
または、他によい方法があれば教えていただけないでしょうか。
よろしくお願いいたします。



153 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 16:47:39 ]
>152
まず基本的なパソコンの使い方を勉強しましょう

PC初心者
pc11.2ch.net/pcqa/

154 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:13:34 ]
>152
環境変数PATHを設定すれば、どこのディレクトリに居ても呼べるよ
設定の仕方はOSのバージョン毎に微妙に異なるが

155 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:16:50 ]
プログラム板でパソコンの使い方を教える馬鹿

156 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:19:28 ]
↑救いようのないバカw

157 名前:152 [2008/09/05(金) 17:49:25 ]
どうも説明が足りなくてすみません。
今回はパスの設定では解決しません。
PROGRAM は filename を処理して、中間ファイルを filename と
同じフォルダに吐いて、さらにそれを処理します。
PROGRAM を filename と同じフォルダで実行しないと、
中間ファイルをどこに吐いたのか分からなくなっちゃうみたいなんですよね。

ちなみに、環境変数を設定して解決するのは、
「PROGRAM のおいてあるフォルダでしかPROGRAMが実行できない」場合で、
「filename のおいてあるフォルダでしかPROGRAMが実行できない」場合では
ないですよね?

引き続き、ご返答いただけないでしょうか。

158 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 17:50:20 ]
おじいちゃんに環境変数PATHの意味と設定方法とか
バッチスクリプトについて教えているパソコン教室があるのか気になるところだな

159 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:05:32 ]
>157
ああ、そういうことか。こっちこそ早とちりスマソ。

ttp://technet2.microsoft.com/WindowsServer/ja/library/97731e49-ffa3-4918-87fb-5318743f29321041.mspx

とかどうよ?
filenameがコマンド引数ならそのまま、そうでないならcallと組み合わせればいけるかと。

160 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:09:35 ]
>>152
filenameを引数にとるバッチと仮定するとこんな感じかな

pushd "%~dp1"
PROGRAM "%~1"
popd


161 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 23:17:58 ]
set BaseDir=%CD%
cd /d filenameのフォルダ
PROGLAMを実行
cd /d %BaseDir%


162 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 01:28:08 ]
set unko="toilet"




163 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:08:42 ]
あるテキストファイルから読んだ%%aは常に整数なんですが、これを計算する方法はありますか?
set /a n=%%a * 2
とかできないみたいで

164 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:41:45 ]
>>163
%%aってことはテキストの読み込みにfor使ってるんだろうけど
それなら計算できてないんじゃなくて参照できてないだけ

setlocal ENABLEDELAYEDEXPANSION
for /f %%a in (n.txt) do (
set /a n=%%a * 2
echo !n!
)


165 名前:163 mailto:sage [2008/09/06(土) 10:08:37 ]
へええええ
希望通りになりました
どうもありがとうございます

166 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 13:28:54 ]
こういうのはechoをonにしてループしてる部分を見れば
遅延展開してない部分が全ループで同じになってるのですぐわかる。

167 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 15:08:57 ]
>>166
遅延云々なんかより先に
forの中で変数展開できないのかー
としか思わんだろ

168 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 15:38:06 ]
変数展開できないとは思わんでしょ。

>>164の!n!を%n%にしてると実際にまわるのは%n%が空で

set /a n=%%a * 2
echo

これのループになるんだから。変数参照してねーよってのがすぐわかる。

169 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:26:20 ]
>>168
んー俺ならループ回す前に変数初期化するしなー

set n=0
で回したら、ひたすら
echo 0
でしょ

なんだ、forループじゃ変数いじれないのか?
と思ってしまう

170 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:58:33 ]
変数いじれないのかとか思うのは人それぞれだけど、
実際に何が起きてるかは一目瞭然じゃん?

>>163は計算が出来ていないと勘違いしたみたいだけど、実際は
変数の参照が出来ていなくて全て定数を参照していたわけだから。

171 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:06:57 ]
そうだそうだ

172 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:27:37 ]
>>169
バカは黙ってろw



173 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:30:54 ]
>>172
お前もなw

174 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:35:13 ]
ん?悔しかったの?






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

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

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