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


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

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



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

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %6 【.bat】
hibari.2ch.net/test/read.cgi/tech/1277465356/

【.cmd】 バッチファイルスクリプト %5 【.bat】
pc12.2ch.net/test/read.cgi/tech/1242268171/
【.cmd】 バッチファイルスクリプト %4 【.bat】
pc12.2ch.net/test/read.cgi/tech/1229955189/
【.cmd】 バッチファイルスクリプト %3 【.bat】
pc11.2ch.net/test/read.cgi/tech/1217860043/
【.cmd】 バッチファイルスクリプト %2 【.bat】
pc12.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
pc11.2ch.net/test/read.cgi/tech/1178281991/

39 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 21:16:29.06 ]
はぁ?

40 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 21:18:32.94 ]
%%→% はバッチだけだろ
cmdの標準入力やコマンドラインは違うだろ

41 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 21:33:13.64 ]
よくそんなんでやってきたな
表面的にしか理解していない証拠

42 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 21:43:06.29 ]
そんなんでだめな証拠をみせろや

43 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 21:53:28.63 ]
>>40
なるほど、コマンドプロンプトで試してみたら
call echo %%de%%
u
call echo %%%de%%%
%u%
となったから>>37と一致したよ
バッチではなくコマンドプロンプトでしてる時と同じ処理になるってことなのか。
ありがとう。

>>39,>>41
そんな煽るだけの誰の役にも立たないクソレスしかつけられないなんて
かわいそうな子なんですね。

44 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 22:11:49.57 ]
>>16
今更ながら気づいた。こういうことか

@echo off
setlocal enabledelayedexpansion
set /p mo=あ、そう。打ちたいなら何か打てば?
echo !%mo!
endlocal
exit /b

45 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 22:13:30.35 ]
>>43
んじゃ、このバッチで復習を

setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=omedetou
set omedetou=おめでとう
for /f %%A in ( 'call echo %%^^^!%%%%!%o%!%%%%^^^!%%' ) do call echo %%A
endlocal

46 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 10:15:12.01 ]
質問です。
下記のバッチですが、if 文の条件に合わないのに、
なぜか変数 a の値が変わります。なぜでしょうか?

@echo off
set a="ー"
echo BEFORE=%a%
if %a%%a% == """""" set a="X"
echo AFTER=%a%
pause

2行目で変数に "ー" 以外を代入すると、値は変わりません。
"ー" はバッチ変数のダメ文字なんでしょうか?


47 名前:46 mailto:sage [2011/03/10(木) 10:27:51.06 ]
>>46 をブラウザからコピペしてバッチファイルを作成したら動作しませんでした。
set a="ー"
の末尾のスペースを削除したら動作しました。
もう、さっぱり分かりません。




48 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 10:52:15.87 ]
エスケープ文字とか確認してみた?

49 名前:46 mailto:sage [2011/03/10(木) 11:19:55.02 ]
ありがとうございます!
set a="^ー"
にしたら正常に動きました。
なぜか末尾に半角スペースはダメなようです。
"ー"以外にもエスケープが必要な文字あるんでしょうかね。
実際は変数に何の文字が入るか分からないので、
全部エスケープすりゃいいのかな。
全角文字はやばいのかも。

50 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 12:30:25.19 ]
どんだけ半角スペース入るのかわからんけど
forのdelimsとかtokensとか使ってみたらどう?

51 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 12:36:43.13 ]
" "の中でが^はエスケープにならないけどね

52 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 12:39:50.02 ]
そもそも"がエスケープだからな

53 名前:46 mailto:sage [2011/03/10(木) 12:51:26.32 ]
>>50
半角スペース1個ですよ。
IE とかでレスをコピペしたら付くよ。

>>51>>52
普通そうですよね。
では set a="^ー" で正常に動いた理由は?

54 名前:46 mailto:sage [2011/03/10(木) 12:55:51.56 ]
というか ^ じゃなくても同じだなw
また、分からなくなってきた。

55 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 13:17:15.56 ]
if文ではーと"が同一視されるとか

56 名前:46 mailto:sage [2011/03/10(木) 14:19:31.45 ]
"―" でも同じようだ。

if "―""―" == """""" echo 等しい
等しい

だめだこりゃ

57 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 19:19:48.87 ]
if aaaaa == a―a―a echo 等しい
等しい

"とか^とか全然関係ないじゃん。
要するにif文の比較には駄目文字が存在するって事で。
ーと―は駄目だね。




58 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 19:35:38.13 ]
if aーaーa == aaaaa echo bug


59 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 19:58:41.01 ]
if aab==aーb echo x

60 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 20:37:35.38 ]
バッチを直接使わずに自身を引数にWSHに渡すやり方が便利だ。
だがWSHはWindows 7だとデフォルトでは無効なんだっけか。
PowerShellを覚えなきゃいかんのかなぁ。

61 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 21:58:30.78 ]
同左ってことですね

62 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 22:31:24.41 ]
そうさ

63 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 23:02:31.39 ]
なんでそうなってる?
外人さんにとって、横線は同左なのか?

64 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 23:10:43.82 ]
ttp://support.microsoft.com/kb/414445/ja

65 名前:sage [2011/03/10(木) 23:16:28.91 ]
telnet通信越しにバッチを実行数と、たまに標準エラー出力に実行したコマンドが、
まるまる表示されるときがあるんですが、これなんですかね?
バッチの動作は正しいんですが、気持ち悪いです。

66 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 23:44:27.22 ]
つまり"コピー"が"コピピ"と同等なのかw
迷惑な仕様だな

67 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:28:50.41 ]
>>64
この問題とは違う気がする

この事例だと"コピー"は"コピ?"となってーはワイルドカードみたいになるってこと?それか正規表現?
>>58>>59見ると正規表現っぽいけど



68 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 03:53:26.02 ]
「同左」文字の一覧

69 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 06:42:21.93 ]
半角カタカナの"ー"も同じっぽいけどね

70 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 08:28:01.29 ]
if ゞ==々 echo ゞ=々
if not "ゞ"=="々" echo "ゞ"≠"々"


71 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 11:26:30.13 ]
あはは

72 名前:sage [2011/03/12(土) 12:29:23.18 ]
Linuxでsyncに該当するコマンドってあります?

73 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 14:08:30.15 ]
>>72
sync

74 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 16:45:25.01 ]
if あはは==あは々 echo あはは==あは々

75 名前:デフォルトの名無しさん [2011/03/13(日) 12:13:23.68 ]
>73
失礼しました。
Linuxでのsyncに該当するコマンドがwindowsであります?です。

76 名前:デフォルトの名無しさん mailto:sage [2011/03/13(日) 12:34:12.10 ]
ハードウェアの安全な取り外し?

77 名前:デフォルトの名無しさん mailto:sage [2011/03/13(日) 12:53:26.18 ]
>>75
technet.microsoft.com/en-us/sysinternals/bb897438.aspx



78 名前:デフォルトの名無しさん [2011/03/13(日) 21:27:59.41 ]
>>77
まさにこれを探してました。ありがとうございます。

79 名前:デフォルトの名無しさん mailto:sage [2011/03/13(日) 23:59:38.64 ]
IF文の変数の比較判定は、思わぬ落し穴がある

set a="b==c"
if not %a%==%a% echo NOT EQUAL !!


80 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 15:01:05.89 ]
どこが?
おまえだけw

81 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 16:24:57.67 ]
set a="b==c"
if %a%==%a% echo EQUAL !! だけど?


82 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 17:47:04.60 ]
ふーん。環境により変わるのか?
教えてくれ>>80の先生

83 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 19:18:01.59 ]
俺は Win2kSP4 だが
何度やっても NOT EQUAL !! って表示されるな
古い cmd.exe のバグかね?

84 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 20:04:46.64 ]
>79
ウチのWinXP(SP3)では何も表示されないな。
ついでに「 echo %a% 」を次の行に追加した場合は「 "b==c" 」と表示された。

85 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 20:13:45.30 ]
今、XPのcmd.exeを拾ってきて試した
変数の展開が微妙に違うなw


win2k
>if not "b == c"=="b==c" echo NOT EQUAL !!
NOT EQUAL !!

winXP
>if not "b==c" == "b==c" echo NOT EQUAL !!


86 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 20:31:25.66 ]
>>85
2kだと == が "" でエスケープされずに最初の == が比較演算子と認識されてるのかな?
スペースの付き方の違いをみるとそう受けとれる
2kの cmd.exe は for にもバグがあるみたいだし結構ずさんなバグが他にもあるのかも
otnx.jp/CMD/%A5%D0%A5%B0/

87 名前:デフォルトの名無しさん mailto:sage [2011/03/14(月) 21:54:24.82 ]
>2kだと == が "" でエスケープされずに最初の == が比較演算子と認識されてるのかな?
>スペースの付き方の違いをみるとそう受けとれる
もしそうならあとがコマンドとして実行されてエラーになるだろ?



88 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 00:50:09.59 ]
win2k は "b と c"=="b==c" を 比較して echo してる

89 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 01:27:18.63 ]
win2kのバグ付きcmd.exeで動くバッチw

@echo off
set b=それは ^^" です。
set c=それは ^^" ではありません。
:x
set a=
set /p a=文字=
if "%a%==%a%" ( echo %b% ) else echo %c%
goto x


90 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 01:30:48.75 ]
>>86-88
それなら「c"」までがif文となり、その後の「=="b==c" echo NOT EQUAL !!」
が、実行されてエラーになるんジャマイカ?

91 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 01:41:19.03 ]
「"b == c"=="b==c"」の全体の「"」が外されて
not「b」==「c"=="b==c」と解釈してると予想

92 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 01:50:38.93 ]
バグってるソフトが、正常なエラーを出すかよw

93 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 01:55:32.05 ]
>>91
それだと>>89は動かない

94 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 05:10:10.83 ]
>>93
手元に2000無いから分からんが、どう動くの?

95 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 07:48:06.63 ]
文字=z
>if "z == z" (echo それは " です。 ) else echo それは " ではありません。
それは " ではありません。

文字="
>if "" == "" (echo それは " です。 ) else echo それは " ではありません。
それは " です。


96 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 08:45:46.87 ]
win2kのcommand.comもバグってるようだ

97 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 11:37:36.79 ]
>>95
その結果だけみるとダブルクォーテーションでエスケープ出来ない感じ?



98 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 13:11:59.49 ]
" は == に対しては何の効果もない。
" が奇数個だとまずい。
" も比較の対象。

99 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 17:17:41.23 ]
2kなんかどうでもいいんだけど

100 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 18:48:54.30 ]
Win2000のユーザはまだ多数いると思うぞ

101 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 22:03:56.89 ]
MSですらサポートやめたOSにまで対応するのは愚かだよ

102 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 22:26:00.31 ]
2kなんかどうでもいいからサポート中のOSだけでも直してほしいな

103 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 22:41:15.80 ]
何を?

104 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:00:36.57 ]
>>101
愚かだね。誰もそんな要求してないけど。

105 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:08:44.93 ]
>>103
cmd.exeバグだらけなんだけど

106 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:14:38.46 ]
ここにそんな事を書いても無駄

107 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:25:37.56 ]
どこかに書けば直すとでも?



108 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:30:59.08 ]
否。でも無駄には変わりない。

109 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:37:12.84 ]
だからなに?

110 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:41:30.73 ]
>>106 >>108
ここにそんな事を書いても無駄

111 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 23:48:08.15 ]
そうですねw

112 名前:デフォルトの名無しさん mailto:sage [2011/03/16(水) 01:49:08.39 ]
おまえ誰?

113 名前:デフォルトの名無しさん mailto:sage [2011/03/16(水) 09:27:16.44 ]
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
           た  わ  し  で  す        -‐
  ー
 __            __VV
             >:::::::::::::::::::: <
            _>'::::::::  ::::::::<
            ,>':::::   ::::::::<
            >:::::::   :::::::::<
            >;;:::::   :::::::< 
             >i::::::::::::::ゞ<
               'ヘトハト!             ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 

114 名前:デフォルトの名無しさん mailto:sage [2011/03/16(水) 10:57:44.78 ]
なんか面白いネタを頼む。愚痴は要らん

115 名前:デフォルトの名無しさん [2011/03/16(水) 23:32:55.60 ]
標準出力や、標準エラーを初期化する方法ってあります?

初期化って概念が、そもそも無いかもしれないですが。

116 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 01:18:24.11 ]
>標準出力
2>標準エラー

117 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 15:43:02.49 ]
>>115
初期化しないと生ずる不具合を教えてください
具体的にお願いします



118 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 16:58:13.74 ]
追加になります。

119 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 20:10:10.61 ]
で、溜まったまま出てこないの? 便秘かよw

120 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 20:36:18.44 ]
Cでfflush(stdout)するようなもん?
違うか

121 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 22:02:21.39 ]
それ初期化っていうかよ

122 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 22:02:55.98 ]
ファイナライズとか?

123 名前:デフォルトの名無しさん mailto:sae [2011/03/18(金) 00:05:53.42 ]
closeだっちゃ

124 名前:デフォルトの名無しさん mailto:sage [2011/03/18(金) 22:45:57.66 ]
他スレから誘導されて参りました。

環境は
Windows XP Service Pack 3
です。

sample.batという名のバッチファイルを作って、その挙動を
1.commandstring = "C:\sample_prgm.exe"
 のようにcommandstringという変数に右辺の文字列を代入する。
 (バッチファイル中に直接書きこむ)
2.commandstringが有効なパスであるならば
 そのパスをコマンドとして(関連付けどおりに)実行させる。
 (つまりコマンドプロンプトにcommandstringの中身を打ち込んだのと同じ動作をさせる)
というふうにしたいのですが、どう書けばよろしいでしょうか?

Pythonで言うなら
#######################
import os, os.path

commandstring = "C:\sample_prgm.exe"

if os.path.exists(commandstring) :
  os.system(commandstring)
#######################
です。
これをbatファイルでやりたいのです。

よろしくお願いいたします。


125 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 00:14:09.04 ]
set commandstring=C:\sample_prgm.exe
if exist %commandstring% %commandstring%

126 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 00:40:25.87 ]
この手の方がパスにスペースを含むような使い方をするとはあんまり思わないけど
スペースぐらいはケアした方が良いような・・・

127 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 00:42:01.80 ]
クレクレマンにそんなに親切に対応する必要なし。



128 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 11:10:36.49 ]
質問があります
お聞きしたいことはバッチファイルで出力されたログを上手く取るコツです

今はこのように非効率だとおもいながらもバッチファイルで標準出力やエラー出力をlog.txtに追加しています
(このteeはここではパイプで渡された入力をファイルに追記するために使っています)

  ( NanikaSuruA.exe 2>&1) | tee -a log.txt
  ( NanikaSuruB.exe 2>&1) | tee -a log.txt
   以下続く

ただこの方法ではコマンドごとに記述することが手間と
標準出力を利用したいときにエラーが記録しづらく困っています。
例えば

  TokubetuNaNanika.exe > output.txt
  TokubetuNaNanika.exe は、内部コマンドまたは外部コマンド、
  操作可能なプログラムまたはバッチ ファイルとして認識されていません。

このようなときにパスが通っていないエラーが記録されていませんでした

このときはrun_test.batを作りその中で処理したいbatを呼び出し表示されるものをログに追記するとよさそうに見えますが
一つのバッチファイルのにつき、さらにもう一つのログをとるためのラッパーのためのバッチファイルを用意することになります
  test.bat | tee -a log.txt

もう少しいい方法はないかと質問させていただきました

129 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 11:40:36.48 ]
NanikaSuruA.exe >> log.txt 2>&1
TokubetuNaNanika.exe > output.txt 2>> log.txt

130 名前:124 mailto:sage [2011/03/19(土) 14:34:32.99 ]
>>125
ありがとうございます!

>>126
今後スペースが必要となったらその時自分で勉強して手を加えようとおもいます!



ありがとうございました。


131 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 15:56:21.84 ]
>>128
再帰
if defined flag goto main
setlocal
set flag=1
%0 2>&1 | tee -a log.txt
goto :eof
:main

132 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 18:57:36.42 ]
>>128
ラッパー(test.bat)の中身

NanikaSuruA.exe
NanikaSuruB.exe
TokubetuNaNanika.exe > output.txt

ラッパーの実行方法
test.bat 2>&1 | tee -a log.txt

133 名前:128 mailto:sage [2011/03/20(日) 15:35:57.84 ]
ありがとうございます!
teeというコマンドを使っていたのはファイルと画面にも表示したいのをさっぱり忘れていました
リダイレクトの方法>>129も含めて試してみます

>>129
なるほど、、
自己再帰する手があるのですね

>>132
用意する手間さえどうにかすればラッパーが一番楽そうですね

134 名前:デフォルトの名無しさん [2011/03/23(水) 11:49:37.29 ]
start /B "C:\Program Files\R\R-2.11.1-x64\bin\Rgui.exe" %*

という内容のバッチファイルを書いて実行すると、期待したどうさに
ならずに、コマンドプロンプトのロゴが出てしまいます。
解決策をご教示ください。
よろしくお願いします。





135 名前:デフォルトの名無しさん mailto:sage [2011/03/23(水) 12:20:56.26 ]
お前が期待している動作ってのは何だよ

136 名前:デフォルトの名無しさん mailto:sage [2011/03/23(水) 16:49:02.50 ]
start "title" "C:\Program Files\R\R-2.11.1-x64\bin\Rgui.exe" %*

/Bなんか使うな必要ないだろ

137 名前:デフォルトの名無しさん mailto:sage [2011/03/23(水) 20:44:39.82 ]
>>135
無理すんなw



138 名前:デフォルトの名無しさん [2011/03/23(水) 21:33:06.74 ]
>>136
ありがとうございます。startの引数を誤解していました。

139 名前:デフォルトの名無しさん mailto:sage [2011/03/23(水) 21:47:00.23 ]
そもそもstart使う意味あんの?






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

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

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