1 名前:デフォルトの名無しさん [2008/08/04(月) 23:27:23 ] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。 【前スレ】 (関連スレは>>2 ) 【.cmd】 バッチファイルスクリプト %2 【.bat】 pc11.2ch.net/test/read.cgi/tech/1197881068/
44 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 04:01:42 ] >>40 さすがにISPの時はなかったが オープン系やWeb系開発で英語分からないんです>< って公言してそこで思考停止する奴は腐るほどいる現状。 たいがい老人たちもその口だからそれで免罪符になってしまう。
45 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 13:54:32 ] >>18 sfu使えばええがな
46 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:07:59 ] >>23 LFNに""囲まないで大丈夫か?
47 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 18:09:54 ] >>42 >>45 標準化は嫌、でも標準ツール以上もダメ!な困った会社の仕事。 未だに95,NT3.51〜Vistaまでの色々な環境で動くスクリプトとか言われると、バッチ位なので・・・ 標準で組み込んでくれると数年後に仕事が楽になるお。
48 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:36:52 ] 95のDOS窓とNT以降のコマンドプロンプトじゃ全然別物じゃんw
49 名前:デフォルトの名無しさん [2008/08/10(日) 22:32:16 ] ぜんぜんではないぞ
50 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 22:44:32 ] 95はまだ良い。 NT351が鬼門過ぎる。
51 名前:デフォルトの名無しさん [2008/08/11(月) 00:08:25 ]
52 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:33:25 ] 95は大分駆除されてるけどNT4もまだ結構あるからなぁ
53 名前:デフォルトの名無しさん [2008/08/13(水) 01:46:51 ] rem Perlのワンライナースクリプトを利用して、 rem 複数ファイル中の文字列を置換する rem Wild.pmを使ってワイルドカードを使用できるように環境変数を設定 rem set PERL5OPT=-MWild rem -i.bak ファイルを.bakを付けてバックアップ rem perl -i.拡張子 -pe s/検索文字列/置換文字列/g ファイル名 rem %1 検索文字列 rem %2 置換文字列 rem %3 ファイル名(ワイルドカード使用可能) perl -i.bak -pe s/%1/%2/g %3
54 名前:デフォルトの名無しさん [2008/08/13(水) 01:53:13 ] rem sbrmake.bat @echo off call vcvars32 dir/s/b *.sbr > sbrs.txt echo /n /v /nologo /S stdafx.h /o appname.bsc > sbrs.tmp rem echo /n /v /o appname.bsc > sbrs.tmp for /f "delims=;" %%i in (' dir/s/b *.sbr' ) do @echo "%%i" >> sbrs.tmp bscmake @sbrs.tmp rem del sbrs.tmp pause
55 名前:デフォルトの名無しさん [2008/08/13(水) 02:18:56 ] まだまだ貼るぞぅ
56 名前:デフォルトの名無しさん [2008/08/13(水) 02:24:50 ] >>53 cygwinとかgrepとかない環境用にperlで文字列置換バッチファイル >>54 VC(6以前)のブラウザ情報データベースをメイクするバッチファイル
57 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 11:26:37 ] >>53 >>56 一行野郎(OneLiner)は一行その場で打って使えるから意義があるんであって、 そんなバッチを用意するなんて何が楽しくてperlを使っているんだか判らんな。 ついでに言えば、文字列の置換はcygwinがなくてもできるがgrepではできない。 間抜けなバッチを作る前に基礎知識を身に着けたら? つーか、せめて文字列くらいダブルコーテーションで囲む位しなさいよ。 >54もなんつーか、今更感が強いし。 もしかして、「こんなにバッチファイルを作れて僕ちゃん凄い」なんて勘違いしていないよな。
58 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 11:39:27 ] 夏だな〜 まあ、余程の事がなければPerlとかデフォで使えないコマンドは無しでしょ。 何事もなかったかのように続きよろしく>>56
59 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 11:49:12 ] いや、もういいよ。
60 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 12:48:36 ] >>56 どうせスレも進まないので、じゃんじゃん書き込みおk
61 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 13:10:29 ] 誰も誉めないけどな
62 名前:デフォルトの名無しさん [2008/08/14(木) 02:42:28 ] >>56 が貼らなければあとは荒らしという糞スレですね
63 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 02:45:12 ] どうせこの板はマウスばっかりでコーディングしてる奴らの巣窟
64 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 05:16:49 ] ていうかawkとかならわかるがperlでワンライナーって発想が俺にはなかった PCも速くなってきてるんだな
65 名前:デフォルトの名無しさん [2008/08/14(木) 17:30:00 ]
66 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:19:09 ] デジカメで撮ったjpgファイルをmspaintで開いて上書き保存すれば 容量が少なくなるのですが、画像 001.jpg、画像 002.jpg・・・と 同じフォルダ内にデータが沢山あるので自動処理したいです。 batスクリプトで可能でしょうか?
67 名前:デフォルトの名無しさん [2008/08/14(木) 20:24:11 ] おまえ馬鹿なの?
68 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:24:48 ] >>66 mspaintで開くところまでなら
69 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:41:02 ] >>66 簡単なのはImageMagick(convert.exe)の導入かなぁ。 でもそれって画質落としてるわけだけどほんとにいいのん?
70 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 21:09:20 ] >>66 MSPAINTのJPG圧縮率は結構高くて画質悪い。 容量が小さくなってるのは必要な情報(細かさとか鮮明さといったもの)を 捨ててるからなんだけど、それはわかってるのかな?
71 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:52:32 ] 念のため、横から>70に追加。 JPG変換(保存)時に一度捨ててしまった情報を元に戻す事はできない。 予め元のファイルをどこかにバックアップしてから作業し、処理後のファイルと見比べてから 元のファイルを残すかどうか決めるのであればいいけどね。
72 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 13:23:09 ] IrfanView辺りならバッチ処理があるよ。ImageMagick使うよりは敷居が低いんじゃない?
73 名前:デフォルトの名無しさん [2008/08/16(土) 09:06:51 ] なんか貼れよキモヲタ共
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 w
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に移行するつもりは無い)