1 :
デフォルトの名無しさん :
02/12/23 12:38 Windows版シェルプログラミングみたいなものですな。
2 :
デフォルトの名無しさん :02/12/23 12:41
最近みかけないですね。 昔は良く捕まえて虫かごにいれておいたんですが。
冬休みの宿題は終わりましたか?
4 :
デフォルトの名無しさん :02/12/23 12:43
あぁ、冬休み始まった。始まりましたか?
5 :
デフォルトの名無しさん :02/12/23 12:45
はじめまして〜〜。
良スレ期待あげ
うざいから結論だけ書いて沈めよう。 使用できる命令: DOS内部コマンドとほぼすべての外部コマンド。 使用できる制御構造: IF FOR GOTO 主にバッチファイル専用コマンド: BATKEY PAUSE CHOICE 変数: 使えるがその用途は限りなく少ない。環境変数は使える。 レベル: BASIC以下。プログラミングと呼ぶのも憚られる。 楽しみ方: 他のプログラミング言語と違い大量の制限があるためその制限を超えた何かを作ること。
9 :
デフォルトの名無しさん :02/12/25 08:42
なにがうざいんだか・・・。
11 :
デフォルトの名無しさん :02/12/25 11:34
>>8 pl2batのようなことやると
バッチファイル内にperlのスクリプトかけるから
なんでもできそうやな
近視眼だとそれだけで終わっちゃうけど
>>11 じゃあはじめからperl使えよと。と言う話になったり。
自分が使うならそれでいいんだけど、 他人に使わせる時にいちいちperl -f xxx para para とか書かせるのが。 知識ある人ばっかりじゃないんだから,隠蔽してあげられるところは 隠蔽したほうがね…
14 :
デフォルトの名無しさん :02/12/25 12:14
追記 それならbatではなく実行ファイルにしておけたらいいけど、 できるならばソースはいつでも手が入れられたり覗けるようにするほうが 自分が居なくなったりしても混乱が減らせるでそ。 (退職などで)ツール作って残してくれてる人もいるが、 環境が変わった際に変更できないといちいち車輪を発明しなおさないと いけないのが面倒で… (あと,ジョブセキュリティにするような輩とかもいるし・・・) この形で運用できるのは結構便利だったりする。
>>13 SOSで.com化とか。
ついでにつっこんどくと、perlに-fオプションはない。
>>13 そう言うときのバッチファイルか!
@echo off
perl -f xxx %1 %2
bat2com⇒com2exe ↓ com2txt
>>21 わすれてたyo・・・頭の中にはあったんだがなぁ・・・。
@rem={ perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 goto EXIT } #perl script exit; :EXIT
>>23 ああ、すぐわかるPerlか何かに載ってたなぁ・・・。
いつの間に複数行コメントが使えるようになったんだ。
違った。cygwinのviで作ったんでLFになってた。 でもこれでバッチには無視される行ってできないかな。 @rem = undef; # perl script exit; ^M perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
j
大阪キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
ID:ZBsKvw39 (゚∀゚)アヒャヒャ ID:ZBsKvw39 (゚∀゚)アヒャヒャ ID:ZBsKvw39 (゚∀゚)アヒャヒャ
はじめまして〜〜。
大阪キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
34 :
デフォルトの名無しさん :03/01/09 14:45
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm ようするに上告しても今の制度では100%無駄。 これで完全終了ってことか。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
>>593 同意。いろんな状況があるけど、結局たどり着くところはそこだと思う。
fDUMwxQm、がっかりさせんなよ! 時間の約束が守れない奴はどんなに偉かろうが人間的にもうだめぽ
結構厳しいんです。 正直、コレから5年で5兆日本円(機軸) 稼ぐ事は普通に結構出来ますが 「目先の」 小さな事が僕にとって大事です。 お願いします。 助けを頂きたいのです。かなりヤバイです 一刻の猶予が完全に無いんです 大丈夫でしょうか、 けんすう様(泣
>>539 マジに見える貴方がバッカみたい。
しかし、もう寝るので許すよ。
何を一人でぶつぶつ
Windowsとソフトウェアでまた荒らしが始まった予感。
趣旨は理解しているのだが 空気も趣旨も読めない筋肉あらいぐまに乱入されたら 罵倒合戦になっても致し方あるまい
266 名前:番組の途中ですが名無しです[] 投稿日:03/01/08 19:09 ID:2HVC1UGm この板は中と半端な馬鹿が集まってきているから好き 267 名前:番組の途中ですが名無しです[] 投稿日:03/01/08 19:10 ID:qfaGu+ZB じゃあさトップに閲覧料1分1億円てかいといて訴えられるたびに請求したら良くない?
IPが理解不能な厨には効果ない罠。
全ての板ってことっすか?
今回の件で言論の自由さえも脅かされることになるかも 誰も何も言えない時代が来そうな伊予柑
匿名掲示板の意味を履き違えてる人が多くて萎える。
実際は、トマトしないと変化は少ないだろうね。 ヲチ板を見ればわかるが、基本的に警察・裁判所以外には情 報を出さないということは、相手が事件化させ名前が知れ渡る 可能性があっても敢えて訴えるというほどの決意を持たない限 り大丈夫ってことだから。 だから、当面基本的には変わらないだろ。 尤も、今後そういう訴える奴も増えていくだろうし、 中には刑事事件化するものもでるだろう。 あとはさらなるリスクを冒してまでひろゆきが、 そこまで放置していられるかどうかだろうね。
バカに乗っ取られたマターリスレ晒しage中。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
10
さかだちしながら10げっと
実況板で聞いたんだが、強制ID板では昔から抜かれてたらしいが>IP
快速がレスつけてんの半年ぶりぐらいに見た
IP記録告知以後、2chのどの板も、どのスレも、だいぶ静かになった ような気がする。 今まで如何に無責任な書き込みが多かったかを示しているような 気もするけど、閑散として活気もなくなったような気もする。
おぉーついに… でも全員が閲覧できるわけじゃないから ヤバイこと書き込まなきゃOKなんでしょ?
2002年2ちゃんねるアニメランキング1位のアニメに・・・・ モナーが出演決定!!!!!!!!!!!!!!!!!!!!! <<放送時間>> 1/12 大阪 テレビ大阪 (日)9:30〜10:00 東京 テレビ東京 (日)9:30〜10:00 名古屋 テレビ愛知 (日)9:30〜10:00 福岡 TVQ九州放送 (日)9:30〜10:00 札幌 テレビ北海道 (日)9:30〜10:00 岡山・高松 テレビせとうち (日)9:30〜10:00
荒らしを何とかして〜!!!! また孫悟空だろう。
朝から大変 何て事してくれんのよ キラーって奴は・・・ 戦って守りきりますよ 母は強し
掲示板の書き込みを24時間365日チェックしなさいと言う事だから、規模的 に管理人一人じゃどうしようもない。。が、当然2chだけじゃなく他の掲示板に も大きな問題となる判決だ、、
ちくり裏事情なんかは、WINNY掲示板みたいなWINNY型P2Pにして、 2ちゃんからリンクして拾ってくるようにできんかな?
zD2HIsxl 厨房逝ってよし。
なんか各所で「ブラウザを立ち上げ直してください」とかいうエラーでて書き込めないって 人がいるけど、それって何をするとでるの? 俺は見たこと無い。
(^^)
(^^)
67 :
デフォルトの名無しさん :03/01/16 12:41
板違いでスマンが、 VBSのスレを知りませんか?
(^^)
以後sage進行でおながいします
内部コマンド (Win95) CD COPY CLS CTTY DATE DEL / ERASE DIR ECHO EXIT FOR IF MD / MKDIR PATH PAUSE PROMPT RD /RMDIR REN /RENAME SET SHIFT TIME TYPE VER VOL
外部コマンド ATTRIB CHOICE FORMAT MOVE COMMAND 糞多いので省略
Cとバッチファイルの大きな違い コンパイル不要 特別なソフト不要 数値が扱えない 低速
バッチコマンドを使えると得する事 拡張子などのリネーム作業を大幅に短縮できる ネットワークとかシステムの細かな設定が可能 いわゆるCUIでの操作なのでコマンドを覚えるのが大変(らしい)
@echo off rem /* レジストリ保存 win9x */ rem /* intpathでパス指定、ここでは"?:\" */ set intpath=\ if "%1" == "" goto err cd %intpath% md %1 cd %1 for %%i in (user;system) do \windows\command\attrib -r -s -h \windows\%%i.dat > nul for %%i in (user;system) do copy \windows\%%i.dat goto exit :err echo %%1を指定せよ :exit set intpath= exit これをファイル名を指定して実行のダイアログにドラッグして[space]+フォルダ名でウマー 例 C:\hoge.bat 123456
>>75 > for %%i in (user;system) do \windows\command\attrib -r -s -h \windows\%%i.dat > nul
> for %%i in (user;system) do copy \windows\%%i.dat
セミコロン区切りってできるんだっけ。
>>76 できる。スペースとかカンマでもできるけど、
自分でそれがいいと思うのを使えばいい
@echo off
echo space
for %%i in (1 2 3) do echo %%i
pause >nul
echo ;
for %%i in (1;2;3) do echo %%i
pause >nul
echo ,
for %%i in (1,2,3) do echo %%i
pause >nul
exit
VERIFYも忘れてたな>70
CALL
GOTO
バッチファイルの引数が=で分割されるってのは昔からだっけ?
から
@echo off rem /* レジストリ保存&復元ユーテリティ win9x */ set intpath=\ if "%1" == "/?" goto usage if "%1" == "" goto usage if not exist \windows\command\attrib.exe goto err echo レジストリ保存&復元ユーテリティ win9x echo レジストリを保存作業を開始します. echo 開始ディレクトリは ?:%intpath% です. echo/ for %%i in (user;system) do \windows\command\attrib -r -h -s \windows\%%i.dat echo ?:%intpath%ディレクトリを作成しています... md %intpath%%1 if exist %intpath%%1\*.* del %intpath%%1\*.??? >nul echo/ for %%i in (user;system) do copy \windows\%%i.dat %intpath%%1 > nul echo %intpath%%1へレジストリを保存しました echo 復元ユーテリティをコピーしています... cd %intpath%%1 set p=%% echo @echo off>regback.bat echo rem /* レジストリ保存&復元ユーテリティ win9x */>>regback.bat echo/>>regback.bat echo if not exist \windows\command\attrib.exe goto err>>regback.bat echo echo レジストリ復元ツール>>regback.bat echo echo レジストリを復元します.>>regback.bat echo echo/>>regback.bat echo echo 以前のバックアップファイルを.\backup\に保存します.>>regback.bat
echo for %p%%p%i in (user;system) do \windows\command\attrib -r -h -s \windows\%p%%p%i.dat>>regback.bat echo md backup>>regback.bat echo if exist backup\*.* del backup\*.??? > nul>>regback.bat echo for %p%%p%i in (user;system) do copy \windows\%p%%p%i.dat .\backup > nul>>regback.bat echo echo 以前のバックアップファイルを.\backup\に保存しました.>>regback.bat echo echo/>>regback.bat echo echo レジストリを復元しています...>>regback.bat echo echo 復元中は絶対にウィンドウを閉じないでください.>>regback.bat echo for %p%%p%i in (user;system) do del \windows\%p%%p%i.dat>>regback.bat echo copy *.dat \windows>>regback.bat echo echo レジストリを復元に成功しました.>>regback.bat echo echo レジストリを反映させるには再起動をしてください.>>regback.bat echo goto exit>>regback.bat echo/>>regback.bat echo :err>>regback.bat echo echo エラー: \windows\command\attrib.exeが見つかりません>>regback.bat echo/>>regback.bat echo :exit>>regback.bat echo exit>>regback.bat echo レジストリ保存作業完了しました。 goto exit :err echo エラー: \windows\command\attrib.exeが見つかりません echo/ goto exit :usage echo レジストリ保存&復元ユーテリティ win9x
echo レジストリを保存&復元します echo/ echo ???.bat [フォルダ名] echo/ echo [フォルダ名] 保存したいフォルダの名前を指定します. :exit set p= exit レジストリを復元したりするツールですが
>>86 そうか、ずっとそうだったのか。知らんかったよ。
逝って来る前にもう一つだけ、これって常識?
エミュレータとか使ってないのか?
DOSなんて持ってないよ。
>>8 の内容
>主にバッチファイル専用コマンド:
>BATKEY PAUSE CHOICE
あほ
>92に質問だが、 持ってるOSは何 プログラミング(?暦はどのくらい エスケープシーケンスは使った事があるか
>>94 > 持ってるOSは何
メインはLinux
> プログラミング(?暦はどのくらい
20年くらい
> エスケープシーケンスは使った事があるか
ある。今でもbashのプロンプトに使ったりするし。
>>92 は「DOSなんて(もう)持ってない」ってこと。すまん。
Linuxだったか。最近Phat使ってなかったから、てっきりWinの事だと思ってたYo!スマン
: ALIAS BIND BUILTIN CD COMPGEN CONTINUE DIRS ECHO EVAL EXIT FALSE FG FUNCTION HASH HISTORY JOBS LET LOGOUT PRINTF PWD READONLY SELECT SHIFT SOURCE TEST TRUE TYPESET UMASK UNSET VARIABLES WHILE
>>97 何のbuiltinか知らんが、FGはあってもBGはないのか?
>>98 helpコマンドからそのまま引っ張ったから。
>>99 CygWinの方(一部)
fg [job_spec] for NAME [in WORDS ... ;] do COMMA
for (( exp1; exp2; exp3 )); do COM function NAME { COMMANDS ; } or NA
getopts optstring name [arg] hash [-lr] [-p pathname] [-dt] [na
help [-s] [pattern ...] history [-c] [-d offset] [n] or hi
if COMMANDS; then COMMANDS; [ elif jobs [-lnprs] [jobspec ...] or job
kill [-s sigspec | -n signum | -si let arg [arg ...]
local name[=value] ... logout
popd [+N | -N] [-n] printf format [arguments]
pushd [dir | +N | -N] [-n] pwd [-PL]
read [-ers] [-u fd] [-t timeout] [ readonly [-anf] [name[=value] ...]
return [n] select NAME [in WORDS ... ;] do CO
set [--abefhkmnptuvxBCHP] [-o opti shift [n]
shopt [-pqsu] [-o long-option] opt source filename
suspend [-f] test [expr]
time [-p] PIPELINE times
trap [arg] [signal_spec ...] or tr true
type [-afptP] name [name ...] typeset [-afFirtx] [-p] name[=valu
ulimit [-SHacdflmnpstuv] [limit] umask [-p] [-S] [mode]
unalias [-a] [name ...] unset [-f] [-v] [name ...]
until COMMANDS; do COMMANDS; done variables - Some variable names an
wait [n] while COMMANDS; do COMMANDS; done
{ COMMANDS ; }
ここには他に二人いるのか?
誰の他に?
自分と>103の他
>102の間違い
92==95==98==102なわけだが。
はにゃ〜ん 3人いるらしぃ
97==99==101==103-104だから。
100=106
94==96もいれると4人か?
94==96==97==99==101==103-10
ほんとに3人だけかよ
恐らく
正直、バッチファイルでゲームとか作ってみたいと思ったことがある
>>113 神!!
BATKEYとかあればジャンケンゲームとかくらいなら作れそうな気がするが、こ
れだけやる気をそそられない課題も珍しい。
その後、本気で作ろうとしたんだ。 でも行が数千行にもなって、途中でヤメタ。 もうすぐで完成しそうだけど、それを作り続ける気力が無い…
一体何のゲームを作ろうとしたわけ?
RPGとかアクションは絶対無理だから、クイズかパズルにしようかと思ったが、 なぜか迷路を作ろうとおもたよ
たしかに三択クイズとかならできそうだが、バッチで迷路ってどうやって表示 すんのよ。
迷路の画面というのか?それは外部ファイルを別途用意して type [ファイル名]。 typeコマンドはエスケープシーケンスも読みこんでくれる
最初は全てひとつのファイルでecho沢山使ってたけど、 ファイル自体が大きくなる。そうなると、gotoとか多く使うでしょ。 gotoって、意外と時間かかるから、プレイする時間より待つ時間の方が長くなる。 だからなるべく早く処理するためには、システムファイル(exeとdllに値する部分)と見る部分のファイル (ビットマップに値する部分のファイル)を分離せざるを得ないと思われ。
表示する部分を別のbatにしてcallすればgotoの処理速度低下を抑えられるかな?
gotoは前方への分岐の方が速いってのがあったな。 プロセスの生成+分割されたファイルの読み込みと、 でかい単一ファイルの読み込みのどっちが重いかってことになるのかな。
読みだし速度が遅いフロッピーで動かすといかにgotoの読みだしが遅いかよくわかるよ。 だいたい4-50KB、1500行ぐらいになると厳しいね。 だから、分割はそのくらいで分割してる。 callは設定ファイルを読み込む時に使ってる。
>>124 > だいたい4-50KB、1500行ぐらいになると厳しいね。
それだけ書くってとこで凄すぎ。というか呆れた。
Cとかでも1000行を超えることは結構あることを考えると そのぐらい、どうってことないと思うが
BATKEYじゃなくてCHOICEを使ってる
いや、現在形で聞かれてもなー
j
SET コマンドには、2 つの新しいスイッチが追加されています: SET /A 式 SET /P 変数=[プロンプト文字列] /A スイッチは、等号の右側の文字列が、評価すべき数式であることを 指定します。式の評価はごく単純で、次の操作がサポートされます。 操作は、優先順位の高い順に示されています: () - グループ化 * / % - 算術演算子 + - - 算術演算子 << >> - 論理シフト & - ビット演算子 AND ^ - ビット演算子排他的 OR | - ビット演算子 OR = *= /= %= += -= - 代入 &= ^= |= <<= >>= , - 式の区切り記号
環境変数の置換は、次のように拡張されます: %PATH:文字列1=文字列2% は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列1" を "文字列2" に置き換えます。"文字列2" に空の文字列を指定すると、展開 された出力からすべての "文字列1" を削除することができます。"文字列1" をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分 が最初に現れるまでのすべてを一致させることもできます。
また、展開の副文字列を指定することもできます。 %PATH:~10,5% は、PATH 環境変数を展開し、展開結果の 11 番目 (オフセット 10) の文字 から始まる 5 文字だけを使います。長さが指定されなかった場合は、変数の 値の残りの長さを既定値とします。オフセットまたは長さのどちらかが負の値 の場合、環境変数の値の長さに指定されたオフセットまたは長さを足してその 数を使います。 %PATH:~-10% は、パス変数の最後の10 文字が展開されます。 %PATH:~0,-2% は最後の 2 文字以外のすべてが展開されます。
最後に、遅延環境変数の展開が追加されました。このサポートは常に既定で 無効になっていますが、CMD.EXE の /V: のコマンド ライン スイッチを使 って有効または無効にできます。CMD /? を参照してください。 遅延環境変数の展開は、実行時ではなく、テキスト行を読み取るときに展開 されるという現在の制限を避けるために役立ちます。 次の例は即時変数展開の問題を説明しています。 set VAR=before if "%VAR%" == "before" ( set VAR=after; if "%VAR%" == "after" @echo If you see this, it worked ) この例は、論理的には IF 文が別の IF 文の本体に含まれる複合文なので、 両方の IF 文の %VAR% が、最初の IF 文を読み取ったときに展開されます。 このため、メッセージは決して表示されません。複合分の中の IF では "before" と "after" が比較され、決して等しくはなりません。同様に次の例も期待し たようには動作しません。
set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST% この例では、現在のディレクトリのファイルの一覧は作成されず、代わりに最後 に見つけられたファイルが LIST 変数に設定されます。これは %LIST% が FOR 文 が読み取られるとき、一度だけ展開され、そのときは LIST 変数は、空だからです。 つまり、実際に実行されている FOR ループは for %i in (*) do set LIST= %i で、LIST に最後にみつけられたファイルを設定し続けているだけです。
遅延環境変数の展開では、実行時に環境変数を展開するために異なった文字 (感嘆符)を使うことができます。遅延環境変数の展開が有効な場合、上記の 例は次のように書くと意図したように動作します。 set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo If you see this, it worked ) set LIST= for %i in (*) do set LIST=!LIST! %i echo %LIST%
コマンド拡張機能が有効な場合、SET によって表示される変数の一覧には 現れないいくつかの動的な環境変数があります。これらの変数の値は、変数の 値が展開されるときに動的に計算されます。ユーザーがこれらの名前の変数を 明示的に定義する場合、その定義は下記の動的な定義を無効にします。 %CD% - 現在のディレクトリ文字列に展開します。 %DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。 %TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。 %RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します %ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。 %CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に 展開します。 %CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンドライン に展開します。
FOR /D %変数 IN (セット) DO コマンド [コマンドパラメータ] セットがワイルドカードを含む場合は、ファイル名ではなくディレクトリ名 の一致を指定します。 FOR /R [[ドライブ:]パス] %変数 IN (セット) DO コマンド [コマンドパラメータ] [ドライブ:]パスから始めて、ツリーの各ディレクトリで FOR 文を実行し ます。/R の後にディレクトリが指定されていない場合は、現在の ディレクトリが使用されます。セットが単一のピリオド (.) である場合は、 ディレクトリ ツリーの列挙だけを行います。
ファイル名セットは、1 つ以上のファイル名です。各ファイルが開かれ、読み 取られ、処理されてから、ファイル名セットの次のファイルに進みます。処理 には、ファイルの読み取り、個々のテキスト行への分割と、0 個以上のトークン への解析が含まれます。その後、変数値を見つかったトークン文字列に設定して、 for ループの本体が呼び出されます。既定では、/F は、各ファイルの各行から、 空白で区切られた最初のトークンを渡します。空白行はスキップされます。既定 の解析動作を変更するには、オプションの "オプション" パラメータを指定しま す。これは、異なる解析オプションを指定する 1 つ以上のキーワードを含む、 引用符で囲まれた文字列です。キーワードは、次のとおりです: eol=c - 行末のコメント文字を指定します (1 文字)。 skip=n - ファイルの先頭でスキップする行数を指定します。 delims=xxx - 区切り文字のセットを指定します。これは、既定の 区切り文字であるスペースとタブを置き換えます。 tokens=x,y,m-n - 各繰り返しに対して、各行から for 本体に渡すトー クンを指定します。これにより、追加の変数名が割り当 てられます。m-n の形式は範囲で、m 番目から n 番目の トークンを指定します。tokens= 文字列の最後の文字が アスタリスクである場合は、追加の変数が割り当てられ、 最後のトークンが解析された後、行に含まれている残り のテキストを受け取ります。 usebackq - 次の新しい表示形式を指定します。逆引用符で囲まれた 文字列がコマンドとして実行され、一重引用符で囲まれた 文字列がリテラル文字列コマンドになりファイル名セット のファイル名を二重引用符で囲めるようになります。
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k この例は、myfile.txt の各行を解析します。セミコロンで始まる行を無視し、 各行の 2 番目と 3 番目のトークンを for 本体に渡します。トークンは、カンマ またはスペースで区切られています。for 本体の文が %i で 2 番目のトークン を、%j で 3 番目のトークンを取得し、%k で 3 番目移行のすべてのトークンを 取得していることに注意してください。スペースを含むファイル名に対しては、 二重引用符でファイル名を引用する必要があります。この方法で二重引用符を使う ためには、usebackq オプションを使わなければなりません。使わなければ、二重 引用符はリテラル文字列の定義として解釈され、解析されます。 %i は for 文で明示的に宣言され、%j と %k は tokens= オプションで 暗黙的に宣言されています。tokens= 行を使って 26 個までのトークンを 指定できますが、文字 'z' または 'Z' よりも高い変数を宣言することは できません。FOR 変数名は大文字と小文字を区別し、グローバルなもので あり、一度にアクティブにできるのは合計 52 個までです。 また、カッコで囲んだファイル名セットを一重引用符で囲み、文字列にすることに より、即時の文字列に対する FOR /F 解析ロジックを使うこともできます。 これは、ファイルからの単一入力行として処理されます。 最後に、FOR /F コマンドを使って、コマンド出力を解析することができます。 カッコの中のファイル名セットを逆引用符で囲みます。この文字列は、コマンド ラインとして子 CMD.EXE に渡されます。出力はメモリにキャプチャされ、ファイ ルのように解析されます。 例: FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i この例は、現在の環境の環境変数名を列挙します。
また、FOR 変数参照の置換も拡張されました。 次のオプション構文を使うことができます: %~I - すべての引用句 (") を削除して、I を展開します。 %~fI - %I を完全修飾パス名に展開します。 %~dI - %I をドライブ文字だけに展開します。 %~pI - %I をパス名だけに展開します。 %~nI - %I をファイル名だけに展開します。 %~xI - %I をファイル拡張子だけに展開します。 %~sI - 展開されたパスは短い名前だけを含みます。 %~aI - %I をファイルの属性に展開します。 %~tI - %I ファイルの日付/時刻に展開します。 %~zI - %I ファイルのサイズに展開します。 %~$PATH:I - PATH 環境変数に指定されているディレクトリを 検索し、最初に見つかった完全修飾名に %I を 展開します。 環境変数名が定義されていない場合、または検索 してもファイルが見つからなかった場合は、この 修飾子を指定すると空の文字列に展開されます。 修飾子を組み合わせて、複合結果を得ることもできます: %~dpI - %I をドライブ文字とパスだけに展開します。 %~nxI - %I をファイル名と拡張子だけに展開します。 %~fsI - %I を完全なパスと短い名前だけに展開します。 %~dp$PATH:i - PATH 環境変数に指定されているディレクトリを 検索して %I を探し、最初に見つかったファイル のドライブ文字とパスだけに展開します。 %~ftzaI - %I を DIR コマンドの出力行のように展開します。
>>130-140 バッチファイルプログラミング Win2K(NT?)以上ならかなりいけます。
珍しく人がいる
@echo off echo 三角形の面積 set /p a=底辺入力? set /p b=高さ入力? set /a c=a*b/2 echo %c%
※cmd /V:ONでコマンドプロンプトを起動すること @echo off echo 先頭文字だけ小文字→大文字変換 set /p str=アルファベット入力? set ch=%str:~0,1% set lower=abcdefghijklmnopqrstuvwxyz set upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ for /L %%i in (0,1,25) do call :uppercase_loop %%i echo %ch%%str:~1% goto :eof :uppercase_loop set l=!lower:~%1,1! set u=!upper:~%1,1! set ch=!ch:%l%=%u%!
CSV→HTML変換 @echo off echo ^<table^> FOR /F "eol=; tokens=1,2,3 delims=, " %%i in (test.csv) do echo ^<tr^> ^<td^>%%i^</td^> ^<td^>%%j^</td^> ^<td^>%%k^</td^> ^</tr^> echo ^</table^> test.csvの中身 商品,値段,個数 りんご,80,10 みかん,90,20 ばなな,100,30
146 :
デフォルトの名無しさん :03/02/27 19:21
バッチファイル最強説
147 :
デフォルトの名無しさん :03/02/27 22:22
WSH対抗上げ
対抗というより共存だろうな
149 :
ジャンケンゲーム :03/03/01 10:30
※cmd /V:ONでコマンドプロンプトを起動すること @echo off&echo ジャンケンゲーム&set win=0&set lose=0&set player=&set cpu=&set msg=1 set name1=グー&set name2=チョキ&set name3=パー&set msg_name1=ジャンケン?&set msg_name2=あいこで?&set err_msg=入力エラー set t11=draw&set t12=win&set t13=lose&set t21=lose&set t22=draw&set t23=win&set t31=win&set t32=lose&set t33=draw :start set player=&set /p player=!msg_name%msg%!(1:%name1% 2:%name2% 3:%name3% 9:終了) &set /a cpu=%random% / 10923 + 1 if /%player% EQU /9 (echo 結果&echo 勝ち:%win% 負け:%lose%&goto :EOF) else if /%player% LSS /1 (echo %err_msg%&goto :start) else if /%player% GTR /3 (echo %err_msg%&goto :start) goto !t%player%%cpu%! :win echo 勝ち プレイヤー:!name%player%! CPU:!name%cpu%!&set /a win+=1&set msg=1&goto :start :lose echo 負け プレイヤー:!name%player%! CPU:!name%cpu%!&set /a lose+=1&set msg=1&goto :start :draw echo あいこ プレイヤー:!name%player%! CPU:!name%cpu%!&set msg=2&goto :start
あいこーーーーーーー(TT) (謎)
152 :
デフォルトの名無しさん :03/03/01 22:00
せっかくジャンプテーブルもどきまで使ったのにレスつかないと寂しいな。
153 :
デフォルトの名無しさん :03/03/03 12:12
:1 @echo off echo 人 echo ( ) echo ヽ(・∀・)ノウンコー goto 1
@echo off :# echo pause goto #
四則演算ライブラリ作りますた。 一桁 x 一桁までの演算ができまつ。 ---------------------------------------------------- @echo off find "_%3_%4_" calc.bat | find "_%3_%4_">calc2.bat rem echo %%1=%1, %%2=%2, %%3=%3, %%4=%4, %%5=%5, if "%1"=="ADD" echo set %2=%%2>calc3.bat if "%1"=="SUB" echo set %2=%%3>>calc3.bat if "%1"=="MUL" echo set %2=%%4>>calc3.bat if "%1"=="DIV" echo set %2=%%5>>calc3.bat if "%1"=="CMP" echo set %2=%%6>>calc3.bat if "%1"=="CMP" echo if "%%6"=="" set %2=-1>>calc3.bat call calc2.bat calc3 del calc2.bat del calc3.bat goto END :---DATA--- %1 _0_0_ 0 0 0 255 0 %1 _0_1_ 1 -1 0 0 %1 _0_2_ 2 -2 0 0 %1 _0_3_ 3 -3 0 0 %1 _0_4_ 4 -4 0 0 %1 _0_5_ 5 -5 0 0 %1 _0_6_ 6 -6 0 0 %1 _0_7_ 7 -7 0 0 %1 _0_8_ 8 -8 0 0 %1 _0_9_ 9 -9 0 0
%1 _1_0_ 1 1 0 255 1 %1 _1_1_ 2 0 1 1 0 %1 _1_2_ 3 -1 2 0 %1 _1_3_ 4 -2 3 0 %1 _1_4_ 5 -3 4 0 %1 _1_5_ 6 -4 5 0 %1 _1_6_ 7 -5 6 0 %1 _1_7_ 8 -6 7 0 %1 _1_8_ 9 -7 8 0 %1 _1_9_ 10 -8 9 0 %1 _2_0_ 2 2 0 255 1 %1 _2_1_ 3 1 2 2 1 %1 _2_2_ 4 0 4 1 0 %1 _2_3_ 5 -1 6 0 %1 _2_4_ 6 -2 8 0 %1 _2_5_ 7 -3 10 0 %1 _2_6_ 8 -4 12 0 %1 _2_7_ 9 -5 14 0 %1 _2_8_ 10 -6 16 0 %1 _2_9_ 11 -7 18 0
%1 _3_0_ 3 3 0 255 1 %1 _3_1_ 4 2 3 3 1 %1 _3_2_ 5 1 6 1 1 %1 _3_3_ 6 0 9 1 0 %1 _3_4_ 7 -1 12 0 %1 _3_5_ 8 -2 15 0 %1 _3_6_ 9 -3 18 0 %1 _3_7_ 10 -4 21 0 %1 _3_8_ 11 -5 24 0 %1 _3_9_ 12 -6 27 0 %1 _4_0_ 4 4 0 255 1 %1 _4_1_ 5 3 4 4 1 %1 _4_2_ 6 2 8 2 1 %1 _4_3_ 7 1 12 1 1 %1 _4_4_ 8 0 16 1 0 %1 _4_5_ 9 -1 20 0 %1 _4_6_ 10 -2 24 0 %1 _4_7_ 11 -3 28 0 %1 _4_8_ 12 -4 32 0 %1 _4_9_ 13 -5 36 0
%1 _5_0_ 5 5 0 255 1 %1 _5_1_ 6 4 5 5 1 %1 _5_2_ 7 3 10 2 1 %1 _5_3_ 8 2 15 1 1 %1 _5_4_ 9 1 20 1 1 %1 _5_5_ 10 0 25 1 0 %1 _5_6_ 11 -1 30 0 %1 _5_7_ 12 -2 35 0 %1 _5_8_ 13 -3 40 0 %1 _5_9_ 14 -4 45 0 %1 _6_0_ 6 6 0 255 1 %1 _6_1_ 7 5 6 6 1 %1 _6_2_ 8 4 12 3 1 %1 _6_3_ 9 3 18 2 1 %1 _6_4_ 10 2 24 1 1 %1 _6_5_ 11 1 30 1 1 %1 _6_6_ 12 0 36 1 0 %1 _6_7_ 13 -1 42 0 %1 _6_8_ 14 -2 48 0 %1 _6_9_ 15 -3 54 0
%1 _7_0_ 7 7 0 255 1 %1 _7_1_ 8 6 7 7 1 %1 _7_2_ 9 5 14 3 1 %1 _7_3_ 10 4 21 2 1 %1 _7_4_ 11 3 28 1 1 %1 _7_5_ 12 2 35 1 1 %1 _7_6_ 13 1 42 1 1 %1 _7_7_ 14 0 49 1 0 %1 _7_8_ 15 -1 56 0 %1 _7_9_ 16 -2 63 0 %1 _8_0_ 8 8 0 255 1 %1 _8_1_ 9 7 8 8 1 %1 _8_2_ 10 6 16 4 1 %1 _8_3_ 11 5 24 2 1 %1 _8_4_ 12 4 32 2 1 %1 _8_5_ 13 3 40 1 1 %1 _8_6_ 14 2 48 1 1 %1 _8_7_ 15 1 56 1 1 %1 _8_8_ 16 0 64 1 0 %1 _8_9_ 17 -1 72 0
%1 _9_0_ 9 9 0 255 1 %1 _9_1_ 10 8 9 9 1 %1 _9_2_ 11 7 18 4 1 %1 _9_3_ 12 6 27 3 1 %1 _9_4_ 13 5 36 2 1 %1 _9_5_ 14 4 45 1 1 %1 _9_6_ 15 3 54 1 1 %1 _9_7_ 16 2 63 1 1 %1 _9_8_ 17 1 72 1 1 %1 _9_9_ 18 0 81 1 0 :END
calc.bat を使用したサンプルプログラムでつ。 ---------------------------------------------------- @echo off set Y=0 :Yloop set X=0 :Xloop call calc ADD ret %Y% %X% echo calc ADD ret %Y% %X% ret = %ret% call calc SUB ret %Y% %X% echo calc SUB ret %Y% %X% ret = %ret% call calc MUL ret %Y% %X% echo calc MUL ret %Y% %X% ret = %ret% call calc DIV ret %Y% %X% echo calc DIV ret %Y% %X% ret = %ret% call calc CMP ret %Y% %X% echo calc CMP ret %Y% %X% ret = %ret% call calc ADD X %X% 1 if not "%X%"=="10" goto Xloop call calc ADD Y %Y% 1 if not "%Y%"=="10" goto Yloop ---------------------------------------------------- 以上、連張りスマソ
162 :
デフォルトの名無しさん :03/03/07 02:19
>>149 cmd.exeってすごいな
むむ、対抗して、dos3でも動くようにできないものか・・
マジでけた・・・ まだdos3で実験はしていないけど -------------------- echo off >nul if NOT "%1"=="" goto %1 echo じゃんけんゲーム set win= set lose= >player.bat :STA echo goo か choki か pa と打ち込んで ctrl+z の後 enter を押してください。 copy con jyanken.POI >nul dir jyanken.POI|find "JYANKEN" >tmp.bat tmp.bat :POI set player=ERR if %2==3 set player=グー if %2==5 set player=チョキ if %2==2 set player=パー if %player%==ERR echo 入力エラー if %player%==ERR goto STA echo %4_ | find "0_ ">jyanken.GOO echo %4_ | find "1_ ">>jyanken.GOO echo %4_ | find "2_ ">>jyanken.GOO echo %4_ | find "3_ ">jyanken.CHO echo %4_ | find "4_" >>jyanken.CHO echo %4_ | find "5_" >>jyanken.CHO dir jyanken.GOO|find "JYANKEN">tmp.bat tmp.bat
:GOO set com=パー if NOT %2==0 set com=グー dir jyanken.CHO|find "JYANKEN">tmp.bat tmp.bat :CHO if NOT %2==0 set com=チョキ :JUDGE echo あなた=%player% com=%com% if %player%==%com% echo あいこでしょ! if %player%==%com% goto STA set jud=負け if %player%==グー if %com%==チョキ set jud=勝ち if %player%==チョキ if %com%==パー set jud=勝ち if %jud%==負け set lose=★%lose% if %jud%==勝ち set win=☆%win% echo あなたの%jud%です!(勝ち数=%win% 負け数=%lose%) goto STA
乱数の品質に問題があったので修正。(2/2)も☆と★の色が逆だな・・(鬱 でも今のままだと分単位でしかcomの手が変わらないんよね。 もっとまともな乱数がほすぃ(泣) ------------------- echo off >nul if NOT "%1"=="" goto %1 echo じゃんけんゲーム set win= set lose= >player.bat :STA echo goo か choki か pa と打ち込んで ctrl+z の後 enter を押してください。 copy con jyanken.POI >nul dir jyanken.POI|find "JYANKEN" >tmp.bat tmp.bat :POI set player=ERR if %2==3 set player=グー if %2==5 set player=チョキ if %2==2 set player=パー if %player%==ERR echo 入力エラー if %player%==ERR goto STA echo %4_ | find "0_ ">jyanken.GOO echo %4_ | find "3_ ">>jyanken.GOO echo %4_ | find "8_ ">>jyanken.GOO echo %4_ | find "1_ ">jyanken.CHO echo %4_ | find "5_" >>jyanken.CHO echo %4_ | find "7_" >>jyanken.CHO dir jyanken.GOO|find "JYANKEN">tmp.bat tmp.bat
>>165 まだ乱数生成にバグがありました。comがグーを出してこない。
以下のように4行修正してください。( " の位置が間違っている)
----------------------------------
echo %4_ | find "0_" >jyanken.GOO
echo %4_ | find "3_" >>jyanken.GOO
echo %4_ | find "8_" >>jyanken.GOO
echo %4_ | find "1_" >jyanken.CHO
あと、動作には関係ないけど以下の1行は不要
----------------------------------
>player.bat
cmdでけっこう遊べるな。 w2k入れたから試してみるか
168 :
デフォルトの名無しさん :03/03/07 16:47
バッチファイルでテキストファイルの編集とかできますか?
>>145 のCSV→HTML変換も一種のテキストファイルの編集だが。
バッチファイルでエディタでも作るのか?
ラインエディタなら作れそうな気がします。
XMLも編集ができそうだ
公開日:95.12.22って、ずいぶん古いな
このスレに感動した。
BUとBATCPはバッチプログラマの必需品だろ。
177 :
デフォルトの名無しさん :03/03/08 17:02
pifファイルを使わずに全画面表示で実行させる方法ありますか?
echo off>nul if NOT EXIST BATED.RDY goto 1ST if NOT "%1"=="" goto %1 set LST=0 del *.LIN cls echo --ラインエディタ(新規ファイル専用)-- :STA echo [現在の行数は%LST%です] echo コマンドと ctrl+z の後 enterを押してください (h ・・・ヘルプ) copy BATED.RDY+con tmp.bat>nul tmp.bat CMD :CMD set ST=%3 set ED=%4 if %2==h goto HELP if %2==l goto LIST if %2==d goto DEL if %2==e goto EDIT if %2==s goto SAVE if %2==q goto END goto STA :LIST if "%ST%"=="" set ST=0 if "%ED%"=="" set ED=%LST% set Q=%ST% set A=Q set RET=LIST2
:LIST2 if NOT EXIST %Q%.LIN goto STA echo [%Q%行目] type %Q%.LIN if %Q%==%ED% goto STA if %Q%==10 goto STA goto ADD :EDIT if %LST%==10 echo これ以上行を増やせません if %LST%==10 goto STA if "%ST%"=="" set ST=%LST% if %ST%==%LST% goto EDIT4 :EDIT2 set I=%LST% set Q=%LST% set A=Q set RET=EDIT3 goto DEC :EDIT3 if EXIST %Q%.LIN type %Q%.LIN>%I%.LIN if "%Q%"=="%ST%" goto EDIT4 set I=%Q% goto DEC
:EDIT4 echo ---行内容と ctrl+z の後 enterを押してください type CON|find/v "">%ST%.LIN if NOT EXIST %ST%.LIN goto STA set Q=%LST% set A=LST set RET=STA goto ADD :DEL set Q=%LST% set A=LST set RET=DEL1 goto DEC if "%ST%"=="" ST=%LST% if EXIST %ST%.LIN del %ST%.LIN>nul set I=%ST% set Q=%ST% set A=Q set RET=DEL2 goto ADD :DEL2 if %I%==%LST% goto STA if EXIST %Q%.LIN ren %Q%.LIN %I%.LIN set I=%Q% goto ADD
:SAVE if "%3"=="" echo ファイル名が指定されていません if "%3"=="" goto STA set Q=0 set A=Q set RET=SAVE1 if EXIST %3 del %3 :SAVE1 if EXIST %Q%.LIN type %Q%.LIN>>%3 if %Q%==9 goto SAVE2 goto ADD :SAVE2 echo ファイル[%3]に保存しました goto STA :ADD if "%Q%"=="10" set %A%=0 if "%Q%"=="9" set %A%=10 if "%Q%"=="8" set %A%=9 if "%Q%"=="7" set %A%=8 if "%Q%"=="6" set %A%=7 if "%Q%"=="5" set %A%=6 if "%Q%"=="4" set %A%=5 if "%Q%"=="3" set %A%=4 if "%Q%"=="2" set %A%=3 if "%Q%"=="1" set %A%=2 if "%Q%"=="0" set %A%=1 if "%Q%"=="" set %A%=1 goto %RET%
:DEC if "%Q%"=="" set %A%=0 if "%Q%"=="1" set %A%=0 if "%Q%"=="2" set %A%=1 if "%Q%"=="3" set %A%=2 if "%Q%"=="4" set %A%=3 if "%Q%"=="5" set %A%=4 if "%Q%"=="6" set %A%=5 if "%Q%"=="7" set %A%=6 if "%Q%"=="8" set %A%=7 if "%Q%"=="9" set %A%=8 if "%Q%"=="10" set %A%=9 goto %RET% :1ST cls echo 初回起動なので、必要な準備を行います。 echo "BATED %%1 " と入力して ctrl+z の後 enter を押してください。 echo ("は入力しません。%%1の後のスペース1つを忘れないで下さい。) copy con BATED.RDY>nul dir BATED.RDY|find "RDY"|find/v "\">tmp.bat tmp.bat :RDY if %2==9 BATED echo もう一度正確にお願いします。 goto 1ST
:HELP echo ---コマンド一覧表(#は行番号 0〜9)--- echo l # # ・・・行表示 echo d # ・・・行削除 echo e # ・・・行入力・挿入(#省略時は最終行として追加) echo s ファイル名・・・ファイル保存 echo q ・・・終了 goto STA :END del *.LIN>nul del *.tmp>nul set ST= set ED= set LST= set I= set Q= set A=
ラインエディタ作りますた! 疲れたふー 基本的なコマンドしか使っていないので、dos3にも対応。 新規ファイルの編集と保存だけができます 既存ファイルの読み込みは不可
185 :
デフォルトの名無しさん :03/03/08 17:27
HSPユーザーより酷いな。 このスレ。
行削除に大バグが・・・ 以下の部分を差し替えてくださいn(_ _)n ----------------------- :DEL set Q=%LST% set A=LST set RET=DEL1 goto DEC :DEL1 if "%ST%"=="" set ST=%LST% if EXIST %ST%.LIN del %ST%.LIN>nul set I=%ST% set Q=%ST% set A=Q set RET=DEL2 goto ADD :DEL2 if %I%==%LST% goto STA if EXIST %Q%.LIN ren %Q%.LIN %I%.LIN set I=%Q% goto ADD :SAVE
>>177 >pifファイルを使わずに全画面表示で実行させる方法ありますか?
\windows\command にある start.exe で可能。
オプションなしで実行すればヘルプが出ます。
>>177 ゴメン、最大化じゃなくて全画面か。
分からん・・・
@echo off :: 9x/meでdos/vしか無理 echo [=18h echo IEでコピペ pause >nul exit
>>189 でけたーヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
ありがd!
感動したョ! 何か他にもないの? Win専用
>>191 こんなの作った。DOS窓をAlt+Enterで全画面にしてからお願い
@echo off
rem 全画面表示がうまくいかないのでコメントアウト
rem ↓どなたかうまく行くようにしてくんなまし
rem echo [=18h
echo [f[;37;44m[K
echo [K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K
echo [K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K[1B[K
echo [10;37f[;34;47m Windows [1;37;44m
echo [1B[6C例外 06 が 0000:00000017 で発生しました。
echo [6C現在のアプリケーションを終了します。
echo [1B[6C* どれかキーを押すと、現在のアプリケーションは強制終了されます。
echo [6C* Ctrl+Alt+Del キーをもう一度押すと、コンピュータが再起動します。
echo [9Cアプリケーションで保存していないデータは全て失われます。
echo [1B[28Cどれかキーを押すと, 続行します.
echo [4B
pause >nul
しまった… [ を b;[ に置換して それとWindowsフォルダ内のMsdosdrv.txtにいろいろ載ってるから読んでみ
[ だった…シパーイ
echoで > を表示する方法きぼんぬ
>>195 ""で括れば一応表示されるようだが""も表示される
>>195 cmd.exeならecho ^>。command.comではできないような気がする。
>>195 確かdos3は>>>で出来たよ
dos5以降ではできない
dos4は不明
もうそろそろバッチファイルをプログラミング言語として認めていいのではないかと思う。
Win2k で for とかだいぶ強くなったけど、まだまだ Unix のシェルほどは プログラム書けんがな。
>>201 まぁ IF, FOR, GOTO があればフローだけなら根性で書けるかもしれんが。
外部コマンド類は追加しないと標準搭載分だけじゃきつくね?
> まぁ IF, FOR, GOTO があればフローだけなら根性で書けるかもしれんが。 CALLを忘れてもらっては困る。 > 外部コマンド類は追加しないと標準搭載分だけじゃきつくね? それはUnixのシェルでも同じだ。
>>203 外部コマンド追加!(NEC-PC98xx専用)
@echo エLヘ!>reboot.com
@reboot.com
でもこういうのって無粋な気がするのよねぇ・・
おっと間違えた 203・・× 202・・○
CALLはオマケみたいなもので、無きゃ無いで同じことは出来ますよ(ぉ! それより、間接参照もどきが使える点で、かなり救われているよね。 %の変数類は一旦展開されて、それから1行として実行されるので、 VBのByRefとか、C++のバーチャル関数みたいな事も何気に可能。 universal.bat -------------- %1 %2 %4 %5 main.bat -------------- if NOT "%1"=="" goto LABEL echo テスト1 universal.bat echo テスト2 main.bat LABEL :LABEL echo テスト3
>>206 universal.bat
--------------
%1 %2
%4 %5× → %3 %4○
たしかにfor /f "usebackq"とかはずいぶん強化されてるけど、 この超DQN仕様はなんなんだよ。
ECHO OFF CLS ECHO [1C[1C[1B[1B[s CLS SET BAK=|SET BX=|SET BY=|SET XF=|SET YF=[1B|TYPE X.TXT :FOR SET BX=%BX%%XF%|SET BY=%BY%%YF%|ECHO [u%BAK% [u%BX%%XF%%BY%%YF%o SET BAK=%BX%%BY%|IF NOT "%BX%" == "" GOTO NXR SET XF=|ECHO :NXR IF NOT "%BX%" == "" GOTO NXL SET XF=|SET BX=|ECHO :NXL IF "%BY%" == "[1B[1B[1B[1B[1B[1B[1B[1B[1B[1B" GOTO OUT IF "%BX%" == "" GOTO NYD IF "%BX%" == "" GOTO NYD IF NOT "%BY%" == "[1B[1B[1B[1B[1B" GOTO NYD SET YF=[1A|ECHO :NYD IF NOT "%BY%" == "[1B[1B[1B[1B[1B[1A[1A[1A[1A[1A" GOTO FOR SET YF=[1B|SET BY=|ECHO GOTO FOR :OUT GOTO FOR|SET BY=|ECHO [u%BAK%o[u%BAK% [u%BAK%o[u%BAK% [u%BAK%o[u%BAK%
210 :
block.bat (コピペ失敗やり直し) :03/03/11 05:42
ECHO OFF CLS ECHO [1C[1C[1B[1B[s CLS SET BAK=|SET BX=|SET BY=|SET XF=|SET YF=[1B|TYPE BLOCK.TXT :FOR SET BX=%BX%%XF%|SET BY=%BY%%YF%|ECHO [u%BAK% [u%BX%%XF%%BY%%YF%o SET BAK=%BX%%BY%|IF NOT "%BX%" == "" GOTO NXR SET XF=|ECHO :NXR IF NOT "%BX%" == "" GOTO NXL SET XF=|SET BX=|ECHO :NXL IF "%BY%" == "[1B[1B[1B[1B[1B[1B[1B[1B[1B[1B" GOTO OUT IF "%BX%" == "" GOTO NYD IF "%BX%" == "" GOTO NYD IF NOT "%BY%" == "[1B[1B[1B[1B[1B" GOTO NYD SET YF=[1A|ECHO :NYD IF NOT "%BY%" == "[1B[1B[1B[1B[1B[1A[1A[1A[1A[1A" GOTO FOR SET YF=[1B|SET BY=|ECHO GOTO FOR :OUT GOTO FOR|SET BY=|ECHO [u%BAK%o[u%BAK% [u%BAK%o[u%BAK% [u%BAK%o[u%BAK%
コントロールコードの、コピペってどうやるのでつか・・・
>>192-193 Thanx!
WindowsMeには、dosdrv.txtが無いみたいです。
Windows98SEを漁ったらありました。名書。
例外イイ!
載ってなさそうなものを出してみる。これで合ってるよな 9x/Me PC-AT/PC-98 esc= esc[0J:カーソル位置から下の部分クリア。0は省略可 esc[1J:カーソル位置から上の部分クリア esc[2J:全体をクリア。カーソルは左上の位置に移動 esc[0K:カーソルの位置から行の右端までクリア。0省略可 esc[1K:カーソルの位置から行の左端までクリア esc[2K:行クリア esc[nM:カーソル位置からn行削除して下の行をつめる。1行だけの場合省略可 esc[nL:カーソル位置からn行削除して下の行をつめる。1行だけの場合省略可 esc D:カーソルが1行下に移動。カーソルが一番下にある場合スクロールアップ esc E:カーソルが1行下の左に移動。カーソルが一番下にある場合スクロールアップ esc M:カーソルが1行上に移動。カーソルが一番下にある場合スクロールダウン esc[6n:カーソル位置のconによる呼び出し esc[;8mesc"[>5hesc"esc[2Desc[m:カーソル消去(カーソルが左端の場合のみ) esc[;8mesc"[>5lesc"esc[2Desc[m:カーソル復帰(カーソルが左端の場合のみ)
それとesc[;nm;を使用する場合、AT/98により出力のされ方が違う。 98の場合、背景色と前景色の同時出力ができない ATの場合、アンダーラインが使用できない。コートページが932(日本語)だと点滅できない 最大化のesc[=nhは、98では使用できない 最大化するとATの場合、背景色と前景色の同時出力ができない。 98とATの互換性を保つため、[の後に;をつける事をしたほうがいい。esc[;nm;
× esc[nL:カーソル位置からn行削除して下の行をつめる。1行だけの場合省略可 ○ esc[nL:カーソル位置からn行空白行を挿入。1行だけの場合省略可
〜=┌┐└┘│─ =↓、=四角の中に× =黒点、=太陽みたいなマーク =┼、=上下に伸びた矢印(↕) =濃いアミカケ(▓?) 〜、=┴┬┤├ =薄いアミカケ(░?) 〜=↲↑|→←
訂正 ×░ ○░
219 :
デフォルトの名無しさん :03/03/11 23:26
NTもANSI.SYS使ったら同じようなのできるのだろうか?
CコンパイラだったらCONFIG.NTにANSI.SYSを書き加えればいいらしいが、 BAT/CMDは無理っぽいが。誰か詳しく希望
テキストファイルに文をついかするのってバッチファイrでできますか?
>>221 type con>ファイル名
最後はCtrl+ZのあとにEnter
あっ、追加だったか
>>222 >>223 すげ!簡単そうですね。
次のような事をプログラムを組んでやってたのを、バッチファイルでできるならしたいです。
D&Dされたファイル1のファイル名をファイル2の内容に書いて、
そのファイル2の名前を「ファイル1のファイル名」+「.avs」として出力。
こんなことをしたいのですが、バッチファイルでできそうですか?
echo %1 > %2 echo %2 > %1.avs
>>226 > D&Dされたファイル1のファイル名をファイル2の内容に書いて、
> そのファイル2の名前を「ファイル1のファイル名」+「.avs」として出力。
意味がわからん。
>>227 すげー!みじけー!っと思ったけどうまくできなかったです。
>>228 すいません。
バッチファイル A.bat
ファイル名 内容
ファイル1 aaa.txt
ファイル2 aaa.txt.avs(aaa.avsでもいい) F:\aaa.txt(フルパス)
ファイル1をA.batにD&Dすると、ファイル2ができる、そんなA.batが作りたいです。
echo %1 >%1.avs これでできました。
>>229 とりあえずバッチファイルでできる。
NTならファイル2のファイル名はaaa.avsにできるが
9xはaaa.txt.avsじゃないといけないかもしれない。
D&Dに複数のファイルを指定できるならforやshiftを使わなきゃいけない。
とりあえず単一のファイルでaaa.txt.avsとして出力するバッチファイルは
echo %1 > %1.avs
あとは少し自分で考えてみれ。Windowsのヘルプやコマンド名 /?でヘルプが見れるから。
と書いている間に
>>230 というレスをされた。シクシク
ファイル名の変換バッチを作ってるのですが、 %~t1 は 03/03/10 17:47 というふうになりますが、 これを 03.03.10 とするにはどうすればよいでしょうか?
やっぱ日本語へんかなぁ? 書き直します。 %~t1の内容をバッチファイル内で編集して 03/03/10 17:47 を 03.03.10 にしたいです。 それをファイル名につけるのですが、 ファイル名のつけ方や新しい変数の設定や代入はわかるのですが、 %~t1の中の前から8文字を取り出し、/を削除する方法はどうすればいいでしょうか?
「やっぱ」は余計でした。
>%~t1の中の前から8文字を取り出し、/を削除する方法はどうすればいいでしょうか? %~t1の中の前から8文字を取り出し、/を . に置換する方法はどうすればいいでしょうか?
>>221 『for221.bat 03/03/10』で、『03.03.10』を出力しまつ。
---------
echo off
if "%1"=="CMD" goto %2
for221 CMD STA %1 %2
:STA
set work=%3|set cnt=|set stk=|set ans=|set sep=/|set chg=.
:LOOP1
set a=0|set RET=LOOP2
:LOOP2
echo for221 CMD MATCH _%work% |find "_%stk%%a%" >tmp.bat
echo for221 CMD NEXT >>tmp.bat
tmp.bat
:NEXT
set q=%a%|for221 CMD SFT 0 1 2 3 4 5 6 7 8 9 10
:MATCH
set stk=%stk%%a%|set ans=%ans%%a%|set cnt=%cnt%o
if "%cnt%"=="oo" goto SS|if "%cnt%"=="oooo" goto SS|if "%cnt%"=="oooooo" goto END
goto LOOP2
:SS
set stk=%stk%%sep%|set ans=%ans%%chg%
goto LOOP1
:SFT
shift|if NOT %2==%q% goto SFT|set a=%3|if %2==%q% goto %RET%
:END
echo %ans%
>>238 おおおおおおおおおおお!!
ありがとうございます!
勉強します
240 :
デフォルトの名無しさん :03/03/12 11:30
かちゅ〜しゃのkakikomi.txtとcookies.txt の中身をdeleteするバッチが欲しいんですが。 ソースコードを下さい、お願いします。
>>240 スレ違い。
ここは「バッチファイル * プ ロ グ ラ ミ ン グ * 質問スレ」です。
>>221 NT系だろ? だったら%ENV:~0,8%で前から8文字を取り出せる。
ちなみに %ENV:~1,8% だと1文字目から8文字
%ENV:~-8% だと後ろから8文字
さらに %ENV:/=.% で/を.に変換できる
>>240 中味だけ全部消したいんだったら
copy nul kakikomi.txt
copy nul cookies.txt
244 :
デフォルトの名無しさん :03/03/12 16:25
レスありがとうございます。 >243 copy nul パス名\kakikomi.txt としましたが構文が不正です。となってしまいました。 どこがマズいのでしょうか?
とりあえずOS書け
>245 winXP HomeEditionです。 パスが長すぎとかフォルダ名に空白がある(my document)とかが問題 なのでしょうか?
> フォルダ名に空白がある(my document)とかが問題 です。"でくくれ。あと悩んだらcopy /?を実行しろ。
>247 ありがとうございます。
>>238 >>221 1日越しのバグ、最後の桁が抜ける。『03.03.1』
goto LOOP2 ・・・×
goto LOOP1 ・・・○
NT系OSからANSI.SYSを起動させる方法 //is-it-true.org/nt/utips/utips181.shtml command.comのショートカットをどこでもいいから作成する CONFIG.NTの複製ANSI.NT(ここではANSI.NTとする)を作成する そのANSI.NTにこう付け加える dosonly device=%SystemRoot%\system32\ansi.sys command.comショートカットのプロパティを開きプログラムタブの詳細設定を開く CONFIGのファイル名にansi.ntファイルを指定する 実行時のディレクトリと動かしたいコマンドライン(バッチファイル)を指定する ショートカットを実行すればansi.sysが利用できる
>>251 バッチファイル名を与えるとそのショートカットを作るバッチきぼん
>バッチファイル名を与えるとそのショートカットを作るバッチきぼん バッチでやる仕事か?WSHで出来そうだが
細かな指示はできない
自前でバイナリ解析
win2kのcommand.comからsetコマンドで環境変数取得できないな
257 :
デフォルトの名無しさん :03/03/16 01:42
>>244 こっちのが
echo|find "a">file名
>>256 げ、じゃあ、これが使えない・・(command /e:#### の値を決めるのに便利なツール)
----------------------
echo off
if NOT "%1"=="" goto 2
set >envsize.tmp
dir envsize.tmp|find "TMP"|find/v "\">tmp.bat
tmp.bat
:2
echo 現在環境変数を、約%2バイト使用しています.
del envsize.tmp>nul
del tmp.bat>nul
>>259 command /cでコマンドを実行させると大丈夫みたいです
中断してたやつの続きをなんとなく作り始めてみるテスト
262 :
デフォルトの名無しさん :03/03/23 04:50
うい、がんばれー、と応援してみるテスト
263 :
デフォルトの名無しさん :03/03/28 12:11
クリップボードにある文字列をあらわす%1みたいなものってありますか?
264 :
保守age :03/03/31 23:27
現在しりとりゲーム製作中。 公開できるといいが (って、ここ質問スレなんだよな・・)
バッチのしりとりゲームって前あったよね WindowsPowerで見た
268 :
デフォルトの名無しさん :03/04/01 10:26
5インチFDDの内容をHDDにコピーしてCD-Rに焼きたいので、1枚入れて キーを押すだけで、連続的にフォルダ作成&コピーできるようにしたいのですが。 BASICとBATのチャンポン書式で書くとこんな感じです。 for i=1001 to 2000 MD str(i) ' フォルダ作成 CD str(i) ' フォルダ移動 xcopy /s f:\*.* h: CD .. pause next BATオンリーでやるにはどうしたらいいのでしょうか? BUとか使ってもいいです。
for
>>268 マジのBATオンリー(BU使わない)なら、これ。(俺ってアホだよな・・)
------------------------------
@echo off
if NOT "%1"=="" goto %1
if NOT EXIST FOR268.1BT goto 1ST
set RET=INIT|for268 MSG INIT 1001まで、激しく準備中...(ひたすら待ってね)>FOR268.CNT
:INIT
if NOT "%i%"=="1001" goto COUNTUP
find "-%i%-"<FOR268.DAT>tmp.bat
tmp.bat for268 JOB2
:JOB2
MD %2
CD %2
xcopy/s f:\*.* h:
CD ..
pause
goto END|set RET=JOB|if NOT "%i%"=="2000" goto COUNTUP
:COUNTUP
type FOR268.1BT>>FOR268.CNT
dir FOR268.CNT|find "CNT"|find /v "\">tmp.bat
tmp.bat
:CNT
goto %RET%|set i=%2|if %2==1 set i=1%3|if %2==2 set i=2%3
:1ST
echo 初回なので半角で"@"を一文字入力し、 ctrl+z の後 enter を押してください。
copy con FOR268.1BT|dir FOR268.1BT|find "1BT"|find /v "\">tmp.bat
tmp.bat
:1BT
if %2==1 for268|if NOT %2==1 for268 MSG 1ST 入力エラーです。もう一度。
:MSG
goto %2|echo %3 %4 %5 %6 %7 %8 %9
:END
>>268 データ配列は、こういう風にファイルに書けばOK。
プログラムをギリギリ1レスに詰め込んだので、エラー処理なし。
ちゃんと2000まで登録しないと無くなった時点でエラーが出るよ。
------------------------------
%1 %2 c:\フォルダ名1 -1001-
%1 %2 c:\フォルダ名2 -1002-
%1 %2 c:\フォルダ名3 -1003-
%1 %2 c:\フォルダ名4 -1004-
%1 %2 c:\フォルダ名5 -1005-
%1 %2 c:\フォルダ名6 -1006-
>>268 補足、現状iが3000以上になる時はプログラムの修正が必要なので注意です。
そしてバグ発生。 1レスに詰め込もうとして、うっかり消しちゃった。 下の位置に :JOB の行を追加してください。n(_ _)n if NOT "%i%"=="1001" goto COUNTUP :JOB find "-%i%-"<FOR268.DAT>tmp.bat
ゴメン。str()は数値を文字列にする関数でした。うっかり配列変数と勘違いしてた。
>>270-273 は全部捨ててください。
-----------------------------------------------
@echo off
if NOT "%1"=="" goto %1
if NOT EXIST FOR268.1BT goto 1ST
set RET=INIT|for268 MSG INIT 1001まで、激しく準備中...(ひたすら待ってね)>FOR268.CNT
:INIT
if NOT "%i%"=="1001" goto COUNTUP
:JOB
MD %i%
CD %i%
xcopy/s f:\*.* h:
CD ..
pause
goto END|set RET=JOB|if NOT "%i%"=="2000" goto COUNTUP
:COUNTUP
type FOR268.1BT>>FOR268.CNT
dir FOR268.CNT|find "CNT"|find /v "\">tmp.bat
tmp.bat
:CNT
goto %RET%|set i=%2|if %2==1 set i=1%3|if %2==2 set i=2%3
:1ST
echo 初回なので半角で"@"を一文字入力し、 ctrl+z の後 enter を押してください。
copy con FOR268.1BT|dir FOR268.1BT|find "1BT"|find /v "\">tmp.bat
tmp.bat
:1BT
if %2==1 for268|if NOT %2==1 for268 MSG 1ST 入力エラーです。もう一度。
:MSG
goto %2|echo %3 %4 %5 %6 %7 %8 %9
:END
>>270-274 ありがとうございます。うるうる
ずいぶん長いソースになるんですね。
あとでやってみます。
フォルダ名はいちおう連番にしておいて、あとで改名するつもりでした。
なので、配列を使うほうのソースも参考になります。
どうしようかと思ってましたが、質問してよかったです。
DOS時代の大量のFDを塩漬けしたい人には役に立つと思います。
>>275 なんと、実用でしたか。
そういう目的で使うんでしたら、2度目以降の実行では下のように1行を追加すると
再起動でもフォルダ名の連番がリセットされず、しかも高速で始動できます。
if NOT EXIST FOR268.1BT goto 1ST
set RET=INIT|for268 MSG INIT 1001まで、激しく準備中...(ひたすら待ってね)>FOR268.CNT
↓↓↓
if NOT EXIST FOR268.1BT goto 1ST
set RET=JOB|goto COUNTUP
set RET=INIT|for268 MSG INIT 1001まで、激しく準備中...(ひたすら待ってね)>FOR268.CNT
277 :
デフォルトの名無しさん :03/04/06 23:44
良スレage
278 :
デフォルトの名無しさん :03/04/07 14:40
HOGE=$(hogehoge) をバッチファイルでできますか?
>>278 perl? 意味がわからないのでなんとも。
環境変数ならあるが @SET HOGE=hogehoge @ECHO 0-%HOGE% @SET HOGE= @ECHO 1-%HOGE% PAUSE
hogehogeの実行結果(標準出力)を変数HOGEに代入 $HOGE = `hogehoge`;
クリップボードにある文字列を表示するのはどうやるの?
>282 その分野はバッチではなくWSHの方かも
最近知った。バッチ使っての印刷。最後のはネットワークプリンタに印刷する方法 notepad /p [textfile] write /p [textfile] copy textfile.txt \\machine\printer
>>285 MS-DOS時代のプリンタなら、こういう事も出来ましたね・・・
でも今のWindows用プリンタではだめかも。(試したことない)
copy textfile.txt prn
type textfile.txt prn
#prnというのは、nul, con, aux等と同じく特殊デバイス名
× type textfile.txt prn ○ type textfile.txt > prn
これもなかなかじゃない?DOSスクリプトからSTDERRをSTDOUTと一緒のファイルに捕まえてる。 会社で時々重宝してる。もしかしたらcmd.exe(NTのcommand.com?)だけかも。 route 2>&1 | more route >hoge.txt 2>&1
一緒の話題にあったのが、レジストリエディタで HKEY_CURRENT_USER\software\Microsoft\Notepad の fSaveSettings をDWord型でOn(1にしる!)にしとくとNotepadの印刷時マージンやらヘッダフッタ設定を記憶させておけるってやつ。 簡単にテキストファイルを印刷するには十分かな。
for /f %i in ('hogehoge') do @set HOGE=%i
> rem カレントディレクトリの取得 > for /f %I in ('cd') do @echo %I D:\wrk > rem カレントドライブを分離 > for /f %I in ("D:\wrk") do @echo %~dI D: %~I - すべての引用句 (") を削除して、I を展開します。 %~fI - %I を完全修飾パス名に展開します。 %~dI - %I をドライブ文字だけに展開します。 %~pI - %I をパス名だけに展開します。 %~nI - %I をファイル名だけに展開します。 %~xI - %I をファイル拡張子だけに展開します。 %~sI - 展開されたパスは短い名前だけを含みます。 %~aI - %I をファイルの属性に展開します。 %~tI - %I ファイルの日付/時刻に展開します。 %~zI - %I ファイルのサイズに展開します。 %~$PATH:I - PATH 環境変数に指定されているディレクトリを 検索し、最初に見つかった完全修飾名に %I を 展開します。 環境変数名が定義されていない場合、または検索 してもファイルが見つからなかった場合は、この 修飾子を指定すると空の文字列に展開されます。 修飾子を組み合わせて、複合結果を得ることもできます: %~dpI - %I をドライブ文字とパスだけに展開します。 %~nxI - %I をファイル名と拡張子だけに展開します。 %~fsI - %I を完全なパスと短い名前だけに展開します。 %~dp$PATH:i - PATH 環境変数に指定されているディレクトリを 検索して %I を探し、最初に見つかったファイル のドライブ文字とパスだけに展開します。 %~ftzaI - %I を DIR コマンドの出力行のように展開します
バッチファイルでオブジェクト指向プログラミングは可能でつか?
>>294 マジかよ!?
>>290 >for /f %i in ('hogehoge') do @set HOGE=%i
/fというのがcommand.comではできんかった。cmd.exe専用でしょうか?
/f無しでやったら、%HOGE%には'hogehoge'が入りました。
>>295 そのへんの拡張はすべてcmd.exeのみ。
(^^)
つか男ならやっぱ command.com でやりたい
∧_∧ ( ^^ )< ぬるぽ(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
cmdは95、98、meは使えない、というか無いのでしょうもない
305 :
デフォルトの名無しさん :03/04/27 15:00
308 :
デフォルトの名無しさん :03/04/30 22:51
システムスタンプから日付と時間を取得し、その日付と時間を名前としたディレクトリを 自動的に作るバッチを作りたいと思います。 例えばこんな風です。 => \20030501-2300 ご存知の方、その方法を教えてください。 尚、当方のOSはWindows2000です。
システムスタンプって何? GUID?
310 :
デフォルトの名無しさん :03/05/01 01:09
>309 「タイムスタンプ」の誤りでした。 その後、色々調べた結果、次の様にしたのですが、時間が一桁の場合(例;午前1時など)、時間の頭が ブランクになってしまいます。 ゼロで埋める方法は無いでしょうか? 例) 午前1時のとき: 2003-0501_ 10005 ★こうしたい => 2003-0501_010005 ソース set yyyymmdd=%date:/=% set hhmmss=%time::=% set dirname=%yyyymmdd:~0,4%-%yyyymmdd:~4,8%_%hhmmss:~0,6%
set hhmmss=%hhmmss:~0,6% set hhmmss=%hhmmss: =0%
perで作れるからなー
パーは釣れるからなー
314 :
デフォルトの名無しさん :03/05/03 01:09
DEL [/P] [/F] [/S] [/Q] [/A[[:]属性]] 名前 *省略 /A 属性により削除するファイルを選択します。 属性 R 読み取り専用 S システム ファイル H 隠しファイル A アーカイブ - その属性以外 の/A パラメータの書式はどのように書くのでしょうか? DEL /P /Q /A : -S *.* か DEL /P /Q /A : S- *.* でうまくいかないみたいなので。Windows2000利用しています。 このようなかんじでCache削除をおこないたいのですが。Cookiesファイルとかを。 \Cookiesのindex.datファイルがSystem関係らしくてひとつのぞいて削除したいのですけれども。 rem Delete.bat cd c:\ cd "C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files" del /F /Q *.* cd "C:\Documents and Settings\Administrator\Cookies" del /F /Q /A : S- *.* EXIT
どなたかwin2000でbu.exeを使ってる神は
rename %1 うっちぃ_%~n1%~x1 バッチファイルに上の文を書いて、 renameうっちぃ_.bat というファイルネームでsendToフォルダに置いて、リネームしてます。 複数のファイルを同時にリネームできるようにするには どうすればいいでしょうか?
ループさせろ
319 :
デフォルトの名無しさん :03/05/08 11:39
バッチファイルプログラミング質問スレ はここです。
DOS互換(Unix互換も目標)とするならいざ知らず、Windows環境なら WSHを使うほうがいいんじゃないの?
バッチファイルで「Unix互換も目標」ってのは無茶を通り越して無謀。
322 :
デフォルトの名無しさん :03/05/08 16:45
"D:\Program Files\WinRAR\WinRAR" a -s -r -m5 -mc63:128t -md4096 -rr5p cvsroot * このコマンドラインでcvsroot.rarが出来るのですが、 このcvsrootの部分を cvsroot[yyyymmdd]という今日の日付にしたいのです。 どのようにすれば出来ますか?
323 :
デフォルトの名無しさん :03/05/08 16:56
具体的には 20%date:~4%で 2003/05/08という文字列が取れました。 ここから/を消したいのですがどうすればいいですか?
すいません解決しました
:loop if "%1" == "" goto :end rename ... shift goto :loop :end
>>327 (´Д`;) アリガトウゴザイマス…
∨)
((
複数のファイルに連番をつけるバッチファイルをつくりたいです。 @set ENV=1 :loop if "%1" == "" goto :end rename %1 %ENV%%~x1 @set ENV=%ENV%+1 shift goto :loop :end だめなところをおしえてください。
どうなることを期待していて、結果がどう期待に沿わなかったか、 ちゃんと書かないところかな。
>>330 いくつかのファイルをD&Dする。
拡張子はそのままに上から順番にファイル名を、
1.txt
2.txt
3.txt
としたい。
329のバッチでやると、
1.txt
1+1.txt
1+1+1.txt
となります。
お助けを〜。
set /? ちゃんと読んだ? すぐ見つかると思うんだが。
>>332 たぶん文字列として扱われてるので1+1+1みたいになるのだと思います。
数字として足し算をしたいのです。
それを変数に入れて、ファイル名にしたいのです。
うん、だからそのやり方はset /?ですぐ見つかるだろうと言ってるわけだが。
>>334 すべて文字列と書いてあります。
数をいれたいのです。
>>335 NT系じゃないヒト?かな?
for で回したらイカンのかな?
D&Dするのか、、、前言撤回。
rename %1 1%~x1 shift rename %1 2%~x1 shift rename %1 3%~x1 shift rename %1 4%~x1 shift rename %1 5%~x1 shift rename %1 6%~x1 shift rename %1 7%~x1 shift rename %1 8%~x1 shift rename %1 9%~x1 shift こうしたらうまくいきました。 ありがとうございました。
>>340 できたーーーーー!
ありがとうございます。m(_ _)m
だからset /?をちゃんと読めと再三…。
で、使ってるOSはみんなXPとかなのか
344 :
デフォルトの名無しさん :03/05/14 05:00
c:\program files\AAA\AAA.exe と d:\program files\BBB\BBB.exe を同時に起動するにはどうすればよろしいの?
完全に同時は無理だけど、startで並行して動作はさせられる。 CUIプログラムを同一ウィンドウで、はダメだが。
echoで空行(改行のみの行)を出力する方法ってないでしょうか? いくつかのバッチファイルを連続して呼び出している バッチファイルがあります。呼び出される側でログとして echoで色々と出力しているのですが、ログをパッと 見た時に処理の分け目がわかりにくくて・・・・ NT4.0で使ってます。
echo= echo. などで空行が出ます。
348 :
デフォルトの名無しさん :03/05/15 09:23
コマンドの実行結果をファイルへリダイレクトしつつ画面にも表示する事って可能でしょうか?
>>347 Thanks!
ただ、echo=だと
ECHO は <ON> です。
とかいわれてしまいました。
echo.
なら、無問題です。
>>350 スマソです。
WinXPのcmd.exeではうまくいってたので。
echo. は昔(command.com)から使われてたテクニックだが、
cmd.exeではecho=も使えるとは知らなかった。
そもそも質問するときに環境を書かない
>>346 が悪い。
漏れいつもECHO/にしてるんだが
>>353 同じくecho\でもいけた。
cmd.exeでしか試してないが。
+とか"でもいいようだ。要するに(cmd.exeは)ファイル名に使えない文字なら 区切りとみなすっぽい。
>>352 > NT4.0で使ってます。
思いっきり書いてあるが、、、、
Htaと組み合わせたい・・・>>バッチ できんかのぅ?
HTMLアプリケーションのことか?
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
Σ(゚д゚lll)ガーン もう6月じゃん
HTA検索してみた・・・。 JavaScriptからShellでよびだしたらどう?
<script language="JScript"><!-- function a(){ hoge=new ActiveXObject("WScript.Shell"); hoge.run("command.com /K echo HOGE"); }onLoad=document.write("<input type=button value=COMMAND起動 onclick=a()>"); //--></script> こういうことをお望み? 当然だがJScriptだからネスケでは使えない
365 :
デフォルトの名無しさん :03/06/02 01:10
シニスメテ.bat
366 :
デフォルトの名無しさん :03/06/02 17:00
echo cd C:\Program Files\Windows Media Components\Encoder >f:\wmv9.bat echo start /low cscript.exe WMCmd.vbs -input %1 -output %~d1%~p1%~n1.wmv -v_mode 2 -v_quality 75 -pixelratio 10 11 -v_preproc 16 -v_performance 100 -a_mode 2 -a_setting Q90_48_2 >f:\wmv9.bat 上の段の 「cd C:\Program Files\Windows Media Components\Encoder」 の部分がwmv9.batに書き込まれないのですが、なぜですか?
367 :
デフォルトの名無しさん :03/06/02 22:04
解決しました。 >を>>にしたらいいだけでした。
echo ホシュ
携帯ゲーム機"プレイステーションポータブル(PSP) このPSPは、新規格UMD(ユニバーサルメディアディスク)というディスクを利用しており、そのサイズは直径6cmととても小さい(CDの半分程度)。 容量は1.8GBとなっている。 画面は4.5インチのTFT液晶で、480px x 272px(16:9)。MPEG4の再生やポリゴンも表示可能。外部端子として、USB2.0とメモリースティックコネクタが用意されているという。 この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。 任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。
だれかNT4.0使ってる人はいない?
|∀・)
372 :
デフォルトの名無しさん :03/06/24 23:21
バッチファイルで入力した文字をテキストのある部分に書き込むことって出来ますか?WIN2K イメージで例えると バッチ起動 IPを入力して下さい >*.*.*.* ホスト名を入力して下さい >hosuto hostsファイルへ書き出し みたいな感じで やっぱ別途ソフト使わないと無理ですか?
>>372 > テキストのある部分に
ある部分によって難易度がかなり変わると思うが出来そうな気がする。
374 :
デフォルトの名無しさん :03/06/25 20:38
>373 まぁ極単純にいうと ファイルの中身: IP = ipadoresu HOST = hosuto で、ipadoresuとhosutoにバッチから入力するみたいな あとwin2kって書いたけどWIN98素DOSの間違いです
375 :
デフォルトの名無しさん :03/06/25 22:32
WIN XP PROのコマンドプロンプトなんだけど、リダイレクトに1とかの数字が付くのはどうして? 例えば、 ------------------------------------ type 123.txt > abc.txt type 456.txt >> abc.txt type 789.txt >> abc.txt ------------------------------------ みたいなバッチをかいたとき、実行画面を見たら、 C:\>type 123.txt 1> abc.txt C:\>type 456.txt 1>> abc.txt C:\>type 789.txt 1>> abc.txt ^^^^ みたいな感じになるんだよ。
>>374 cmd.exeならset /pでできるが、command.comじゃどうだろなぁ。
>>374 find /v で該当行を削除してから >> で最終行として足す事は可能です。
但し、行位置を変えずに編集するのは非常に難しいです。
1 IP =
2 HOST =
というふうに固定の行番号が入っているなら後からsortコマンドで誤魔化せるけど。
376 そうだったのか。産休。でも、見た目に気になるから、表示しないようにできないのかな。
381 :
デフォルトの名無しさん :03/06/27 20:15
標準入出力が扱えないって本当? だからシェルスクリプトと違ってCGIスクリプトを書くのに使えないって聞いたんだけど。
command.com /c hoge.bat < input > output ならできんじゃないか?
>>381 > 標準入出力が扱えないって本当?
うそ。
> だからシェルスクリプトと違ってCGIスクリプトを書くのに使えないって聞いたんだけど。
使える。
385 :
デフォルトの名無しさん :03/07/04 15:51
下の Shell Script と同じことを Windows でやりたいんだけど、 誰か windows の batch に翻訳して。 ------------------------------------------ if [ $# = 2 ]; then ARGS="hoge" elif [ $# = 3 ]; then ARGS="tako" else echo "FAILURE" exit 1 fi RESULT=`XXX $ARGS` if [ x"$RESULT" != "x" ]; then echo "FAILURE" exit 1 fi exit 0 ------------------------------------------
>>385 Shell Scriptを知らないから、
まずやりたいことを日本語に翻訳して。
387 :
デフォルトの名無しさん :03/07/04 16:07
>>386 翻訳してくれるのであれば、ありがとう。
---------------------------------------------
引数の数が 2 つなら ARGS 変数に hoge を代入
引数の数が 3 つなら ARGS 変数の tako を代入
それ以外なら "FAILURE" と出力して異常終了
XXX コマンドに ARGS 変数の内容を引数として渡して実行し、その結果を RESULT 変数に代入。
実行した結果が "" なら正常終了、"" 以外なら "FAILURE" と出力して異常終了
---------------------------------------------
こんな感じ
>>385 ズルしていいなら
--------------------
@if (0==1) rem
@echo off
if exist %0.bat cscript.exe //nologo //e:jscript %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
if exist %0 cscript.exe //nologo //e:jscript %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto end
@else
var WshShell = new ActiveXObject("WScript.Shell");
var oArgs = WScript.Arguments;
var ARGS;
if (oArgs.length == 2)
ARGS = "hoge";
else if (oArgs.length == 3)
ARGS = "tako";
else
WScript.StdOut.WriteLine("FAILURE");
var oExec = WshShell.Exec("XXX.exe " + ARGS);
var RESULT = oExec.StdOut.ReadAll();
if (RESULT == "") {
WScript.StdOut.WriteLine("FAILURE");
WScript.Quit(1);
}
WScript.Quit(0);
@end/*
:end
:*/
--------------------
訂正 else WScript.StdOut.WriteLine("FAILURE"); ↓ else { WScript.StdOut.WriteLine("FAILURE"); WScript.Quit(1); }
また訂正 if (RESULT == "") { ↓ if (RESULT != "") {
あるいはmsys
>>388 exit status返せる?
バッチにすると返せないから @else の次の行から @end/* の前の行まの内容を .js ファイルとして cscript //nologo ***.js のように 起動すべきかな。
「キーの入力待ち」をするDOSアプリをバッチで 自動的に起動→終了したいのですが、 方法はありますでしょうか? 起動後にEnterを押さないと処理が始まらなくて、 終了にも任意のキーを押す必要があるのですが
pause
>>395 入力すべきキー内容をファイル(例えばbar)に保存しておいて
foo.exe<bar
のようにしてみては?
398 :
デフォルトの名無しさん :03/07/09 03:30
ageてもいいかしら
>>397 あ。答えてくれてらっしゃる。
超出来ました。最高です!バッチリです!ヒャホーイ!
400 :
デフォルトの名無しさん :03/07/09 03:46
echo -n '400get'
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
絢安允安安維
テキスト内の特定の文字列だけ書き換えさせたいのですが、 追記くらいしか検索にヒットしないのでマジ困ってます。 例を教えていただけませんでしょうか?おながいします。
404 :
デフォルトの名無しさん :03/07/24 14:54
win2kでexeを一度に大量起動するバッチファイルを作ったんだが 起動したアプリを終了しないと次のアプリが起動せず無意味 なんとかならんでしょうか 中身はこんな感じ "C:\Program Files\hoge\hoge.exe" "C:\Program Files\hage\hage.exe" "C:\Program Files\mage\mage.exe"
>>404 start "C:\Program Files\hoge\hoge.exe"
>>405 2kでcmd.exe使用の場合
プログラムを""で囲う時は
start "" "C:\Program Files\hoge\hoge.exe"
とするひと
""で囲まない時やcommand.com使用時は例外
>>406 start "" "C:\Program Files\hoge\hoge.exe"
で出来ました、有難うございます。
(^^)
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
410 :
デフォルトの名無しさん :03/08/20 13:57
テキストファイルに書かれている文字列を 変数に代入する方法ってありますか? ちなみにテキストファイルには一行しか書かないものとして。 OSはW2Kです。
set /p var= < file
>> 411 ありがとうございます。
次のようなバッチファイルを作りたいのですが、どのようにすればいいでしょうか ・あるフォルダに入っているすべてのバッチファイルの すべての行の左側に「echo 」と書き、 すべての行の右側に「 >>wmv9」と書く。
次のようなバッチファイルを作りたいのですが、どのようにすればいいでしょうか ・あるフォルダに入っているすべてのバッチファイルの すべての行の左側に「echo 」と書き、 すべての行の右側に「 >>wmv9.bat」と書く。
OS はWIN2kPROです。 よろしくおねがいします。
>>414 for %%a in (*.bat) do for /f "delims=@" %%b in (%%a) do @echo echo %%b ^>^>wmv9.bat>>バッチ.cmd
move バッチ.cmd バッチ.bat
@はbatで使用されていない文字にすること
実行したバッチファイルが置かれているパスを取得する方法って無いですかね。 %0の中身の、バッチファイルの名前を取れれば良いんだけど・・・。
cmd.exeならできたはず。 help set
420 :
デフォルトの名無しさん :03/08/27 12:28
>>418 %0って起動時のコマンドラインから引数を
除いた部分が入っているだけじゃなかったっけ?
c:\>c:\bat\test
→ %0 = c:\bat\test
c:\>test
→ %0 = test
c:\>test.bat
→ %0 = test.bat
そのディレクトリ部分を取り出したいんじゃないの?
>>418 %~dp0
call/? や for/? に説明がある
423 :
デフォルトの名無しさん :03/08/27 21:25
>>421 フルパスで起動しない限りディレクトリ自体が含まれてないから無理なのでは・・
それともNTだと必ずフルパスが入ってくる?
425 :
デフォルトの名無しさん :03/09/10 23:26
Windowsのバッチで、 echo 1 echo 2 だと1と2の間と、2の次に改行が入るけど、改行を出力せずに echoする方法ってありますか?
426 :
デフォルトの名無しさん :03/09/14 18:58
ない
cygwin入れてprintfってのもあるけど
バッチファイルで 指定のディレクトリに あいうえお__20030917 みたいに 指定の名前+本日の日付のフォルダ を作成するにはどうすればいいのでしょうか?
430 :
デフォルトの名無しさん :03/09/17 15:35
>>429 mkdir %指定のディレクトリ%\あいうえお_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
431 :
ヘルスズキ :03/09/17 17:21
>>430 できませんでした。locale設定に依存しますね。
c:\>echo %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
水 203/9/
>>431 OSのバージョンかも。
C:\>ver
Microsoft Windows XP [Version 5.1.2600]
C:\>echo %DATE%
2003/09/17
Windows 2000なら C:\>ver Microsoft Windows 2000 [Version 5.00.2195] C:\>echo %DATE% 水 2003/09/17 C:\>echo %DATE:~2,4%%DATE:~7,2%%DATE:~10,2% 20030917
mkdir あいうえお_%DATE:/=%
435 :
デフォルトの名無しさん :03/09/17 17:49
OSのバージョンもあるけど、Localeに激しく依存します。 [コントロールパネル]−[地域のオプション]−[日付](Win2kの場合ね) で短い形式の書式を変えると%DATE%の出力フォーマットが変わります。 (コマンドプロンプトは再起動が必要)
>>434 これが一番きれいかも。曜日が入っちゃうけどね。
C:\WINDOWS>echo %DATE% ECHO は ON C:\WINDOWS>
阪神優勝_20030915-222545_aup_vfapi.wmv 阪神優勝_20030915-222906++.avi 阪神優勝_20030915-224138+_tpr_vfapi.wmv 阪神優勝_20030915-225535+_tpr_vfapi.wmv 阪神優勝_20030916-003659_tpr_vfapi+.wmv 阪神優勝_20030916-072316+++.avi 上のようなファイルがたくさんあって、これらをすべて選択してD&Dすると、 下のようなファイル名にすることはバッチファイルでできますでしょうか? OSはWIN2kPROです。 阪神優勝_20030915-222545.wmv 阪神優勝_20030915-222906.avi 阪神優勝_20030915-224138.wmv 阪神優勝_20030915-225535.wmv 阪神優勝_20030916-003659.wmv 阪神優勝_20030916-072316.avi
阪神優勝_ の部分は文字や文字の長さが変わります。
goto :優勝
>>439 阪神優勝_ ではなく 阪神優勝 の部分が変化するときのバッチ
%^1と%~f1って何が違うんだろう
:優勝
echo %~f1>阪神.lst
FOR /F "usebackq delims=_+. tokens=1,2" %%i IN (阪神.lst) DO move "%~f1" "%%i%%j%~x1"
if not "%~2"=="" shift & goto 優勝
del 阪神.lst
goto :eof
ウィンドウズバッチってウェイトさせる事できるんですか? 素人質問スマンです
goto 開始
>>442 ウェイトって、start /wait コマンドのことじゃないよね
linuxでのsleepみたいなものを期待してるのかな
だったら標準では入っていないと思う
:開始
@if "%1"=="" @echo 終了までに%%1に指定した秒数かかるバッチ&goto :eof
@echo off
set 待小=%TIME:~9,2%
set 待秒=%TIME:~6,2%
set 待分=%TIME:~3,2%
set 待時=%TIME:~0,2%
if %待小:~0,1%==0 set 待小=%待小:~1,1%
if %待秒:~0,1%==0 set 待秒=%待秒:~1,1%
if %待分:~0,1%==0 set 待分=%待分:~1,1%
if %待時:~0,1%==0 set 待時=%待時:~1,1%
set /a 待機=((%待時%*60)+%待分%)*60+%待秒%+%1
goto 待機
:待機 set 動小=%TIME:~9,2% set 動秒=%TIME:~6,2% set 動分=%TIME:~3,2% set 動時=%TIME:~0,2% if %動小:~0,1%==0 set 動小=%動小:~1,1% if %動秒:~0,1%==0 set 動秒=%動秒:~1,1% if %動分:~0,1%==0 set 動分=%動分:~1,1% if %動時:~0,1%==0 set 動時=%動時:~1,1% set /a 動作=((%動時%*60)+%動分%)*60+%動秒% if %待機% GTR %動作% goto 待機 @echo 開始時刻 %待時%:%待分%:%待秒% @echo 終了時刻 %動時%:%動分%:%動秒% @goto :eof @echo %待機% @echo %動作%
ヘビーループはやめれ 俺ならcygwinのsleep呼んでしまう
>>445 外部exe使わないならこうなるだろうなと思って書いただけ
俺ならUnxUtilsのsleep.exe使うけどな
choice.comの遅延
448 :
デフォルトの名無しさん :03/09/26 00:26
バッチファイルで 1.txtで中の文字が1 のファイルを 2.txtで中の文字が2 3.txtで中の文字が3 みたいにコピーする方法とかありますでしょうか?
やりたいことがよくわからないけど、 ファイルの中身はforで読めるからやり方あるかもね。
> 1.txtで中の文字が1 たったこれだけでここまで意味不明なのもすごいな。
451 :
デフォルトの名無しさん :03/09/27 16:29
現在登録されているIME辞書ツールの一覧の抽出を 「本日の日付.txt」で実行できる と言うバッチファイルを作りたいのですが 可能でしょうか?
>>448 if exist 99.txt echo 100 > 100.txt
goto exit
if exist 98.txt echo 99 > 99.txt
goto exit
・・・
:exit
何をやりたいか少々不明&テストしてないけど
>>451 日付を環境変数に取り出す方法は、このスレでも何度か出ている。
454 :
デフォルトの名無しさん :03/10/02 17:40
バッチファイルは初心者ですが、以下の質問をさせてください。 ファイル名が 00000001.から00099999. までのファイルを消したいのですが、特殊な名前のファイルのため下記のようにDelコマンドを打たなくてはなりません。 *やdeltreeでは消せないようです。 で、ループさせて消そうとおもったのですが、下記のバッチファイルではうまくいきません。 バッチでの変数の扱いがちょっとわたしには?なので、これ以上先へすすめなくなってしまいました・・・ どなたかお知恵をお貸しください。 @ECHO OFF SET A=1 :LOOP del "\\?\C:\RECYCLER\NPROTECT\0000000%A%." SET A=%A%+1 GOTO LOOP
455 :
デフォルトの名無しさん :03/10/02 17:45
いま考えてるのは一桁ずつ0-9までLOOPを入れ子状態にしてまわす方法が かけるのかなぁとおもってるんですが、なんか書くのがめんどくさそう・・・
>>454 setで計算する時は
set /a 式
変数にA使うから最初見た時間違いに気付かなかったよ
入れ子じゃないけど作ってみた
@echo off
SET A=1
:1
del "\\?\C:\RECYCLER\NPROTECT\0000000%A%."
SET /A A = %A% + 1
if %A% lss 10 goto 1
:10
del "\\?\C:\RECYCLER\NPROTECT\000000%A%."
SET /A A = %A% + 1
if %A% lss 100 goto :10
:100
del "\\?\C:\RECYCLER\NPROTECT\00000%A%."
SET /A A = %A% + 1
if %A% lss 1000 goto 100
:1000
del "\\?\C:\RECYCLER\NPROTECT\0000%A%."
SET /A A = %A% + 1
if %A% lss 10000 goto 1000
:10000
del "\\?\C:\RECYCLER\NPROTECT\000%A%."
SET /A A = %A% + 1
if %A% lss 100000 goto 10000
>456 計算式を評価して代入するにはAオプションがいるんですね。きづいてなかったっす。 昨日はあきらめてVBでやることにして、動かしたんですが、あやまってDOS窓開きまくりでファイル消し始めて、 ある程度は消えたんですが、OSあぼーん、ソースも保存してなくてあぼーんしたので放置してました。 いただいたソースで今無事全ファイル削除できました。ありがとうございました。 桁が繰り上がるたびに0の数減らすんですね。これも思いつかなかったっですw
>>454 del \\?\C:\RECYCLER\NPROTECT\0000000*.
で消せない?
>458 ちょっとそれはわからないです。もうファイル消しちゃったんで。 もしかしたら\\?\がポイントかもしれないから消せるかもしれませんね・・。
といまおもったんですが、""でくくらないと消せないようなので*は使えないんじゃないでしょうか
数字に限定しないなら for %a in (000?????.) do del "\\?\C:\RECYCLER\NPROTECT\%a" でよかったかも
>461 DOSバッチのFORの説明をあるサイトで見たんですが、VBのForとはかなりちがうみたいで理解できなかったっすw。 なるほど、そうかくと?????のなかに数字が00001からひとつずつ増えていくんですね?
>>462 ?は任意の1文字
FOR /L あるの忘れてた。使えば5行ですんだかも
464 :
デフォルトの名無しさん :03/10/06 17:45
こういうのを書いてみた。WindowsのMS-DOSプロンプトでスレッド間通信。 (PureDOSでSJIS扱えるまともなMultithreaderがあればなぁ…) セッション切り替えを実装していないのでペア間通信しかできない。 これ自体、環境変数ではなくファイル受け渡しという手もあるので 別にバッチやDOSではなくても可能。応用すれば、C/S型のアプリや Windows + DOSといったhybrid programが作成可能。 使用方法はDOSプロンプトを2つ同じフォルダで起動。 一方で、このバッチを起動して、もう一方でenvdata.batを生成。 終了方法は、ソース読め(w --- cut here --- @echo off :: 環境変数を応用したスレッド間通信。 :: envdata.batの内容は set 環境変数名=変数内容とする。 :: by.Chysanthemum Kernel Project(謎) :: this code is public domain. you use is as you like. :: but don't use commercial this condition. set thread.env=running :loop if exist envdata.bat call envdata.bat if "%thread.env%"=="halt" goto halt goto loop :halt set thread.env= del envdata.bat
指定のフォルダを削除するにはどうすればいいのでしょうか? DELTREEを使うのはわかるのですが、 バッチファイルとして認識されていませんと表示されて削除できません 教えてください
467 :
デフォルトの名無しさん :03/10/08 23:45
>>467 してるわけないじゃん
Cドライブの中身全部消えるじゃん
本当の答えを教えてください
>>468 そんなにDELTREE使いたいなら
Win98のCOMMANDフォルダから取ってこいよ
>466=>467 なんかワロタ
471 :
デフォルトの名無しさん :03/10/12 22:33
すいません、質問お願いします。使用しているのはXP HOMEのコマンドプロンプトです。 「A%20B.txt」という名前のファイルを「A B.txt」にリネームするバッチを組みたいの ですが、現状だと%2をコマンドライン引数と認識しているようで上手くリネーム出来ま せん。%を%そのものの文字として扱うための表記はどうすればいいのでしょうか?
%%
>>472 さん
出来ました。こんな単純な話だったんですね(汗
どうもありがとうございます。
474 :
デフォルトの名無しさん :03/10/13 21:23
フォルダを削除する時に Deltree "C:\新しいフォルダ" とやると 操作可能なプログラムまたはバッチ ファイルとして認識されていません とでます 削除するにはどうすればいいのでしょうか?
475 :
デフォルトの名無しさん :03/10/13 21:24
Windowsのバージョンは?
476 :
デフォルトの名無しさん :03/10/13 21:36
>>475 xpです
RMDIRでやろうとすればから空のフォルダのみだし
478 :
デフォルトの名無しさん :03/10/13 21:54
rmdir /s で出来る
deltree.exe/y = rd/s/q
480 :
デフォルトの名無しさん :03/10/27 10:48
list.txtから一行ずつテキストを読み込んで%line%に受け取ることはできますか? for %%line in "list.txt" do echo %%line みたいなことをやりたいのですが。
482 :
デフォルトの名無しさん :03/11/05 01:53
ECHO 文字列>test.txt とするとtest.txtに「文字列」のあとに改行がついてしまいます 改行をなくすまたは最初から出力させない方法、テクニック(コピーしたり連結したりをふくむかも) があれば教えてください 文字列にCDを入れて、CD >test2.txtで作ったものと 連結してバッチファイルを作って、元のディレクトリに戻るのに使います。
483 :
デフォルトの名無しさん :03/11/05 23:29
>>482 あらかじめ改行を含まない
CD_[EOF]
("_"はスペース)
のような内容のファイル(たとえばtest1.txt)を作っておいて
copy /Y test1.txt test2.txt
CD >> test2.txt
とか。
Win2k/XPなら pushd/popd を使ったり
echo cd %CD% > test2.txt
で簡単にできるんだが…。
>>482-483 9X系の場合
echo prompt CD $P >tmp.bat
command /c tmp.bat | find /v "prompt" >>test2.bat
485 :
デフォルトの名無しさん :03/11/12 00:10
コマンドプロンプトのショートカットで、 そのショートカットが開くと同時に、カレントディレクトリが、 そのショートカットがあるディレクトリにするには、プロパティの作業フォルダを 何にすればいいのでしょうか。教えてください %~d0%~p0でうまくいっていたのですが、急に C:\Program Files\Common Files\System\Mapi\1041> で始まるようになってしまいました
486 :
デフォルトの名無しさん :03/11/13 20:31
MP3のインデックスを作成 @echo off cd "C:\My Music" dir /s /b * > 全て再生.m3u for /D /R %%i in (*) do ( pushd %%i dir /s /b * > 全て再生.m3u popd ) rem pause
487 :
デフォルトの名無しさん :03/11/14 02:08
REM Javaのソースをコンパイルして実行 javac %1 java %1 PAUSE
拡張子 .java が取れてないですね。 どうやって取ったらいいんですか?
そもそもドットと拡張子を入力しないでいいようにバッチを書き直せばw w2k以降なら %~n1 やら %~dpn1 とか使えるよ。
Hellow_Java.javaを第一引数に与えると、コンパイルして、成功して、 Hellow_Java.classが出来たら実行する物を作ってみました Hellow_Java.classが作成されているのにEXISTで %~n1%.classを認識してくれませんでした。 EXISTによる確認なしだと、実行までしてくれるのですが。 後は、コンパイル実行して、エラーで前にコンパイルした同名の 〜.classがあるときは実行しないようにする方法が思いつきません IF EXIST %1% GOTO FA GOTO FF :FA javac %1% IF EXIST %~n1%.class GOTO FB GOTO END :FB java %~n1% GOTO END :FF ECHO JAVA のソースファイルファイルをアイコン上にドラッグしてください。 :END PAUSE
492 :
デフォルトの名無しさん :03/11/15 16:29
>>490 ?
javac の戻り値で調べるのはだめ?
以下は引数無しだとエラーになるので適当に工夫してくれ。
@echo off
setlocal enableextensions
set srcf=%1
set binf=%~dpn1.class
if exist %srcf% (
echo javac "%srcf%"
if %ERRORLEVEL% equ 0 (
echo java "%binf%"
)
) else (
echo java のソースファイルファイルをアイコン上にドラッグしてください。
)
pause
endlocal
というか、make 使うほうが良(ry
493 :
バッチ初心者 :03/12/05 11:09
あるタブ区切りのaaa.txtファイル内の指定されたタブを編集したいのですが 方法がわからないので教えていただけませんでしょか? OSはWIN2000です。条件は下記の通りです。 ・1行が5つのタブで区切られている。 ・ファイルによって行数が異なるので最終行まで見ないといけない。 ・目的の区切られたタブの場所にデータが存在しない行とする行がある。 この場合、例えば全行の2個目のタブの場所に先頭行から順に最終行まで連番を振りたい場合 どのように処理すればよろしいのでしょうか?
>>493 バッチファイルでそれをやるのは辛いような。
フィルタ系の処理はPerlやWSHでやったほうがいいと思うよ。
495 :
デフォルトの名無しさん :03/12/05 11:19
シフトキーやコントロールキーの押下状態をERRORLEVELか何かにセットして判定に使えるコマンドって無い? SHIFT押しながら起動するとデバッグ情報出すとかやりたいんだけど。
>>495 作れば?
それともバッチファイル以外は作れないの?
>>496 標準でそういった機能があるかどうか聞いているだけ。
>>498 ○nix ならそれでいいけど、Windows ならわざわざ awk をインストールするのがめんどい。
vbs でいいと思うが。
Option Explicit
Const ForReading = 1
Const ForWriting = 2
Dim FileSystem = CreateObject("Scripting.FileSystemObject")
Dim InFile
Set InFile = FileSystem.OpenTextFile("aaa.txt", ForReading, false)
Dim OutFile
Set OutFile = FileSystem.OpenTextFile("bbb.txt", ForWriting, True)
Dim Number
Number = 1
While Not InFile.AtEndOfStream
Dim Fields
Fields = Split(InFile.ReadLine, vbTab, 5)
Fields(1) = CStr(Number)
Number = Number + 1
OutFile.WriteLine(Join(Fields, vbTab))
WEnd
OutFile.Close
InFile.Close
動かしてないから、バグってたら直してくれ。
>>493 >>494 >>498-499 ↓のような aaa.bat を作ってコマンドプロンプトから
aaa aaa.txt bbb.txt
と打ってやってもできます。バッチファイルにJScriptを埋め込む技を使ってます。
@if (0==1) rem [aaa.bat]
@echo off
if (%2)==() goto usage
if exist %0.bat %0.bat %1 %2
cscript.exe /nologo /e:jscript %0 %1 > %2
goto end
:usage
echo %0 infile outfile
goto end
@else
var args = WScript.Arguments;
var line = 0;
var f = (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(args(0));
while (! f.AtEndOfStream)
WScript.StdOut.WriteLine(f.ReadLine().replace(/^([^\t]*\t)[^\t]*\t/, "$1" + ++line + "\t"));
f.Close();
@end/*
:end
:*/
>>500 下から5行目のreplaceのところはもうちょっと単純に:
WScript.StdOut.WriteLine(f.ReadLine().replace(/^(.*?\t).*?\t/, "$1" + ++line + "\t"));
pathextに.jsあるんだから無理にバッチファイルに埋め込まんでも
>>502 既定でwscriptで起動される環境でもcscriptで起動させるため。
IEの履歴、テンポラリーファイル、クッキーを削除するバッチを 作ろうかと思ってる。 クッキーは無事消せたんだが、テンポラリーファイルと履歴が消 えてくれないの・・・ フォルダ移動まではうまく逝ってて、削除しようとすると失敗。 コマンドプロンプトからやってみると、ファイルが何も見えない 感じになっている。 ちなみに当方の環境は、XPで、そして共用パソコンだ。 これはxpのセキュリティが強すぎるせいなのか?? そして解決策はあるのか?? 教えてお願いエロい人! ちなみにかなーりさがってたのでageます。許して下さい。
505 :
デフォルトの名無しさん :03/12/21 07:28
call hoge.mdb では普通にAccessでhoge.mdbが起動するのに、 start hoge.mdb ではDOS窓で起動(?)しちゃうのはなんででつか? ヘルプだとstartでもいいような書き方なのに。 callだとAccess起動後もDOS窓が残るんで困るんす。 ちなみに、Win2000す。
>>504 explorer.exeが起動していると、index.datが共有違反になり消せなくなる。
回避するには、explorer.exeを殺しておく必要がある
新年ズサー
508 :
デフォルトの名無しさん :04/01/09 04:26
ワンクリックでアプリを2個起動させるバッチファイルを作りたいんですが D:\software\aaaa\xxxxx.exe D:\software\bbbb\xxxxx.exe じゃだめなんでしょうか ̄/ ̄)。。 うまくうごきません
start D:\以下略 start D:\以下略
>>508 それだと一番目のが終らないと二番目のは起動しない。
511 :
デフォルトの名無しさん :04/01/12 14:30
batファイル format c: /q <go goファイル y
やってみたことが無い奴ほどformat c:を書きたがる
514 :
デフォルトの名無しさん :04/01/12 15:19
IFで比較対象の文字列にワイルドカードを用いる方法を教えてください。 IF "abc"=="*bc"で真にしたいのです。。
@ECHO (ESC)[31mError(ESC)[0m (ESC):エスケープシーケンス 上記のように書いて、文字を赤で表示するようなことが出来た気がするのですが、 2000/XPでは出来ないのでしょうか? もし、この方法で出来ないとしても、他の方法でできるとしたら、その方法を教えてください。
Win32API使えば出来るけどバッチファイルからは無理じゃないの。 あとcygwinでも出来る。
>>516 残念。
「バッチファイルで出来るならやろうかな」程度の事だったので、諦めます。
ありがとう。
がいしゅつかもしれませんが、 9x系をシャットダウンできるコマンドはありませんか? NT系なら、 shutdown -s -t 0 一発なんですが……。
>>515 config.ntにansi.sysを組み込んで、command.comを起動すれば出来る
>>515 じゃないけど質問。
それどうやるの?
Config.ntに
device = c\:windows\system32\ansi.sys
ってやったけどうまくいかない。
環境はWinXP。
>>520 NT系じゃansi.sysは無効なんじゃなかったか。
>>520 さらにconfig.ntの最後の行に
DOSONLY
を追加しれ。
これでansi.sysが有効になるはず。(ただし16bit DOSプログラムにのみ有効)
bu.exeを2000で使えてる方はいらっしゃいませんか?
( ´,_ゝ`)ブッ
>>522 なに!
じゃあ、32bitは動かんのか?
それじゃあ意味がありまへんがな。
>>523 cmd.exeからではなくcommand.comから起動してみてください。
それでだめならばxtrやらC/C++/perlで同等のコマンドを作るしかないです。
>>525 cmd.exe上ではエスケープシーケンスが使えなかったはずでは?
諦めてWinbatchEhやら他の言語を使いましょう。
以下のようなバッチファイルを記述したいと考えています。 起動されたフォルダ内で処理をするabcというプログラムがあるとして、 バッチファイルを起動するとそのフォルダとそのフォルダ以下のサブフォルダを含めて abcプログラムの処理をしたいと考えています。 つまり、あるフォルダでバッチファイルを起動するとそのフォルダ以下のサブフォルダを検出し サブフォルダに移動してabcというコマンドをうつということを全サブフォルダで 行いたいわけです。 なにかよいアイデアはあるでしょうか?
手っ取り早くcygwin入れてfind+xargs ってーいうのはこのスレでは反則ですか?
>>529 for /R . /D %d in (*) do (cd "%~fd" & abc)
>>530-532 ありがとうございます。
/D と /R でいけるみたいですね。
それを使ってやってみます。
534 :
デフォルトの名無しさん :04/02/03 16:05
Windows 98のコマンドプロンプトで %~dp0 に相当する値を 取得する右方方を教えてください。 おねがいします
DLLがエクスポートしている関数を呼び出せたと思う。
教えて君で申しわけないのですが、SORT テキストファイルやテキストデータを昇順/降順に並べ替えたいのです。 でも、書籍の通りにやっても下記エラーになってしまいます。 OSは98SEです。 Microsft(R) Windows 98 (C)Copytight Corp 1981-1999 C:\WINDOWS>\temp1>dir /b コマンドまたはファイル名が違います。 SAMPLEをなぞってるだけなんですが・・・。 ちなみにtempフォルダだとややこしいと思って、temp1のフォルダにしてるだけ なんですけど。 c:\temp>dir /b -------------DIRコマンドでファイル名のみを表示した a-file.txt b-file.txt c-file.txt c:\temp>dir /b | sort /r -----------パイプ処理で逆順に並び替えて表示 c-file.txt b-file.txt a-file.txt
c:\temp> ↑は入力する必要は無い。 "dir /b | sort /r" だけを入力すればいい。
マルチ
ここまでは、出来ました。 C:\WINDOWS>dir /b C:\TEMP1 c-file.txt a-file.txt b-file.txt
ヾ(@^▽^@)ノわはは
出来ました〜〜〜〜〜。
C:\WINDOWS>dir /b "C:\TEMP1" | sort /r
c-file.txt
b-file.txt
a-file.txt
この人の著書はだめぽ
ttp://www.iijima.nu/
killみたいなコマンドはないんでしょうか? atで起動したのを殺したいんですが・・・
Win2000 Support Tools に kill.exe がある
NT Resource Kit にもある
Cygwinにもある
w2kを使ってるんですが、デフォルトでは無い ということでしょうか。ありがとうございました。
548 :
デフォルトの名無しさん :04/02/15 03:14
すいません。ワールドカードを使いたいのですが。 エラーが出ます。 D:\Temp>type 文書*.txt ファイルが見つかりません. - 文書*.txt
>>548 typeはワイルドカード指定不可。
for %i in (文書*.txt) do type %i
>>548 D:\Temp>copy 文書*.txt con
551 :
デフォルトの名無しさん :04/02/15 12:40
質問なのですが、 A.txtの中に入っている文字列と、 B.txtの中に入っている文字列を重複チェックを掛けて、 重複している文字列だけ消去して、C.txtに出力というバッチはどう書いたらよいのでしょうか? どなたかおわかりになられる方いらっしゃいましたら、 ご教授お願いします。
標準じゃ無理 uniq探して使っとけ
uniqよりはcomm
554 :
デフォルトの名無しさん :04/02/15 16:20
>>549 あー、出来ました。
有難う御座います。
>>550 まだ、勉強不足なので処理がわかりません。
D:\Temp>copy 文書*.txt con
文書1.txt
昨日は雨でした。
今日は一日曇ってます文書2.txt
来週は雨が多く、晴れの日が少ないでしょう。 1 個のファイルをコピーしまし
た.
555 :
デフォルトの名無しさん :04/02/17 17:28
>>550 理解できたと思います。
これでいいのでしょうか?
結果です。
AドライブのFDにちゃんとファイルがコピーされてました。
D:\Temp>copy 文書*.txt a:
文書1.txt
文書2.txt
2 個のファイルをコピーしました.
556 :
デフォルトの名無しさん :04/02/17 17:35
あー、でもconだと何処にコピーされてるか解ってないな。 勉強しておきます。 解らなかったら、質問しても良いですか?
558 :
デフォルトの名無しさん :04/02/18 18:16
質問です。 引数があるかどうかをチェックするのに IF "%1" = "" で判断して、それはうまくいっているのですが、 デスクトップとかにあるファイルを渡すと、 「andの使い方が間違っています」と表示されて、強制終了します。 どうもパスにスペースを含んでいるのがまずいらしいというのは見当がついたんですが、 ""で囲んでもダメとなると、どうやって回避したものかわかりません。 なにかうまい方法はないでしょうか。
環境とどういうファイル名かも書け。
>>560 無事判定できました。
ありがとうございました。
>>557 console ←これは、どうやって探すのですか?
Windowsの検索では、TXTの拡張子が出てきません。
DOSでやらないと探せないのでしょうか?
>>562 con という、コンソールデバイスだよ
>>563 ちょっと調べておきます。
解らなかったら、又、質問させてください。
あぼーん
あぼーん
あぼーん
あぼーん
/::::::::::::::::::::::::::\ /::::::::::::::::::::::::::::::::::::\ |:::::::::::::::::|_|_|_|_| |;;;;;;;;;;ノ \,, ,,/ ヽ ちょっと聞いてくれよ。 |::( 6 ー─◎─◎ ) |ノ (∵∴ ( o o)∴) /| < ∵ 3 ∵> ::::::\ ヽ ノ\ :::::::::::::\_____ノ:::::::::::\ 昨日、クライアントに会った帰りに松屋逝ったんだけど すげーデブの客からチケット渡された店員が奥に向かって「ブタ一丁」と叫んだ時 店内客全員が笑いをグッとこらえる重苦しい雰囲気に包まれたのを感じて 口の中の牛めしを吹き出しそうになっちまったよ。
570 :
デフォルトの名無しさん :04/02/22 23:56
教えてください。 batファイルでftpコマンドがかかれているファイルを読み込みFTPでサーバからファイルを ダウンロードを行います。もしダウンロードに成功した場合は.okファイルを作り,ダウンロード に失敗した場合には.ngファイルを作りたいのですがどうもうまくいきません。
>教えてください。 なにをですか? >どうもうまくいきません。 なにがですか?
572 :
デフォルトの名無しさん :04/02/24 19:52
すいません。教えて君で申しわけないのですが。 カレントディレクトリ内に3個のサブディレクトリを作りたいのですが 上手く出来ません。結果がこうです。 D:\>md test D:\>cd test D:\test>md test001 D:\test>dir /w ドライブ D: のボリュームラベルはありません. ボリュームシリアル番号は 11D3-2521 ディレクトリは D:\test [.] [..] [TEST001] 0 個 0 バイトのファイルがあります. 3 ディレクトリ 186,802,176 バイトの空きがあります. D:\test>md test002 test003 test004 パラメータが多すぎます. - test003
573 :
デフォルトの名無しさん :04/02/24 20:05
訂正 すいません。教えて君で申しわけないのですが。 最初にd:\testディレクトリを作り、その後にカレントディレクトリ内に 1個のサブディレクトリ作り、test002 test003 test004という3つのディレクトリを1度に 作り、dada\temp\00という3階層のディレクトリを1度に作りたいのですが 上手く出来ません。結果がこうです。 D:\>md test D:\>cd test D:\test>md test001 D:\test>dir /w ドライブ D: のボリュームラベルはありません. ボリュームシリアル番号は 11D3-2521 ディレクトリは D:\test [.] [..] [TEST001] 0 個 0 バイトのファイルがあります. 3 ディレクトリ 186,802,176 バイトの空きがあります. D:\test>md test002 test003 test004 パラメータが多すぎます. - test003
このようにしたいのですが D:\test |_dada | |___temp | |__00 | |_______test001 | | |_______test002 | | |_______test003 | | | |_______test004
OSはWin98SEです。 何度もすみません。
一度には無理分けて作れ md test cd test md test001 md test002 md test003 md test004
577 :
デフォルトの名無しさん :04/02/24 20:37
md が1個しか引数とれないんじゃ仕方ないんじゃね?
>>575 :md
md %1
@shift
@if not "%1"=="" goto md
>>578 ごめんなさい。
ちょっと記述して貰いたいのですが・・・
ちょっとその記述だけでやってこうなるから・・。
どこに何を記述するか、教えてください。
バカですから、やってしまいました。
結果です。
D:\Temp>:md
D:\Temp>md %1
D:\Temp>@shift
コマンドまたはファイル名が違います
D:\Temp>@if not "%1"=="" goto md
コマンドまたはファイル名が違います
Win98SEでshiftって使えなかったっけ それとも@を付けたのがいけないのか
578は地雷
>>570 FTPソフトに何を使ってるのか分からんが、ダウンロード後に
IF EXIST "filename" GOTO hogehoge
で分岐させりゃ、いいんじゃね?
うまくいかないなら、ダウンロードそのものがうまくいってるのかどうか。
へたすっと、バッチファイル関係ないかも知れないしな。
そもそも製作依頼スレじゃないよな、ここ。
うまくいなかなかったバッチファイルなりを載せないと何をしたいのかも分からん。
質問ヘタならソースで語ってくださいな。
>582 ファイルが途中で切れてもわからない。errorlevelでは拾えない。 FTPサーバのステータスコードを見るしかない。
>>583 すいません。バッチの作り方がまだ、解ってないのです。
申し訳ありません。結局、下記のようにするしかないのかな?
D:\test>md \test\test001
D:\test>md \test\test002
D:\test>md \test\test003
D:\test>md \test\test004
D:\test>md \test\dada
D:\test>md \test\dada
D:\test>md \test\dada\00
そうだよ。つかヘルプ嫁。
やりたいコマンドメモ帳に書き出して .bat で保存しる
>>586 そうですね。
「優しく解る!図解MS-DOS]見てます。
後、「MS-DOSVer.6.2ハンドブックPC-9800シリーズ」
とかWindows XP/2000/ME/98SE DOS/コマンドプロント辞典があります。
>>587 ちょっと挑戦してみます。
unified 形式って何ですか?-cとは違うんですか?
誤爆スマソ
591 :
デフォルトの名無しさん :04/03/01 00:15
00.jpgというファイルを00YYMMDDhhmmss.jpgみたいな感じで 1秒毎にファイル保存していきたいのですが、 そのバッチファイルを作って下さい。 お願いします。
>>591 バッチファイルを作るのは貴方です。
ここは貴方が作っている最中に
分からなくなった所を聞くスレです。
なにが分からないのですか?
593 :
デフォルトの名無しさん :04/03/01 01:06
>>592 指定したファイルを保存するところかな〜
>>593 hhじゃなくてhでいいなら
copy %1 "%~n1%date:~4,2%%date:~7,2%%date:~10,2%%time:~0,2%%time:~3,2%%time:~6,2%%~x1"
ある段階の作業でストップさせ、また残りの続きをさせるにはどういう命令を書けばいいんでしょうか XP付きのブータブルISOを自動でつくるバッチなんですが 自分の環境では1ファイルを大文字にしないとエラーが出てしまうので、イメージにするまえにsp1当てた段階で一度止めたいんです
XPsp1付きのブータブルISOです。スマソ
pause
>>595 素直にバッチファイルを2つに分けてはどうか
599 :
デフォルトの名無しさん :04/03/02 16:03
リモートシェルコマンドで戻り値が返ってくるのですが、 どうやって受け取ったらよいでしょうか? rsh hostname -l user -n command >hoge.txt 上記のコマンドだと、 hoge.txtにはリモートで実行したコマンド(command)の結果が書き込まれてしまうようです。 よろしくお願いします。
>>599 > リモートシェルコマンドで戻り値が返ってくるのですが、
> どうやって受け取ったらよいでしょうか?
> rsh hostname -l user -n command >hoge.txt
>
> 上記のコマンドだと、
> hoge.txtにはリモートで実行したコマンド(command)の結果が書き込まれてしまうようです。
>
> よろしくお願いします。
>
ERRORLEVELで取得出来ました。
601 :
デフォルトの名無しさん :04/03/03 21:13
バッチファイルの引数を「%~1」で受けているのですが、 Win2000Proでは問題ないのですが、WinNT4.0Serverでは引数が取得できません。 引数の修飾子「~」はNTではサポートされていないのでしょうか? ご存じの方いましたら、教えてください。 もうひとつ、 下記ソースはWinNT4.0Serverではエラーになってしまいます。 for /F "tokens=1,2,3 USEBACKQ" %%A in (`find /V /C "" log1.txt`) do set FL=%%C if %FL% == 0 goto NG set /A TAIL=%FL%-1 more +%TAIL% log1.txt >log2.txt log1.txtの最後の1行の内容をlog2.txtに出力します。 Win2000Proだと問題ないのですが、WinNT4.0Serverだと 「USEBACKQの使い方が誤っています」と表示されます。 こちらもご存じの方いましたら教えてください。 よろしくお願いします。
Q1 exeを実行するにはどう書けばいいですか? Q2 キーを押す(例えばF1を押したようにしたい)にはどう書けばいいですか?
603 :
デフォルトの名無しさん :04/03/03 22:06
標準入力に相当する物が見あたらないのですが、 バッチファイル同士でパイプを使うことはできるんでしょうか?
>>601 NTのヘルプに載ってなければ無理なんじゃないの
>>602 A1. たとえばC:\Windows\Calc.exeと書けば電卓が実行される。
A2. たぶん無理。キーを押すというのはメッセージを送れば実現できるけどそれはC言語とかでプログラムを作るしかない。
WSHではできるのかな?
>>603 普通にできるはずだけど。
>>603 > バッチファイル同士でパイプを使うことはできるんでしょうか?
command /c batch1 | command /c batch2
>>604 やっぱりむりですか・・・
では%1で受けた値の両端のダブルクォーテーションを取るにはどうしたら良いのでしょうか?
>>605 ,604
ありがとうございます。
バッチ同士の部分は分かりました。
(バッチファイルへの引数は%1で受け取れるようなのですが、)
command /c batch1 | command /c batch2
としたときに
batch2側でbatch1の標準出力を受け取るにはどうしたらいいのでしょうか?
(
%??に相当する物が存在せず、
copy [con] , set , 一時ファイル 等を使う方法しかないのでしょうか?
)
>>607 バッチ内でパイプを受け取れるコマンドを使えばいい
凝ったことしたければバッチファイルあきらめてPerlとかCygwinとか使った方がいいよ
610 :
デフォルトの名無しさん :04/03/05 00:37
>609 ここは、そこを敢えてバッチファイルでやって玉砕するスレではないか。
>>607 forでいけるんじゃない?
テキストファイル読み込んだりとファイル操作できるし。
612 :
デフォルトの名無しさん :04/03/06 17:38
教えて君でもうしわけないんですが、AドライブのFDからWordを起動する パスを作りたいのですが、できません。 これじゃーだめみたい。 A:\>a:bas\C:\WINDOWS\APPLIC~1\MICROS~1\INSTAL~1\{00010~1\WORDICON.EXE
実行ファイル名は winword.exe じゃないのかなぁ。 試してないけどこんな感じとか。 "C:\Program Files\Microsoft Office\Offic\winword.exe"
A:\>a:bas"C:\Program Files\Microsoft Office\Offic\winword.exe" コマンドまたはファイル名が違います. A:\>a:bas\"C:\Program Files\Microsoft Office\Offic\winword.exe コマンドまたはファイル名が違います. A:\>"C:\Program Files\Microsoft Office\Offic\winword.exe" コマンドまたはファイル名が違います. 3パターン試しましたがだめだったよです。(´・ω・`)ショボーン
パス名の途中がOffic になっているんだけどw
616 :
デフォルトの名無しさん :04/03/07 00:54
> "%ProgramFiles%\Microsoft Office\Office\Winword.exe"
>>615 あ・・・・気が付きませんでした。Officeに直したら出来ました。
>>613 どうも有難う御座いました。
618 :
デフォルトの名無しさん :04/03/07 00:58
>>616 なるほど。その環境変数は知らなかったよ。
ところで(システム|ユーザ)環境変数やらコマンドの動作の違いをOSのバージョンごとに
まとめているサイトとか知りませんが?
>>616 すみません。
やってみました。どこがおかしいのでしょう?
A:\>"%ProgramFiles%\Microsoft Office\Office\Winword.exe"
コマンドまたはファイル名が違います.
>>619 OSのバージョンによっては環境変数 ProgramFiles が定義されていないかもしれないね。
set
または
set | find "ProgramFiles"
で ProgramFiles= で始まる行が表示されるかどうか確認してみては?
OSはWin98SEです。 ちょっと確認してみました。 こんな感じです。 Microsoft(R) Windows 98 (C)Copyright Microsoft Corp 1981-1999. C:\WINDOWS>set | find "ProgramFiles" C:\WINDOWS>set TMP=c:\windows\TEMP TEMP=C:\windows\TEMP PROMPT=$p$g winbootdir=C:\WINDOWS COMSPEC=C:\WINDOWS\COMMAND.COM PATH=C:\WINDOWS;C:\WINDOWS;C:\WINDOWS\COMMAND;C:\PROGRA~1\COMMON~1\AUTODE~1:\D ;C:\JAVA;C:\PROGRA~1\COMMON~1\AUTODE~1:\DOS;C:\APP\JAVA\BIN;C:\JDK1.3\BIN;C:\P GRA~1\COMMON~1\AUTODE~1 windir=C:\WINDOWS BLASTER=A220 I5 D1 T4 CMDLINE=find "ProgramFiles" C:\WINDOWS>
ということで、Win98では %ProgramFiles% は使えないことがわかったですか?
関係ないが、612のJava環境のインストール状況が気になる。
> C:\PROGRA~1\COMMON~1\AUTODE~1:\D AUTODE~1 って AutoCadか? コロンが含まれているから無効なパスに見えるが。
627 :
デフォルトの名無しさん :04/03/07 23:22
…しっちゃかめっちゃかな設定だな…
>>627 「path %path%」の部分が不要
それと
>>626 の言う通り、
「C:\PROGRA~1\COMMON~1\AUTODE~1:\DOS;」
の部分がおかしい。(「:\DOS」の前にセミコロン;とドライブ名が抜けてる?)
アセンブラやる前にもう少しDOS(コマンドプロンプト)の勉強もした方が
良いんではないかと・・・
>>629 ども・・・・。
おっしゃるとおり、DOSの勉強を進めていったほうが良いですね。
>「C:\PROGRA~1\COMMON~1\AUTODE~1:\DOS;」
うーん・・・これは、私にも分かりません。
AuotCAdは、普通にCDからのインストールをしたので
私は、そのような記述をしてません。(それ以前にわからないです。)
AuotCAdは、使ってないからアンインソトールしました。
その記述部分を削ってもいいって事でしょうか?
631 :
デフォルトの名無しさん :04/03/09 13:19
age
C言語でソースプログラムをコンパイルするという一連の流れの中でアセンブルの後の「リンク」とはいったい何をしているのか教えてください。できるだけ詳しく。優秀なプログラマーさんお願いします。
スレ違い wdic.orgで調べれ
635 :
デフォルトの名無しさん :04/03/10 14:18
age
636 :
デフォルトの名無しさん :04/03/10 19:30
age
637 :
デフォルトの名無しさん :04/03/11 00:45
急で申しわけないですが、Win98SEにSYMDEBを利用してCOMファイルを作成したい のですが、手元にある書物がNECの「PC-9801シリーズ」を対象にしてるので 記述どおりの事をやっても出来ません。 私のOSでは無理なんでしょうか?
>>634 Win9xはC:ドライブ固定ですかそうですか
>>640 しかも
>>634 の一覧表のWin98で%comspec%は
C:\WINDOWS\COMMAND.COM
なのに一番下の実例では
@echo off
if "%comspec%"=="" goto unknown
if "%comspec%"=="c:\command.com" goto Win9x
if "%comspec%"=="%systemroot%\system32\cmd.exe" goto WinNT
((((;゚Д゚)))ガクガクブルブル
%WINDIR%\COMMAND.COMにしろよ
642 :
デフォルトの名無しさん :04/03/14 17:13
以下のファイル(TREG.ini)を編集したり、参照したりするバッチ(TREG.bat) を作ったのですが、編集処理(ラベル :DEBUG,:HISTORY,:SIZE,:SENDMSG)の あと、:FIN→:EOFとしているのですが、なぜか:EOF→:FINとgotoされてしま います。 問題はどこでしょうか?? ///TREG.ini ###############################################; # 定義ファイル #; ###############################################; HISTORY=10; SIZE=101376; DEBUG=on; SENDMSG=*;
643 :
treg.bat 1/4 :04/03/14 17:15
@echo on setlocal set WORKDIR=%~dp0 :**************************************** if /i "%1"=="/?" (goto :INFO ) else if /i "%1"=="/D" (@set PRM1=DEBUG ) else if /i "%1"=="/H" (@set PRM1=HISTORY ) else if /i "%1"=="/S" (@set PRM1=SIZE ) else if /i "%1"=="/M" (@set PRM1=SENDMSG ) else if /i "%1"=="/V" (goto :VIEW ) else (goto :ERORR) set PRM2=%2% goto :%PRM1% :**************************************** :DEBUG if /i "%PRM2%"=="ON" (call :GET_INI )else if /i "%PRM2%"=="OFF" (call :GET_INI )else (goto :ERORR) :_DEBUG goto :FIN
644 :
treg.bat 2/4 :04/03/14 17:15
:**************************************** :HISTORY set /a PRM2=%PRM2%/1 if errorlevel 9163 goto :ERORR if /i %PRM2% GTR 100 (goto :ERORR ) else if /i %PRM2% LSS 0 (goto :ERORR) call :GET_INI :_HISTORY goto :FIN :**************************************** :SIZE set /a BUFFER=%PRM2%/1 if errorlevel 9163 goto :ERORR if /i %PRM2% GTR 1000 (goto :ERORR ) else if /i %PRM2% LSS 10 (goto :ERORR) set /a BUFFER=%PRM2% set /a PRM2=%PRM2%*1024-1024 call :GET_INI :_SIZE set /a PRM2=%BUFFER% ECHO !! goto :FIN
645 :
treg.bat 3/4 :04/03/14 17:16
:**************************************** :ERORR echo オプションが不適当です。 :**************************************** :INFO echo 形式:TREGini [/d {0〜100}] [/h {10〜1000}] [/d {on^|off}] [/m compute名][/?] [/v] goto :END :**************************************** :VIEW type %WORKDIR%TREG.INI goto :END :**************************************** :FIN del %WORKDIR%TREG.BAK echo %PRM1%=%PRM2% に変更しました。 :END goto :EOF
646 :
treg.bat 4/4 :04/03/14 17:17
:**************************************** :GET_INI rename %WORKDIR%TREG.INI TREG.BAK for /f "tokens=1 delims=;" %%a in (%WORKDIR%TREG.BAK) do (@set LINE=%%a&& call :GET_SUB) goto :_%PRM1% :**************************************** :GET_SUB for /f "eol=# tokens=1,2* delims= " %%c in ('ECHO %LINE%') do (@set HEAD=%%c&& @set VALUE=%%d) if /i "%HEAD%"=="%PRM1%" set VALUE=%PRM2% if /i "%HEAD%"=="%PRM1%" set LINE=%HEAD%^=%VALUE% echo %LINE%; >> %WORKDIR%TREG.INI set LINE= set HEAD= set VALUE=
申し送れましたが、Windows2000 Pro SP4 環境です。
>>642 長いんでよく見てないが、:GET_INI の最後は
goto :_%PRM1% → goto :EOF
では?
>>648 さん、642です。
:SIZEの処理の場合は、set /a PRM2=%BUFFER%の処理を行うために。
また、:FINで変更が行われたことを表示させることも行うために
goto :_%PRM1%としています。
上げてしまった・・・
651 :
デフォルトの名無しさん :04/03/14 21:52
>>649 call の使い方はちゃんと理解してる?
CALL :ラベル 引数
指定された引数で新しいバッチ ファイル コンテキストが作成され、指定
されたラベルの次の文に制御が渡されます。バッチ スクリプト ファイルの
最後に 2 回到達することによって、2 回 "終了" する必要があります。
1 回目に最後に到達したときには、制御は CALL 文の次の行に返されます。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 回目に、バッチ スクリプトが終了します。バッチ スクリプトから "戻る"
ための GOTO :EOF 拡張機能の説明については、GOTO /? と入力してください。
@echo off
call :label_c
call :label_b
call :label_a
goto :EOF
:label_a
echo aaa
goto :EOF
:label_b
echo bbb
goto :EOF
:label_c
echo ccc
goto :EOF
>>651 適切なご指摘ありがとうございます。
肝心なところを理解していませんでした。
以下のように変更し、正常動作を確認しました。
:****************************************
:GET_INI
rename %WORKDIR%TREG.INI TREG.BAK
for /f "tokens=1 delims=;" %%a in (%WORKDIR%TREG.BAK) do (@set LINE=%%a&& call :GET_SUB)
goto :EOF
質問です。 バッチファイル中でスリープってできないんですか? 10秒(厳密でなくても可)だけ待ちたい。 次のようなことを思いついたが、なんかきれいではないような気がして、、、 WSHでスリープしそれをcall CでもJavaでもスリープするだけのプログラムを作りそれをcall
@echo off choice /c:x /t:x,10 | echo. x押されたらどうしょうもないけど ついでにNT系はchoiceなかったっけ
漏れは 某所の deltree.exe と choice.exe をいれているがな。
%time%の秒の部分が10回変化したら
レスありがとうございます。 >657 ネイティブのバッチ(用語的に正しい?)以外は環境的に厳しいのです。 本当は詳細な環境要件があるんですけれども省略させてください。 あとプログラマとしての探求的なものもあるんですけどね。 >658 なるほど 作ってみました @ECHO OFF SET SS=%TIME:~6,2% SET MYCNT=0 :LOOP SET NOW=%TIME:~6,2% IF %SS%==%NOW% GOTO :NOTCNT SET /A MYCNT=MYCNT+1 SET SS=%NOW% GOTO :NOTCNT :NOTCNT IF %MYCNT%==10 GOTO :END GOTO :LOOP :END 最後のif文の数字で秒数変更できます。引数にしたほうが汎用的ではあります。 何行かスリムにもできますが、ロジック的には以上ということで、、、
> GOTO :NOTCNT > :NOTCNT とか > IF %MYCNT%==10 GOTO :END > GOTO :LOOP > :END とかわざわざわかりにくく書かなくてもいいと思うぞ。 @ECHO OFF SET SS=%TIME:~6,2% SET MYCNT=0 :LOOP SET NOW=%TIME:~6,2% IF %SS%==%NOW% GOTO :LOOP SET /A MYCNT=MYCNT+1 SET SS=%NOW% IF %MYCNT% LEQ 10 GOTO :LOOP ぐらいで充分かと。あとお行儀的には、setlocal/endlocal で括るといいかも。
hosyu
662 :
デフォルトの名無しさん :04/04/13 00:49
すいません。こんなバッチファイルがあったらなーと思う物があります。 ある特定のフォルダにあるファイル郡のなかから*.txtというファイルのみを 同名で保存する。つまり更新日時のみ最新になるという風なバッチファイルは どのようにすればよいのでしょうか?同名ファイルにリネームすればよいとは 思うのですが、ファイルを検索するのはどのようにすればよいのでしょうか? (for文?)ご教授お願いします。
663 :
デフォルトの名無しさん :04/04/13 01:23
質問です リダイレクトを使ってバッチ処理のログを保存していますが、 普通に command > hoge.txt ってやると画面上には出力されなくなってしまいますよね。 画面上にも出力して、ファイルにも(同時に)保存って出来ます? ant > build.log & type build.log ってのもなんだか・・
>> 663 それは無理。バッチ、echo、標準コマンドはstdoutなので リダイレクトされてしまう。 解決策としてはリダイレクトを使わない方法をとる。 たとえばxtr,sed/awk,tcl/ckのようなスクリプト言語を組み合わせる。 あるいは別の言語で組むのが良いかと。一番簡単なのは コンソールロギングツール。例をいえばXscriptを 使うことなんだけどAT版は無い。
>> 663 バッチ単体では無理だね。最低でも正規表現ツールやら Batch Jack,Basic Preprosessor(BPP),BU必携。 そういうのはバッチではなくawk/perlなどのスクリプト言語で 組んだほうが楽だよ。おそらく、どんどん機能追加していきたくなるからね。 かくいうオレはバッチでInput Method組んだことがあるが 500行くらいになるとスパゲッティになってメンテできなくなる。 いくら変数を構造体変数風(e.g. set global.line.editmode)に してもBATCPのongoto〜return使おうがbppで分割しようが状況は改善しない。 って今、そいつを他の言語で移植すべく分析で苦労している。 ああ。バッチでOO使える方法(海外サイトを検索してみよう)はあるんだが さすがにソース分割や構造化プログラミングを組み合わせると もはやバッチとはいえなくなってしまう。長いので以下略。
666 :
デフォルトの名無しさん :04/04/13 22:20
↑ダミアソ
やはり駄目ですか・・・
dir > con > hoge.txt
con < dir > hoge.txt
とか色々やってしまった。ハズカシイ
>>666 tee イイ!
こーゆー事がしたかったんです!thx!
669 :
デフォルトの名無しさん :04/04/18 11:25
>>669 内容全然読んでないけど、「DISP.DATとういうファイルを作ります」なんて全角で書いてる時点で、俺なら信用しない。
>>670 えーっと・・
申し訳ありません。「DISP.DAT」ですか?
そこまで気が付きませんでした。
ちょっとそのHPのソースをCでコンパイルしたらエラーになりました。
{ for (i=1;i<=NF;i++){ if ($i=="全<長さ"){ len=$(i+2); writeSw=1; } if ($i=="[ネット名") net=$(i+1); sub("]","",net); if (sub("+","",net)==1) net=net "+"; if (sub("/","",net)==1) net=net "/"; } if (writeSw==1) print net " , " len > "temp.000"; writeSw=0; } END{ system ("ssort < temp.000 > netlen.csv"); }
E:\c\Bin>bcc32 dos1.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland dos1.c: エラー E2040 dos1.c 1: 宣言が正しく終了していない エラー E2206 dos1.c 3: 不正な文字 '$' (0x24) エラー E2206 dos1.c 4: 不正な文字 '$' (0x24) エラー E2206 dos1.c 7: 不正な文字 '$' (0x24) エラー E2206 dos1.c 7: 不正な文字 '$' (0x24) *** 5 errors in Compile *** E:\c\Bin>
>>671 HPの中身読んでないだろ…
DISP.DATはDREAMCADっていうソフトで作成するんだろ?
しかも、そのスクリプトってDISP.DATに全然関係なくて、
Cじゃなくてawkのスクリプトなんだが…
もしかして、俺釣られてる?
>>674 すみませんでした。
違うスレに逝ってきます。
一体どのスレでどんな風に質問する気なのか、非常に気になる。
やっぱりこの質問は、2ちゃんでは止めときます。 さよなら〜〜〜〜〜〜〜〜
Windows98 上で動かすバッチファイルで SET コマンドを使ったとき、 イコール記号を含む文字列を変数に入れようとすると、「構文が違います」と言われてしまいます。 イコールを含むようなものは代入できないのでしょうか。 例 SET HOGE="ABC=DEF"
>> 678 対策としてBU使ったらどうかな? 上は構文エラーになる。=はどこがトークンか判断できないからね。 ちなみに""で括っても意味はないよ。 バッチでは変数はすべて文字列で評価されるからね。
681 :
デフォルトの名無しさん :04/05/01 00:12
このバッチファイルのどこがおかしいか教えてください。 REM カレントディレクトリにある拡張子がTXTのファイルをフロッピーにコピーするバッチファイル @ECHO OFF COPY *.TXT A:\ >NUL 実行した結果ですが、MS-DOS アプリケーションへのショートカット(me) が出来てるだけ・・・・。 C:\My Documents>me C:\My Documents>REM カレントディレクトリにある拡張子がTXTのファイルをフロッピー にコピーするバッチファイル C:\My Documents>
echoとcopyを別の行に分けたら
>> 682 ついでにremの位置も間違えていますよ。 @echo off(DOS3ではecho off)はバッチファイルの一行目が定石です。 文字列表示したいならechoを使いましょう。 echo.で空白行にもなります。 なお、remはラベルで代用して使うこともできます。 そのさい、既存のラベル(gotoで使用するもの)と 衝突しないように注意してください。 e.g.) :: これはコメントですよ。 その他、goto〜:labelの空白行をコメント領域として使うことができます。 BatchJack使えばコメントをC++風に置けるんですが Preprocessor使うのは面倒ですよね。 e.g.) goto label コメント・・・いや、その件は :label 最後にプログラミングのドツボはつまらないコーディングミスが大半です。 詰まったら、しばらく忘れて他のことでもしましょう。
685 :
デフォルトの名無しさん :04/05/01 03:45
バッチファイルで 「キーを押すとそのアスキーコードを表示するプログラム」 できまつか? よろしくおながいしまつ。
>> 685 ScanCode? 可能だよ。xtrかBUを使いましょう。 ただし、AT互換機の場合は特殊キーは2バイトキーコードなので 1バイト目がNULL(0)であれば2バイト目を読む必要がある。 例)BUによるGetchの例 (xtrの場合はコード変換が入るが、基本は同じ。 面倒ならTurbo C2.0のgetch関数を使って作成... 変数ふたつと条件分岐だけで作成可能) @echo off bu -e -nBYTE1 keycode if "%BYTE1%"=="0" bu -e -nBYTE2 keycode bu echo %BYTE1% if not "%BYTE2%"=="" bu echo %BYTE2% echo\ set BYTE1= set BYTE2= それとScanCode表はWindows9x付属の文字コード表を参考にしましょう。 (まあ、!〜~の範囲をデシマルで出力すればいいんだけどね)
>>683-684 有難う御座います。
ちょっと、訂正して実行しました。
@ECHO OFF カレントディレクトリにある拡張子がTXTのファイルをフロッピーにコピーするバッチファイル
REM
COPY *.TXT A:\ >NUL
C:\My Documents>REM
C:\My Documents> COPY *.TXT A:\ >NUL
準備ができていません. 読み取り中 ドライブ A:
中止 (A), 再試行 (R), 失敗 (F)?r
C:\My Documents>
C:\My Documents>
これが参考にしてる結果です。
同じですか?
REM 処理確認してコピーする ECHO このディレクトリの中にあるTXTファイルをフロッピーにコピーします。
ECHO ディスクをドライブにセットしてからどれかキーを押してください。
PAUSE >NUL
COPY *.TXT A:\
>686 tan x. MS-DOS附属の BATKEY.COM しかないんでつが...
689 :
reboot.asm :04/05/01 15:06
>204 CODE segment assume cs:CODE, ds:CODE org 100h START: mov ah,4ch ; B4 4C ;エL int 21h ; CD 21 ;ヘ! CODE ends end START errorlevel をリセットするコマンド?
1. ftpでデータを取得するバッチファイルを動的に作成(temp.bat) 2. shellでtemp.batを起動。(プロセスIDをとって、終了まで待機) 3. 数分おきに繰り返す。 というようなプログラムを作ってます。 ところがまれにcmd.exeが終了せずに処理が止まってしまいます。 そこで、途中で止まっているtemp.batを 強制終了させたいのですが、どうすればよいのでしょう? calc.exeを起動して、終了させるサンプルプログラムを 使ってもうまくいきません。 (calc.exeのかわりにtemp.batを起動・終了させようとしても 起動するだけで終了しません) 「ftp」とだけ記述されたバッチファイルを 起動・終了させる例を示していただけると助かります。
↑ソフト本体はvb6でつくってます。 ここに書き込むのが適当なのか分かりませんが、 よろしくお願いします。
690 スレ違い|マルチ 氏ね
デフォルトの名無し様 すみませんでした。失礼します。
>>695 丁重なアドバイス、有難う御座います。
もうちょっと、学習してみます。
698 :
685,688 :04/05/01 23:23
>>694 丁重なアドバイス、有難う御座います。。。
もうちょっと、学習してみます。。。
699 :
デフォルトの名無しさん :04/05/02 12:54
バッチファイルで 「errorlevelを10進表示するプログラム」 できまつか? よろしくおながいしまつ。
echo %errorlevel%って10進じゃないの?
10進だな。 Win32ではリターンコードも32bitなんだな。知らんかった。
702 :
デフォルトの名無しさん :04/05/02 19:42
>700 ECHO は ON
>>695 さん
そのHPの文字に色をつけるバッチファイルですが、
@echo off
@echo off [30mY [1;30mY [0m
@echo off [31mY [1;31mY [0m
@echo off [32mY [1;32mY [0m
@echo off [33mY [1;33mY [0m
@echo off [34mY [1;34mY [0m
@echo off [35mY [1;35mY [0m
@echo off [36mY [1;36mY [0m
@echo off [37mY [1;37mY [0m
echo.
@echo off [40mY [0m
@echo off [41mY [0m
@echo off [42mY [0m
@echo off [43mY [0m
@echo off [44mY [0m
@echo off [45mY [0m
@echo off [46mY [0m
@echo off [47mY [0m
結果です。 A:\> OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF A:\>
同じになりません。 OSは、Win98SEです。 98じゃないからですか?
いや、「結果です」と言われても…
>>704 バイナリエディタで[の前が1Bになっているのを確認したか?
@echo offは文頭に1つでいいだろ
>>705 もしかしてコピペの仕方知らないの
710 :
デフォルトの名無しさん :04/05/05 00:46
712 :
デフォルトの名無しさん :04/05/15 22:06
質問です 指定した複数のファイルやフォルダの容量を調べて まとめた容量を表示するにはどうすればいいのでしょうか?
>>712 for /?
%~zI - %I ファイルのサイズに展開します。
あとは足すだけ。
おまけ set /? SET コマンドには、2 つの新しいスイッチが追加されています: SET /A 式 SET /P 変数=[プロンプト文字列] /A スイッチは、等号の右側の文字列が、評価すべき数式であることを 指定します。式の評価はごく単純で、次の操作がサポートされます。 操作は、優先順位の高い順に示されています: () - グループ化 * / % - 算術演算子 + - - 算術演算子 << >> - 論理シフト & - ビット演算子 AND ^ - ビット演算子排他的 OR | - ビット演算子 OR = *= /= %= += -= - 代入 &= ^= |= <<= >>= , - 式の区切り記号
716 :
デフォルトの名無しさん :04/05/16 20:31
set で定義した変数は環境変数に追加されるんですか?ヘルプみてもわからなかったんで。スマソ。
717 :
教えてください :04/05/17 23:27
バッチファイルでバッチファイルを呼び出すと 一つ目しか実行しません。 なんとかならないものでしょうか。
call YourBatch.bat
>>716 SETは「環境変数を設定するコマンド」なんだが・・・。
ただしNT系の場合、SETを使ったコンソールの中でのみ有効。
9x系の場合は忘れた。
>>717 意味がよく分からんがとりあえず CALLを使え。
720 :
デフォルトの名無しさん :04/05/18 00:16
721 :
デフォルトの名無しさん :04/05/18 08:25
カレントディレクトリの9152バイトのファイルだけを削除するのってどうやるの?
@echo off rem メガネ男を削除する setlocal set nydir=C:\bin\winny2b71 :loop cd %nydir%\down for %%f in (*) do ( if "%%~zf"=="9152" ( echo deleting... %%~zf %%f del "%%f" ) ) cd %nydir%\cache for %%f in (*) do ( if "%%~zf"=="9489" ( echo deleting... %%~zf %%f del "%%f" ) ) rem もしcygwinが入っているなら sleep 6 && goto loop
723 :
デフォルトの名無しさん :04/05/18 23:06
725 :
デフォルトの名無しさん :04/05/18 23:22
すいません バッチファイル押下時に ファイルに現在の時刻を出力するにはどうすればいいのでしょうか? またWindowsのシャットダウン時にその時間を出力させることは可能でしょうか?
726 :
デフォルトの名無しさん :04/05/18 23:32
723です。724さん、すみません。 ブラウザの種類を書き忘れました。デフォルトでNetscape Communicator 4.75以上を 使っている場合の話なんです。この場合はどのようにすればよいのでしょう。 IEは対象外としてます。
727 :
デフォルトの名無しさん :04/05/18 23:37
>725 date /T > aho.txt time /T >> aho.txt shutdown って書けばいいんでは?
728 :
デフォルトの名無しさん :04/05/19 00:05
指定されたフォルダの中の指定の容量以下のものを削除したいとき また指定されたフォルダの指定の拡張子を削除させるには それぞれどうすればいいのでしょうか
729 :
デフォルトの名無しさん :04/05/19 17:50
バッチファイルで各プロセスのアクティブなサービスを表示させたいのですがうまくいかないので教えて下さい。OSは2000です。
730 :
デフォルトの名無しさん :04/05/19 21:04
すいません簡単な質問ですが 教えてください ファイルに書き込む時改行しないで続けて横に書き込みたいときどうすればいいのでしょうか? たとえば @echo off echo あいうえお echo かきくけこ こう書けば改行されますが これを あいうえお かきくけこ みたいにしたいのです 教えてください
改行なしのechoなどない 変数にどんどん足していって一度にechoとかやるしかない
>>728 >指定されたフォルダの中の指定の容量以下のものを削除したいとき
>また指定されたフォルダの指定の拡張子を削除させるには
両方いっぺんに指定できるバッチ例 for 2000/XP(未検証スマソ)
REM delfile.bat 指定フォルダ 指定ファイルサイズ [拡張子]
@echo off
set dir=.
set size=0
set ext=*
if not "%1"=="" set dir=%1
if not "%2"=="" set size=%2
if not "%3"=="" set ext=%3
for %%F in ( %dir%\*.%ext% ) do (
if %%~zF LEQ %size% del %%F
)
>指定されたフォルダの指定の拡張子を削除させるには
これだけなら、指定されたフォルダ(=c:\test) 指定の拡張子(txt)として
del c:\test\*.txt
で済む罠。
>> 719
追記しておくと、callつかわなくてもできるけど面倒だな。
ちなみにDOS3以下ではcommand /c [batch.bat]でできるが
子プロセス側の環境変数は親プロセスに継承されない。
>> 730
C言語であればprintfでできます。
バッチの場合はBU[
>>694 ]を入手してprintfでやりましょう。
>>731 さんの方法では、環境変数領域が不足することが考えられますので
お勧めしません。ただし。表示個数が少ない、環境変数領域を多めに
指定している場合は除きます。
BU入れるならWSHかCygwinのコマンド郡使ったほうがいいだろ。
735 :
デフォルトの名無しさん :04/05/22 01:21
バッチでコピー処理をしたいとき ディレクトリ/ファイルの選択をしないようにするにはどうすればいいのでしょうか? たとえば xcopy "C:\test\test1\testfolda" "D:\test\test1\testfolda /s とあるとき それがファイルかディレクトリかをいちいち聞いてくるのですが これを聞かれずに全部ディレクトリで流したいときどうすればいいのでしょうか?
737 :
デフォルトの名無しさん :04/05/22 10:36
よぉぉぉぉおおおおおおおおおおおおおおおおおし2げとずさー 記念age
739 :
デフォルトの名無しさん :04/05/22 21:18
【質問】バッチでchdirやpathコマンドを使用しても、バッチが終了すると元に戻ってしまいます。どうすればいいんでしょうか?WinXPのDOS窓でやってます。神様ご教授を
>>739 まさか、Explorerから起動してないよね?
cmd.exe / command.comからではないと無理だよ。
>> 739 おおまじぼけしてしまった。 えっと、無理なので。どうしてもやりたければstartコマンド 使ってください。CDはどうにかなるでしょう。 pathの変更はコマンドライン終了したら保持されません。 名前を指定して実行でパス入れるとフォルダ開けますね。
743 :
デフォルトの名無しさん :04/05/22 21:51
ありがとうございます739です。 【名前を指定して実行】でcommand.comを実行してDOS窓開いています。 あるコマンドラインツール(コンパイラです)を使うために、ルートから、 あるディレクトリに移行し、pathも追加したいのです。これをバッチでやり たいのです。毎回コマンドラインでやるのはあまりに大変ですので。 よってcdもpathも、command.com終わらない限り保持したいのですが無理でしょうか>
744 :
デフォルトの名無しさん :04/05/22 21:57
739です。 742様ありがとうございました。【アクセサリ→コマンドプロンプト】でDOS窓を開いた場合は保持できました。
745 :
デフォルトの名無しさん :04/05/23 00:29
コマンド実行してその標準出力を環境変数にセットしたりコマンドラインの引数に渡したりすることはできますか? shとかの prog `cat text.txt` のようなことをやりたいです。
>>2 バッタだよ とツッコミをいれてほしかったのか?
>> 743 pathはテキストファイルに保存することができます。 開始・終了用のバッチファイルを作成してやればいいわけで。 [aexit.bat] @echo off path>C:\restpath.bat exit [aresume.bat] if exist C:\restpath.bat call C:\restpath.bat あとはcommand.comに対して右クリック>プロパティ>プログラム >バッチファイルにaresume.batを実行するようにすればpathが保存されます。 終了はaexitから行ってください。 問題のほうcdなんですが、御所望のツールは知りません。 ディレクトリ(フォルダ)の移動をファイルに保存して おくようなツールを作ればないこともないのですが・・・。 欲しいのでしたらパブリックドメインで作ります。 著作権主張するようなものではないですからね。
>>749 for /F "usebackq tokens=*" %i in (`cat text.txt`) do @prog %i
とか。 ただし、出力が複数行にわたる場合は結合されずに
1行ごとにprogが実行されるので注意が必要。
751 :
デフォルトの名無しさん :04/06/03 04:02
■自分自身を再起動する裏技 @echo off rem 自分自身の:mainを呼び出す。 rem リダイレクトしたり最後にpauseしたりいろいろ。 call :main %0 > C:\log.txt pause echo done exit :main echo hello ■pauseのメッセージを変更する裏技 echo 終了します && pause>NUL
>>751 裏技・・・かぁ。。。PC-98全盛期には普通に使われていたのだが。。。
アプリの起動バッチの最後に特定のバッチファイルの起動を記述して
おいて、アプリの中でそのバッチファイルを生成してから終了すれば
メモリ常駐0のランチャになるとか。
753 :
デフォルトの名無しさん :04/06/04 10:45
WindowsXP標準でコマンドラインで 指定したディレクトリ以下のファイルをzipに圧縮するのってどうやるの? cabarcの.zip版みたいなの。
754 :
デフォルトの名無しさん :04/06/04 21:13
command.com の echo で > とか < を表示するにはどうしたらいいですか? 普通にやるとファイルへリダイレクトしてしまいます。
echo コマンドでパイプ (|) またはリダイレクト文字 (< または >) を表示するには、パイプまたはリダイレクト文字の直前にキャレットを付けます (^>、^<、^| )。キャレット文字そのものを使う必要がある場合は、キャレット文字を 2 つ入力します (^^)。
あっ、 command.com は windows me の command.com です。
>>196 echo"hoge@"
で一旦BATファイルを作った後、バイナリエディタで40(@)を00へ書き換えると
hogeだけが表示されるっていうのをどこかで見た。
759 :
デフォルトの名無しさん :04/06/09 02:09
突然ですが、WindowsNTで SET /Pのようなコマンドってないか知ってる方 いますか?
760 :
デフォルトの名無しさん :04/06/09 02:41
759より 誰か。。。知ってる方いませんでしょうか? 朝までに何とかしないと。。。(涙)
761 :
デフォルトの名無しさん :04/06/09 08:49
>>760 応急処置でよければ、コントロールパネル>システム>環境変数があるんでそこに突っ込みたい定義いれてなんかのボタンを押せば
環境変数をスキに追加できたような。
BATファイルでやっても、窓閉じたら消えちゃうからね。
動的になんかやりたいなら他の人たのむ。
762 :
デフォルトの名無しさん :04/06/13 09:32
バッチ処理などで、あるジョブが失敗したら このルートでジョブを流すなど設定できる ジョブ管理ソフトって無いでしょうか? マイクロソフト製品限定で。 よろしくお願いします。
任意のファイルを任意の回数コピーするバッチを作りたいです。 たとえば hoge.bat in.txt 5 >out.txt を実行すると copy in.txt+in.txt+in.txt+in.txt+in.txt >out.txt と同様の結果になる。
callってどうやっても機能そのままで省略できないの? foo.exeをラップしてfoo.batをバッチであることを意識しないで呼び出したいんだけど。
767 :
デフォルトの名無しさん :04/07/07 17:28
NTサーバのログオンバッチで,クライアントのファイル(例:C:\test\foge.ini)内の3行目(例:text=20)をtext=020(頭にゼロを入れる)と置換したいのですが,何か方法がありますでしょうか?
for使ってファイルを読んで、setで置換でいけるんじゃない?
769 :
デフォルトの名無しさん :04/07/07 23:13
済みませんが,具体的にお教え願います。 ファイルを読み込むということをしたことが無いので。 コピーならあるんですが。。。
>>769 「スタート」→「ヘルプ」→「キーワード」→for
「コマンドプロンプト」→for /?
772 :
名無しさん@そうだ選挙に行こう :04/07/11 10:55
バッチを実行すると現在の日次(yyyymmddhh24miss形式)でファイルを作成したいのですが こういう事って可能でしょうか? 教えてください。
日付をファイル名に含める set fdate=%date:~0,4%%date:~5,2%%date:~8,2% set ftime=%time% if not "%ftime:~0,1%"==" " set ftime=%ftime:~0,2%%ftime:~3,2%%ftime:~6,2% if "%ftime:~0,1%"==" " set ftime=0%ftime:~1,1%%ftime:~3,2%%ftime:~6,2% echo %fdate% - %ftime%
774 :
名無しさん@そうだ選挙に行こう :04/07/11 11:02
>>773 ありがとうございました。
でもそんなに難しいのですね(T-T)
最近の人は BATCP や BU を知らんのかのぉ。
拾い食いは飼い主様に禁じられているので
777 :
デフォルトの名無しさん :04/07/12 01:19
実行すると、現在日時でファイルが作成されるというもの。 作成されるファイルは、とりあえずテキストファイルで構いません。
778 :
デフォルトの名無しさん :04/07/12 01:36
.batファイルと.cmdファイルの違いはなんですか?
.batはシェルがcommand.comだった時代に出来たもの。 .cmdはMSとIBMが仲がよかった時代OS/2 Ver1.xのシェルであるcmd.exe のために生まれそのままWinNTに引き継がれたもの。
で、.batファイルと.cmdファイルの違いはなんですか?
拡張子が違う
cmdはNTだけ。NT限定バッチならこっちにするのが吉かも
783 :
デフォルトの名無しさん :04/07/18 07:46
すみません、Windowsスレから誘導されてきました。 cmd.exe上で標準出力を環境変数に代入する方法って何かありますでしょうか? あるいは、cmd.exe上でbu.comが動かないのですが、cmd上で動くバージョンとかあるのでしょうか?
784 :
デフォルトの名無しさん :04/07/18 08:01
DIRENT=`dir`
785 :
デフォルトの名無しさん :04/07/18 09:51
Win2000でパスの設定をするバッチファイルを作ったのだけど、 コマンドプロンプトから実行するとちゃんと設定されるのに、 ファイルをダブルクリックだとなぜか設定できません。 (echo,pause等は動いてるので、中身の実行自体は されているようです) 何か特別な事しないとダメですか?
>>785 たぶんその設定は一時的なものでダブルクリックしたときのコンソールウィンドウが閉じた時点で設定が破棄されているんじゃないのか?
787 :
デフォルトの名無しさん :04/07/18 20:47
>>786 うーん確かにそんな気もします。
バッチファイルで恒久的にパス設定する方法ってあるのでしょうか?
PCが苦手な多数の人たちの使うPCで、パスを設定しないとまずいので、
できるだけ操作する人に簡単な方法で設定できるようにしたいのです。
>>787 >バッチファイルで恒久的にパス設定する方法ってあるのでしょうか?
autoexec.batに書いとけばいいですよ。
私の質問の答えもお願い。
>>784 は私に?
Windows2000上でAUTOEXEC.BATって使用できるの? 自分は以下の.regファイルを作成し、実行してレジストリを直接書き換えてる。 バッチファイルでの解決方法でなくてスマン。 【ユーザ環境変数設定.reg】 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Environment] "環境変数名"="値" 【システム環境変数設定.reg】 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] "環境変数名"="値"
,.r<弌ヾヾヾヾヾヾ`ト`、-、__ /-ニニヘヾヾヾヾヾヾヾヾヾヾ`ー-、 ./ー二e `゙ `゙ ゙`ヾヾヾヾヾヾヾヾ、シナヘ 仁一彡 ゙、ヾ、ヾヾ ゙ヘイ〃メ入 f‐ニ=ツ ,.' - 、 __ チ彡ニ┤ !彡ニヽ ` ー -- 二 _ー_-- 三ニ-} V;〃ラ /〃ニー  ̄ メ二ーヲ ハテj ,. ニ、 、 、tヘヾi、 ヾミニソ .l. レ < (・) > .; .;:' ,.= 、 lミ,‐ヲ ! l 、  ̄ ,! .i < (・) > レ' ノ l ト 、 ` '"´ ,! l 、  ̄ , : ,j `1゙ヽ ,! l ` ´ ,.イ ,/ l '; ,.:' (´,、 ,. ヽヾ ,.:' /` .| ; ,:' ` ´ ′ヽ ,.' / ! ; ,.' _,,,_ __ ; ;' / ', ゙、"ー-ニニニ=ヽ ,.' / ヽヾ `ー--'''ー-一''′ / `ヽ、 、 _ノ/ ` ー--一''''"´ 94年に仙台の緑ヶ丘に住んでいる わしの妹のところに無言電話をかけてきたやつは許さん 電話会社に通信傍受させるぞ
>>789 Windows2000にautoexec.bat作って
path=
でpathを追加してます。
もちろん、cmd.exeを開けば、pathをいつでも覚えていますよ。
レジストリでパス設定できるんですね、全然わからんけど・・・・・
ログファイルAの最後の行とログファイルBの最初の行の比較を行いたいんですが それぞれ抽出可能でしょうか?
>>793 for /f "delims=" %%a in (A.log) do @echo %%a >aaa
for /f "delims=" %%z in (B.log) do @echo %%z>zzz & goto fc
:fc
fc aaa zzz
回答ありがとうございました。 ただこの処理では得たい結果が得られませんでした。 したい処理は、 log1.csv の最終行の第一トークンの取得 set old_no=結果 log2.csv の最初の行の第一トークンの取得 set newno=結果 set /a new_no=%newno%-1 if %old_no%==%new_no% goto end_step goto chk_err こんな感じでログがきちんと連番で取れているかの確認が行いたいです。 よろしくお願いします。
>>795 @echo off
for /f "delims=," %%a in (log1.csv) do set old_no=%%a
for /f "delims=," %%a in (log2.csv) do set new_no=%%a&goto fc
:fc
set /a new_no = new_no - 1
echo %old_no%==%new_no%
>>796 納得です、for文のdo コマンド部分で&を用いて1回目の処理で抜けるわけですね。
最終行のデータはやはりこのかたちになりますか。
データが多いとき処理時間が気になりますがバッチの限界ですかね。
ともあれ助かりました。
お聞きしたいのですが、 echo 処理選択メニュー echo 1.在庫データ取得 echo 2.出庫データ取得 echo 3.入庫データ取得 と、表示して処理を選択したいのですが、どうすれば良いでしょうか 教えてください、Win2000です。
801 :
デフォルトの名無しさん :04/07/28 23:28
ファイルを削除するバッチを作っています。 DELコマンドで削除するのですが、エラーレベルが取れないようです。 共有違反など、削除に失敗したときのステータスを返したいのですが、 なにか良い方法はありますでしょうか? よろしくお願いします。
>>801 今どうやってやって取れないのかちゃんと書けよ。
>>764 まだ未解決か?ってか、一月半も前なら出来てると思うが。
[使い方]
hoge.bat in.txt 5 out.txt
[hoge.bat]
FOR /L %%i IN (1,1,%2) DO type %1 >NUL >> %3
これでできると思うぞ。「>」は無いけどな。
type使うのが味噌かな(笑)
>>801 del foo.txt || goto :error
>>803 out.txt が初めから存在したときの結果が
>>764 と異なるから、
バッチファイルの初めに del %3 を入れといた方がいいと思う。
>>805 確かに。
'>>'は追加書き込みのことだから。
その方がいいですね。
807 :
デフォルトの名無しさん :04/08/01 18:57
バッチファイル実行するたびに処理を変えたいんだけど # とあるレジストリのONとOFF どうやってやればいいの?
>>807 EXIST と RENAME 使え
ex.ON.txt
>>764 IF EXIST out.txt 〜
で、処理を打ち切るかどうかもその人の考えるところかな。
あるテキストの内容を 「全選択」→「コピー」→「メーラー自動起動」→「新規メールにペースト」 って感じの流れをbatとかで書けないものでしょうか? テキストオープン Ctrl+A Ctrl+C メーラー自動起動(ちなみにOutlookExpress) Alt+F Alt+N Alt+M Tab*3 Ctrl+V みなたいな感じなんですが。 宛先も自動選択とかできたらなお嬉しいかも。 何とか可能にできないものでしょうか?
>>810 wshでSendKey使っとけ
バッチファイルじゃ無理
>>810 スレ違いだけどvbsならこんな感じ
set ws = WScript.CreateObject("WScript.Shell")
ws.Run "C:\WINDOWS\hh.exe C:\Program Files\Microsoft Visual Studio\MSDN98\98VS\1041\msdnvs98.col", 1, False
WScript.Sleep 1000 ' 起動待ち
ws.SendKeys "%n"
'WScript.Sleep 100
ws.SendKeys "GetTickCount"
ws.SendKeys "{ENTER}"
>>811 > バッチファイルじゃ無理
わからんぞ。
>>810 start mailto:abc@def?subject=タイトル^&body=本文%0A%0D二行目
テキストの内容を読むにはforを使う。
wshでSendKeyで実現できました! 思っていた事が全部できちゃって驚きでした( ; ゚Д゚) なんか色々できそうなので勉強してみます。 みなさんありがとうございました<(_)>
cmd終わったなw
Java関係のメイクや起動に使って重宝してます。 antとか使う方が便利らしいが より気軽と思う。
818 :
デフォルトの名無しさん :04/08/13 13:01
Bシェルのコーディング規約が乗っているHPなんか、ないでしょうか? よろしくお願いします。
時代はJScript.NET
820 :
デフォルトの名無しさん :04/08/22 02:27
あるファイルのタイムスタンプを取得し変数にセット 別のファイルのタイムスタンプを取得し変数にセット 2つの変数を比較し、違っていたら、何らかの処理を行うということを やりたいのですが、どのようにしたら実現出来ますでしょうか?
何らかの処理によるな
for %i in (arufairu) do set hensuu=%~ti
なんとなく思いついたので、 kill * これ、実際にやったら落ちたw 嫌な事があったら会社のpcに仕込んでみるか
質問です。 if not %9=="" set receipt=%2,%3,%4,%5,%6,%7,%8,%9 if not %8=="" set receipt=%2,%3,%4,%5,%6,%7,%8 if not %7=="" set receipt=%2,%3,%4,%5,%6,%7 if not %6=="" set receipt=%2,%3,%4,%5,%6 if not %5=="" set receipt=%2,%3,%4,%5 if not %4=="" set receipt=%2,%3,%4 if not %3=="" set receipt=%2,%3 if not %2=="" set receipt=%2 echo パラメーターを設定してください。 1行目で set の使い方が誤っています。 と怒られます。 パラメーターが入ってない場合に、「,」が2個以上続くからと思われますが、 うまくこのエラーを回避する方法は無いでしょうか。 1晩考えてここまでたどり着きましたが、うまい方法が思いつきません・・・。
>>824 これはどうだ。%10以降もあればそれもreceiptに入れちゃうけど。
それより%1はreceiptに入れなくていいのか?
set receipt = %2
:Loop
if "%3" == "" goto End
set receipt = %receipt%,%3
shift
goto Loop
rem --------------
:End
>>825 ありがとうございますバッチリです!
「shift」コマンドの存在を知りませんでした。
%1は別のパラメータ指定するつもりなんで大丈夫です。
指定のフォルダ以下にあるVBプロジェクトファイル(*.vbp)を 一括コンパイルしたいのですが、このようなバッチプログラムは作成可能でしょうか? Dir *.vbp /B /S で一覧は作成できるのですが、この結果を VB6 /m プロジェクト.vbp といった感じでVB6.exeに渡す方法がわかりません。
ラーメンタイマー(要Cygwin) sleep 180 && c:\windows\media\tada.wav
829 :
デフォルトの名無しさん :04/09/08 02:21
先生たすけてください。 Windows2000で、指定秒だけ待機させたいのですが、 choiceが使えなかったので悩んでます。 どのように書けば待機して次の行にいけるようになりますか?
%time%が指定回変化したら 重いけど
ping -n 10 localhostとか。
832 :
デフォルトの名無しさん :04/09/08 02:31
スゲー! って、ハングアップしちゃったじゃんかよ。(’Д’;)
835 :
デフォルトの名無しさん :04/09/08 11:07
質問です。 同じドライブのなかに下記のようにユーザーごとにアクセスできるようにフォルダを作成しました。 d:\server\data\username d:\server\data2\username_data それをx:ドライブとy:ドライブにしてユーザーごとに表示させたくて、 net use x:server\%username% /yes net use y:server\%username_data% /yes とやってみたのですが、Xはうまくいったのですが、Yはうまくいきませんでした。 初心者な質問ですみません。よろしくお願いいたします。
836 :
デフォルトの名無しさん :04/09/08 11:57
複数のファイルに対して同じ名前のフォルダを作製 ファイルを同じ名前のフォルダに移動 各フォルダに移動しながら中のファイルを操作 って流れのものを作りたいんですけど可能なんでしょうか? 同名のフォルダを作ったり作成後のフォルダ名で移動する方法がわかりません。 なんとかなりますか?
for %%f in (*.*) do mkdir "tmp%%f" && copy "%%f" "tmp%%f" ファイルと同名のフォルダ作れないから名前変えて、移動じゃなくてコピーだけど こんな感じでできる
>>835 うまくいかなかったときのエラーメッセージは?
本格的なものが必用ならバッチはお勧めしない
840 :
デフォルトの名無しさん :04/09/08 12:58
>>835 net use y:server\%username%_data /yes
>>838 for %%f in (*.*) do mkdir "tmp%%f" && copy "%%f" "tmp%%f" || goto :error
:error
echo failed
>>838 エラーはまったく出ませんでした。
>>840 できました!!
みなさまありがとうございました。ほんと助かりました。
843 :
デフォルトの名無しさん :04/09/09 16:33
タスクバーに表示しないでバックグラウンド的に実行する方法ってないですか? 終了はタスクマネージャで終了するかログオフで行えればいいんですが。
844 :
デフォルトの名無しさん :04/09/18 21:48:35
バッチファイルについて質問です 例えば あるフォルダとLhacaなどの圧縮ファイルがあって そのフォルダをまるごとLhacaなどを使用して自動的に圧縮させて 違うフォルダに日付をつけて格納させたいのですが こういうのって可能でしょうか?
.cabでよければcabarcと%time%, %date%あたり使えば楽勝
バッチファイルについて質問するときはOSも書くべきだと思う。
847 :
デフォルトの名無しさん :04/09/18 22:08:09
>>847 標準じゃ無理。
Cygwin入れてzipコマンド使えばコマンドラインで処理できる。
どうしてもLhacaでやりたいならWSHとSendkeys使えばいい。
849 :
デフォルトの名無しさん :04/10/15 16:40:23
フォルダの中のファイルをリストアップして EXEに渡す処理はどう書けばいいですか? C:\conv.exe AAA.bmp AAA.jpg C:\conv.exe B.bmp B.jpg C:\conv.exe CC.bmp CC.jpg WinXPです。
やりたいことがよくわからんが、 bmpを探してconv.exeでjpgを出力だったら for %%f in (*.bmp) do C:\conv.exe "%%f.jpg" みたいなかんじ これだファイル名がAAA.bmp.jpg みたいになるけど
851 :
デフォルトの名無しさん :04/10/17 18:46:26
INIファイル操作するコマンドラインツールってないですか? ini c:\myapp.ini set SECTION IDENT=VALUE 見たいな感じで使えるもの
>>851 nircmdc.exe inisetval "c:\windows\test.ini" "section1" "TestValue" "1"
>>852 よこからですが、これは便利っすね〜、いろいろ出来て。
854 :
デフォルトの名無しさん :04/11/07 04:21:42
バッチファイルでサブルーチンage @echo off set ret=label1 set arg=aaa goto sub :label1 echo %arg% set ret=label2 set arg=hello goto sub :label2 echo %arg% goto exit rem 環境変数%arg%に%arg%%arg%をセットする rem 入力 %arg% rem 出力 %arg% :sub set arg=%arg%%arg% goto %ret% :exit
サブルーチン? call使えばいいんじゃないの?
>>855 うむ、「 call %0 」なども味わい深いものである。精進せよ。
857 :
デフォルトの名無しさん :04/11/09 01:08:47
関連付けを使わずにwavファイルを一回または連続で鳴らす方法おせーて
858 :
デフォルトの名無しさん :04/11/09 18:09:58
mplay32 /play C:\WINNT\Media\tada.wav
bachからソフトを起動し、そのソフトを終了させなくてもbachを終了させる方法ってあります? call で呼ぶと、帰ってくるまでexitできなくて。
860 :
デフォルトの名無しさん :04/11/11 12:43:43
>>859 objWS = CreateObject(WscriptShell)
objWS.Run = 呼び出すプログラムへのパス)
という別のをCALLするとかしか思いつかん。
ERORRLEVELで
何とかなるかどうかはプログラムに拠るだろうし。
bachって何? バッハ?
>>859 一週間前に同じことをしようとしたんだが、結局vbsにした。
で、
>>860 に落ち着いた。しかし、なんか統一感がないので、処理を全部vbsで書いた。
CreateProcess()だけするプログラムを作ればいいんじゃないの?
>>862 windows3.1がモーツァルトだとしたらそうだ。
batchでしたね(^_^;)startでいけました! 一回startで試したんですけど、パスを""で囲むとだめだったんですね。
>>866 横からありがとう。
START "タイトル" プログラムへのパス
でできた。
(雑誌の裏にでも書いておくべきメモとして。)
START ["タイトル"] [/Dパス] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NOMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [コマンド/プログラム] [パラメータ]
**コマンドにつけた"引用符"が、タイトルと混同されるみたいだ。
Windowsの終了時に自動的にバッチを実行する方法ってありますでしょうか? できるなら、ツール等を使わず、Windows環境内で実行できたらいいのですが。 環境は2000とXPです。
>>870 ありがとうございます。こんな機能あったのですね。
しかし、スクリプトに登録しても実行されてないみたい…なんで?
872 :
デフォルトの名無しさん :04/11/12 21:03:43
ftpでputするプログラムなんですが、そのputするファイル名 を可変にする方法を教えて下さい。 ftp -s:UPLOAD.txt がバッチファイルの中身で、UPLOAD.txt 内には OPEN 〜 USERID PASSWORD PUT C:\ファイル名 QUIT と書いてます。 ここのファイル名を可変にしたいです。 実際にはその日の日付が入るのですが UPLOAD.txt 自体がバッチファイルでは無いため %date:~2,4%%date:~7,2%%date:~10,2%などとしても dateが使えなくて困ってます。
>>872 echoを使ってUPLOAD.txtを生成すれば済む
>>873 なるほど。それならできそうです。
ありがとうございました。
ネットワークで繋がっているサーバの時刻を秒数付で表示させたいんですけど 何か良い方法はありませんか。 net timeだと分数までしかでないので、使えないんですよね。 osはw2kです。
>>876 自分の使用しているサーバとタイムサーバの時間が合っていることを
見た目でわかるようにしたいのです。
net time のsetを使えば合うことは知っているけど、それを知らない人にも
合ってるよねってことを確認させたいのです。
>>877 俺だったらこうする。↓
ECHO "時間あってます"
CDのボリュームラベルをファイル名にしてファイル一覧を作るにはどうしたらいいですか?
dir q:の出力の一行目を取り込んでファイル名にして dir q:\* /s /b > %LABELNAME%
>>878 2ch的にはそれでOKなんだけどね。
やっぱり無理か。
無理でいいんじゃないの。
884 :
デフォルトの名無しさん :04/11/22 16:09:21
バッチで任意の環境変数をSETするとき、SETLOCAL文は必要でしょうか。 バッチ内部の環境変数はそのバッチが終われば消えると思っていたので、今まで記述したこと内のですが。
親のバッチファイルのを書き換えちゃうよ。 他のプロセスが親だった場合は知らないけど。
>>886 即レスTHANKS!
親から子をCALLしている場合ですね。逆に見れば、自己完結のバッチには不要ということですかね。
Windows終了時に自動でバッチを実行できないかと聞きました、869です。 gpedit.mscでシャットダウン時にスクリプトを実行する方法を教えていただいたのですが、 どうもうまく実行できないようです。 シャットダウン時にネットワークドライブの切断をするバッチ、 起動時にネットワークドライブに接続をするバッチを指定しているのですが、 スクリプトを実行中の文字は確認できるのですが実行できていないようです。 バッチ自体は手動で起動してみると正常に実行できるので不備はないと思うのですが、 何が原因でしょうか?アドバイスよろしくお願いいたします。
ネットワークドライブを切断するプログラムのエラーメッセージや エラーコードをファイルに出力して原因を調べたらいいのではないかと。
作ったFTPのバッチをFTPサーバーに入れて正常に動作することが確認できました。 今度はFTPサーバーに置いたバッチをクライアントから実行したいです。 net use \\サーバー名\バッチを置いたフォルダ /user:ユーザ名 パスワード でFTPサーバーに接続してから call \\サーバー名\バッチを置いたフォルダ\バッチファイル名 と書いたバッチファイルをクライアントで実行したところ open 〜 の時点でinvalid commandというエラーがでてしまいます。 クライアントからサーバーのバッチファイルを実行することはできないのでしょうか?
>>891 もう少し詳しく教えてもらえませんでしょうか。
telnetでLAN接続されているFTPサーバーに接続することはできるのですが、
そこから
>>872 のように、さらに別の(LAN接続されていない)FTPサーバーに
ログインしなければなりません。その方法がわかりません。
コマンドをテキストに出力してみたんですが、起動・終了時の実行時はなぜか出力されない… どうして…orz
894 :
デフォルトの名無しさん :04/12/07 15:50:47
ドライブ C のボリューム ラベルは XXXXX です で可変長で取れないよ。スペース検索してとか面倒だし。 一発で取れるのないの?
dir q: | for /f "usebackq tokens=5" %%i in (`find "ボリューム ラベル"`) do set LABELNAME=%%i
>>897 ありがとう。
パイプにforをつなげられるのか。
MSのスクリプトは気味の悪い構文が多いなぁ・・・
>>898 無計画な増改築を繰り返しているからなー。
900 :
デフォルトの名無しさん :04/12/12 22:28:32
バッチ処理の途中で処理を止めて、プロンプト画面で打ち込んだ文字列を テキストファイルに出力する方法ってありますか? たとえば、 dir > a.txt ↓ ここでバッチを一時停止させる(A処理) ↓ 文字列を打ち込むと自動でa.txtに追記させるような方法(B処理) ↓ エンターキーか何かで続きのバッチ処理を再開させる(C処理) ↓ 続きのバッチが流れる (A・B・C)処理の方法ってありますか?
rem hoge.bat @echo off pause copy con %1 使い方はhoge a.txt、入力の終了はCTRL+Z。
>>901 Thanks.
画面の文字列は”%1”もしくは”%%1”で記憶できるんですね。
願わくば入力の終了をCtrl+Zではなくエンターキー一回で
できれば言うことないんですが・・・。
>902 君、一から勉強しなおした方がたぶん早いよ。
(´・ω・`)ショボーン
質問なんですが、バッチファイル内でexeを呼び出しているんですが、 バッチファイルをダブルクリックで実行するとそのexeは正常に動くんですが windows→ファイル名を指定して実行でバッチファイルをフルパスで 起動すると、そのexeがうまく動いてくれません。 何が原因かがわからず困っています。 どうかご教授を・・・。
バッチファイルの先頭付近に↓を追加してみるとか %~d0 && cd %~p0
>>906 私に対しての答えでしょうか?
対策としては、これを追加すれば出来るかもしれないということでしょうか?
バッチは詳しくわかってないので、%~d0 && cd %~p0が何を
表しているか、わからないのですが・・・。
>>907 Windowsのヘルプくらい見れるだろ。
909 :
デフォルトの名無しさん :04/12/13 12:01:52
プログラム(testprogram.exe)を起動するには START testprogram.exe だと思いますが、プログラムを終了するコマンドはありますか?
911 :
デフォルトの名無しさん :04/12/13 12:59:17
>>910 KILL testprogram.exe で終了できるんですね。ありがとうございます。
もうひとつお願いします。
バッチ実行中に、「終了するには10秒以内にFのキーを押してください」と表示させて
10秒以内にFのキーを押したときだけEXITに進んでバッチファイルを終了し、
10秒以内になんのキーも押さないときにはただ次の行に進ませるにはどうすればいいですか?
BATとWSHとどっちを使うのがいいですか?
>>913 BAT の検索結果 約 16,600,000 件中 1 - 10 件目 (0.09 秒)
WSH の検索結果 約 678,000 件中 1 - 10 件目 (0.16 秒)
BATの圧勝。
916 :
911 :04/12/13 13:35:12
調べましたがこれでいいですか? CHOICE /C:FN /T:2,10 終了するには10秒以内にFのキーを押してください IF ERRORLEVEL 1 GOTO END :END EXIT
失礼しました。こうです。これでいいですか? CHOICE /C:FN /T:2,10 終了するには10秒以内にFのキーを押してください IF ERRORLEVEL 1 GOTO END REM ここに入れるプロセスは現在作成中 :END EXIT
自分で試せよ
自分で試したけどなんかうまくいかない。 プロンプト画面が一瞬だけ表示されてなんかエラーメッセージみたいなのが 表示されるんだけどすぐ消えるので読み取れない。 プロンプト画面が消えないようにしてエラーメッセージを読むにはどうすればいいですか?
>>919 コマンドプロンプトを先に起動させておいて、その中でバッチを実行するとメッセージが読める。
俺んとこではこう表示される。
CHOICE: タイムアウト時の既定値が指定された(または既定値の)選択肢にありません.
なのでこうしろ。
CHOICE /N /C:NF /T:N,10 終了するには10秒以内にFのキーを押してください
IF ERRORLEVEL 2 GOTO END
ところでEXEとかの実行可能ファイルはstartぬきでも呼べるよ。
バッチファイル側でコプロセスの終了を待って次に進む->startなし バッチファイル側でコプロセスの終了を待たずに次に進む->startあり
ショートカット(*.LNK)を実行ってできますでしょうか?
>>923 つまりお前には実行できなかったということだな
一人頭の悪い厨房が常駐してるみたいだな。 わざわざこんな地味なスレ荒さんでも
>>924 そうです。
>>925 フォローありがとうございます。って荒らしてんの、漏れじゃないですよね(;´Д`)
DOS窓開く 実行したいショートカットをDOS窓へドラッグドロップ リターン DOS窓でできればバッチも同じ
>>927 あぁ、それでよかったんですか。
わざわざ頭に start つけてますた…。逝ってきます
choiceって、winNT系はそのままじゃ使えんのか… ライブラリがあるけど、汎用性の問題から使えないなぁ。
931 :
デフォルトの名無しさん :04/12/13 21:01:15
バッチファイルを作ったのでアイコンをダブルクリックするとちゃんと動作するんだけど タスクで決まった時間にこの.batファイルを実行しようとするとピクリとも動かない。 Dドライブにしまった.batファイルをタスクで実行するにはそのままじゃだめなの? もしかして.batファイルはタスクでは動かせないのだろうか。
>>930 あぁ、本当だぁ…。もう一回逝ってきます
933 :
デフォルトの名無しさん :04/12/14 00:47:02
当方w2k鯖にてFTP.exeをバッチにてファイル転送をしたいのですが バッチ内容を手動で行うと正常動作確認できたのですが、 バッチにて処理を行うと、putやgetの所で FTPexe アプリケーションエラー、メモリがwrittenになることが・・・ とエラーが出るのですが原因が分かりません。 鯖再起動はサービスが24h稼動の為止める事が出来ません。 原因を教えてください。
>>931 ちなみに、タスクってWindowsのタスクスケジューラですか?
Win2000とかならば、タスクスケジューラのログとか見れば
場合によっては分かると思います。
あとは、アプリケーションのコマンドとか呼び出してるならば
パスとかの環境変数とかが足りない等々、私はだいたい
その辺で嵌るんで確認してみてはどうでしょうか。
935 :
デフォルトの名無しさん :04/12/14 01:21:20
>>933 原因はわかんないけど wput に乗り換えてみたらどうですか?
ソースもあるから、変なこと起きても対処しやすいし。
936 :
デフォルトの名無しさん :04/12/14 01:22:28
>>931 漏れは
>>934 に加えてNT系OSでは .bat じゃなくて .cmd にしてるけど・・・
.bat って command.com が動きそうで嫌だから。
>>931 atコマンドで登録したらうまくいくかもね。
>>933 バッチでFTPexeは起動できるけど
バッチでFTPexeを直接操作できないよね
ftp -s: のことだろうか?
具体的に何やってるか書かないと意味不明
見当をつけて頂いてとても助かります。ありがとう。
>>934 はい、Windowsのタスクスケジューラです。OSはWin2000です。
ログが見れることをはじめて知ったので見てみます。
環境変数はまだ使わないで、del D:\フォルダ名\ファイル名.dbのように
絶対指定にしています。
>>936 .cmd を調べてみます。
>>937 atコマンドをググりましたがよくわかりません。帰ってきたらもういちど
じっくり検索してみます。
>>939 >環境変数はまだ使わないで、del D:\フォルダ名\ファイル名.dbのように
>絶対指定にしています。
おまえ
>>934 の言った環境変数の意味分かってるか?
スケジュールログを見たら、ログオン失敗と出ていました。
タスクスケジューラの設定がいけなかったようです。直したつもりです。
プログラムもだめなところがあるかもしれませんが、タスクの
時間がきたら動くか確認します。ありがとうございました。またよろしくお願いします。
>>940 用語も覚えるようにします。
>935 新たに何かを入れる時は申請通さないといけないので 見送りました >938 バッチでFTPコマンド使う場合は-s:コマンドテキストが 当然だと思い説明を省きました。 FTP.exeをw2ksp4のバージョンの新しいのを コピーして動かしてみた所正常に動きました。 レスありがとうございました。
>>942 プログラミングとなんも関係ないな
アプリの使い方ならWin板か初心者板にでも逝けよ
メッセージを時間指定して(例えば5秒間)表示することってできますでしょうか?
>>944 可能。
やり方は、こいつが書いてくれるだろう
↓
外部プログラム使えばなんでもできるが、 それをバッチファイルプログラミングと呼んでいいものか
標準コマンドならありだろ
外部プログラムを連続して呼べるようにしたのがバッチファイルじゃないのか?
バッチ処理を記述できるのがバッチファイルだろ。 中か外かは関係ない。
951 :
デフォルトの名無しさん :04/12/18 22:10:50
バッチからrubyを呼べば何でもできる。
自分でexeを作ってバッチから呼べば何でもできる。
@echo off echo main() {puts("hello, world");} > hello.c bcc32 hello.c hello
リネーム 年月日時分秒
ファイルの日付けでリネームしようと思ったけど 素直にリネームソフト使った方がよさそうだね。 年月日時分秒.拡張子 とかバッチじゃ無理っぽい
日付・時刻をファイル名にする set d=%date% set d=%d:~0,4%%d:~5,2%%d:~8,2% set t=%time% if not "%t:~0,1%"==" " set tt=%t:~0,2%%t:~3,2%%t:~6,2% if "%t:~0,1%"==" " set tt=0%t:~1,1%%t:~3,2%%t:~6,2% echo %d%%tt% Wikiかなんかのまとめサイトが欲しい今日この頃
957 :
デフォルトの名無しさん :04/12/19 00:06:08
コマンドの出力結果を 新規フォルダ作成時の 名前に使いたいと思ってます。 それで下のように考えたのですが、 (コマンド) > kakuno.txt md (kakuno.txtに書かれている文字列) この2行目はどのように書くべきでしょうか?
for /F "usebackq delims=" %%i in (`コマンド`) do ( md %%i )
959 :
デフォルトの名無しさん :04/12/19 00:34:07
>>957 さん
ありがとうございます。
もうひとつ聞かせてください。
do の部分で、md の後 新規作成ディレクトリへの
xcopy を実行するには、どのように書いたらいいのでしょうか?
for /F "usebackq delims=" %%i in (`コマンド`) do ( md %%i && xcopy c:\src\* %%i\ )
961 :
デフォルトの名無しさん :04/12/19 00:53:09
963 :
デフォルトの名無しさん :04/12/24 16:02:22
Win98(First)で単純に1行 start \\192.168.*.* と書いてバッチファイルとして保存したもので 相手先の共有フォルダの一覧を開こうとしたら、 フォルダが開かれないまま延々とループして終わりません。 /w オプションを付加したり、頭に @echo off を入れたり、 2行目に cls だの pause だのを入れても同じです。 また、「ファイル名を指定して実行」から当該コマンドを実行しても同様の動きです。 ただ、DOSプロンプトからバッチファイルを実行ないし同様のコマンドを実行すると 思った通りの動作をします。 事前にWin98のFirstEditionで試したところ 正常動作して「完了」ウインドウになっていたんですが… あと、ping \\192.168.*.* だと正常に動いて完了になるんですよね…
共有ファイルを開くのであれば net use x: \\hostname\share じゃないのか?
>>963 バッチのファイル名を start.bat にしていると思われ。
自分自身を呼び出すから他の名前にすれ
966 :
デフォルトの名無しさん :04/12/29 04:47:29
上のほうにあったサンプル @echo off dir c: | for /f "usebackq tokens=5" %%i in (`find "ボリューム ラベル"`) do set LABELNAME=%%i echo LABELNAME=%testfile% を実行したところ C:\>set LABELNAME=WindowsXP LABELNAME= C:\> となってうまくいきません。echo offしてるのになぜかコマンドが表示されてしまい 結果としてset LABELNAME=でうまく代入されていません。何がいけないのでしょうか? 環境はWinXP Pro SP2のcmd.exeです。
echo LABELNAME=%testfile%
は
echo LABELNAME=%LABELNAME%
の間違いでした。このコードで
>>966 の現象が発生します。
>>966 うちでも同様でした。(xphome)
dir c: | for 〜 は
dir c: | cmd /c for 〜 と解釈されるのかな?
子プロセスで環境変数セットしても親には影響しないってことみたい・・・
パイプをやめれば正常に動きますね〜
dir c: > temp.txt
for /f "usebackq tokens=5" %%i in (`find "ボリューム ラベル" temp.txt`) do set LABELNAME=%%i
自分の環境ではforの()内に日本語を入れると正常に処理できないことがあるが、他の環境でも再現しますか? cmd.exe 5.0.2195.6824(2KSP3+KB835732) for /f "usebackq delims=" %%a in (`type %1 `) do @echo %%a %1がASCIIのみだと正常に処理されるが、 %1に日本語を入れると、「指定されたファイルが見つかりません。」となる時がある 例:"C:\WINNT\グリーン ストーン.bmp"
半角スペースが悪さしてるわけじゃないよね?
>>972 C:\>for /F "usebackq delims=" %a in (`type "C:\新規.txt"`) do @echo %a
指定されたファイルが見つかりません。
C:\>for /F "usebackq delims=" %a in (`type "C:\新規.txt" `) do @echo %a
新規.txtの中身
とエラーが出ないことがあるので、後ろに半角スペースを付けた
ここらへんも何故そうなるかが分らないんだよな
cmdを極限まで極めるのとwshに早々に乗り換えるのとどっちが効率がいいですか?
975 :
デフォルトの名無しさん :04/12/31 07:37:44
>>974 両方をそこそこ使えるようにするのが効率いい。
Cygwinのbash
for /f "tokens=5" %%i in ('vol c:') do set LABELNAME=%%i
はっきりいってバッチプログラムあまりよく知らんが、 クライアント(Win2000)のIPアドレス・デフォルトG/W・DNSなんかを 変えたいんだが、クライアントの操作ユーザーがUser権限なんスよ。 そこで、バッチプログラムでダブルクリック一発で変更させたいんだが、 そのファイルを実行させるときだけ、Runasコマンド等で 一時的にAdministrator権限で動かせることはできるの? 漏れの考え方では、 administratorのパスワードが書いたファイルを読み込み、 変数やら何チャラに保存し、それを使用してRunasを実行させ、cmdを実行 ↓ callやら何やらでnetsh等のコマンドでTCP/IPを変更する ↓ 最後にadministratorのパスが書かれたファイルを削除する ってな事を考えてるんだけど、そもそも出来るの?