バッチファイルプログラミング質問スレ

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Windows版シェルプログラミングみたいなものですな。
2デフォルトの名無しさん:02/12/23 12:41
最近みかけないですね。
昔は良く捕まえて虫かごにいれておいたんですが。
冬休みの宿題は終わりましたか?
4デフォルトの名無しさん:02/12/23 12:43
あぁ、冬休み始まった。始まりましたか?
5デフォルトの名無しさん:02/12/23 12:45
はじめまして〜〜。
過去スレ
バッチファイルについて語ったり質問したりするスレ
http://pc.2ch.net/tech/kako/1006/10061/1006167121.html

関連スレ
バッチ_スレ
http://pc.2ch.net/tech/kako/1018/10181/1018163331.html
良スレ期待あげ
うざいから結論だけ書いて沈めよう。

使用できる命令:
DOS内部コマンドとほぼすべての外部コマンド。

使用できる制御構造:
IF FOR GOTO

主にバッチファイル専用コマンド:
BATKEY PAUSE CHOICE

変数:
使えるがその用途は限りなく少ない。環境変数は使える。

レベル:
BASIC以下。プログラミングと呼ぶのも憚られる。

楽しみ方:
他のプログラミング言語と違い大量の制限があるためその制限を超えた何かを作ること。
9デフォルトの名無しさん:02/12/25 08:42
なにがうざいんだか・・・。
>>9
存在。
11デフォルトの名無しさん:02/12/25 11:34
>>8
pl2batのようなことやると
バッチファイル内にperlのスクリプトかけるから
なんでもできそうやな

近視眼だとそれだけで終わっちゃうけど
>>11
じゃあはじめからperl使えよと。と言う話になったり。
1311:02/12/25 12:11
自分が使うならそれでいいんだけど、
他人に使わせる時にいちいちperl -f xxx para para とか書かせるのが。
知識ある人ばっかりじゃないんだから,隠蔽してあげられるところは
隠蔽したほうがね…
14デフォルトの名無しさん:02/12/25 12:14
               ↓   
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★・裏情報取引サイト→http://www.kawachi.zaq.ne.jp/dpdan803/
★・国際免許取得→→→http://www.kawachi.zaq.ne.jp/dpdan803/
★・あらゆる調査→→→http://www.kawachi.zaq.ne.jp/dpdan803/
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
1511:02/12/25 12:15
追記
それならbatではなく実行ファイルにしておけたらいいけど、
できるならばソースはいつでも手が入れられたり覗けるようにするほうが
自分が居なくなったりしても混乱が減らせるでそ。

(退職などで)ツール作って残してくれてる人もいるが、
環境が変わった際に変更できないといちいち車輪を発明しなおさないと
いけないのが面倒で…
(あと,ジョブセキュリティにするような輩とかもいるし・・・)

この形で運用できるのは結構便利だったりする。
>>13
SOSで.com化とか。
ついでにつっこんどくと、perlに-fオプションはない。
>>2
それはバッチ
>>13
そう言うときのバッチファイルか!

@echo off

perl -f xxx %1 %2
19135:02/12/26 13:13
>>16
ごめん。sedとごっちゃになってた…
bat2com⇒com2exe

com2txt
>>8
callが抜けている。
>>21
わすれてたyo・・・頭の中にはあったんだがなぁ・・・。
@rem={
perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EXIT
}

#perl script

exit;

:EXIT
>>23
ああ、すぐわかるPerlか何かに載ってたなぁ・・・。
いつの間に複数行コメントが使えるようになったんだ。
2625:02/12/28 07:18
違った。cygwinのviで作ったんでLFになってた。
でもこれでバッチには無視される行ってできないかな。

@rem = undef;
# perl script
exit;

^M
perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9


>>26
間違ってるというかなんじゃそら。
>>27
具体的にどのへんが間違ってる?
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とソフトウェアでまた荒らしが始まった予感。
2ちゃんねるがアクセスログ記録を始めましたが、あなたの考えは?
http://dailynews.yahoo.co.jp/fc/computer/2channel/ の左下

趣旨は理解しているのだが
空気も趣旨も読めない筋肉あらいぐまに乱入されたら
罵倒合戦になっても致し方あるまい
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
厨房逝ってよし。
なんか各所で「ブラウザを立ち上げ直してください」とかいうエラーでて書き込めないって
人がいるけど、それって何をするとでるの?
俺は見たこと無い。
65山崎渉:03/01/13 18:44
(^^)
66山崎渉:03/01/16 03:20
(^^)
67デフォルトの名無しさん:03/01/16 12:41
板違いでスマンが、
VBSのスレを知りませんか?
68山崎渉:03/01/23 20:13
(^^)
以後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での操作なのでコマンドを覚えるのが大変(らしい)
あ、REM忘れてた(w >>70
@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
バッチファイルの引数が=で分割されるってのは昔からだっけ?
から
■ 棚からボタ餅MS-DOS
http://pcweb.mycom.co.jp/column/msdos.html
>>82>>81への回答?
いつごろからか知ってる?
>>85
3.3で動作確認
@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コマンドはエスケープシーケンスも読みこんでくれる
>>119
タイプだぁ〜?
echo を使え
最初は全てひとつのファイルでecho沢山使ってたけど、
ファイル自体が大きくなる。そうなると、gotoとか多く使うでしょ。
gotoって、意外と時間かかるから、プレイする時間より待つ時間の方が長くなる。
だからなるべく早く処理するためには、システムファイル(exeとdllに値する部分)と見る部分のファイル
(ビットマップに値する部分のファイル)を分離せざるを得ないと思われ。
表示する部分を別のbatにしてcallすればgotoの処理速度低下を抑えられるかな?
gotoは前方への分岐の方が速いってのがあったな。
プロセスの生成+分割されたファイルの読み込みと、
でかい単一ファイルの読み込みのどっちが重いかってことになるのかな。
読みだし速度が遅いフロッピーで動かすといかにgotoの読みだしが遅いかよくわかるよ。
だいたい4-50KB、1500行ぐらいになると厳しいね。
だから、分割はそのくらいで分割してる。
callは設定ファイルを読み込む時に使ってる。
>>124
> だいたい4-50KB、1500行ぐらいになると厳しいね。
それだけ書くってとこで凄すぎ。というか呆れた。
Cとかでも1000行を超えることは結構あることを考えると
そのぐらい、どうってことないと思うが
BATKEYじゃなくてCHOICEを使ってる
いや、現在形で聞かれてもなー
j
130set /?より:03/02/27 10:44
SET コマンドには、2 つの新しいスイッチが追加されています:

SET /A 式
SET /P 変数=[プロンプト文字列]

/A スイッチは、等号の右側の文字列が、評価すべき数式であることを
指定します。式の評価はごく単純で、次の操作がサポートされます。
操作は、優先順位の高い順に示されています:

() - グループ化
* / % - 算術演算子
+ - - 算術演算子
<< >> - 論理シフト
& - ビット演算子 AND
^ - ビット演算子排他的 OR
| - ビット演算子 OR
= *= /= %= += -= - 代入
&= ^= |= <<= >>=
, - 式の区切り記号
131set /?より:03/02/27 10:45
環境変数の置換は、次のように拡張されます:

%PATH:文字列1=文字列2%

は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列1" を
"文字列2" に置き換えます。"文字列2" に空の文字列を指定すると、展開
された出力からすべての "文字列1" を削除することができます。"文字列1"
をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分
が最初に現れるまでのすべてを一致させることもできます。
132set /?より:03/02/27 10:45
また、展開の副文字列を指定することもできます。

%PATH:~10,5%

は、PATH 環境変数を展開し、展開結果の 11 番目 (オフセット 10) の文字
から始まる 5 文字だけを使います。長さが指定されなかった場合は、変数の
値の残りの長さを既定値とします。オフセットまたは長さのどちらかが負の値
の場合、環境変数の値の長さに指定されたオフセットまたは長さを足してその
数を使います。

%PATH:~-10%

は、パス変数の最後の10 文字が展開されます。

%PATH:~0,-2%

は最後の 2 文字以外のすべてが展開されます。
133set /?より:03/02/27 10:46
最後に、遅延環境変数の展開が追加されました。このサポートは常に既定で
無効になっていますが、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" が比較され、決して等しくはなりません。同様に次の例も期待し
たようには動作しません。
134set /?より:03/02/27 10:47
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 に最後にみつけられたファイルを設定し続けているだけです。
135set /?より:03/02/27 10:47
遅延環境変数の展開では、実行時に環境変数を展開するために異なった文字
(感嘆符)を使うことができます。遅延環境変数の展開が有効な場合、上記の
例は次のように書くと意図したように動作します。

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%
136set /?より:03/02/27 10:52
コマンド拡張機能が有効な場合、SET によって表示される変数の一覧には
現れないいくつかの動的な環境変数があります。これらの変数の値は、変数の
値が展開されるときに動的に計算されます。ユーザーがこれらの名前の変数を
明示的に定義する場合、その定義は下記の動的な定義を無効にします。

%CD% - 現在のディレクトリ文字列に展開します。

%DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。

%TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。

%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します

%ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。

%CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に
展開します。

%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンドライン
に展開します。
137for /?より:03/02/27 11:04
FOR /D %変数 IN (セット) DO コマンド [コマンドパラメータ]

セットがワイルドカードを含む場合は、ファイル名ではなくディレクトリ名
の一致を指定します。

FOR /R [[ドライブ:]パス] %変数 IN (セット) DO コマンド [コマンドパラメータ]

[ドライブ:]パスから始めて、ツリーの各ディレクトリで FOR 文を実行し
ます。/R の後にディレクトリが指定されていない場合は、現在の
ディレクトリが使用されます。セットが単一のピリオド (.) である場合は、
ディレクトリ ツリーの列挙だけを行います。
138for /?より:03/02/27 11:04
ファイル名セットは、1 つ以上のファイル名です。各ファイルが開かれ、読み
取られ、処理されてから、ファイル名セットの次のファイルに進みます。処理
には、ファイルの読み取り、個々のテキスト行への分割と、0 個以上のトークン
への解析が含まれます。その後、変数値を見つかったトークン文字列に設定して、
for ループの本体が呼び出されます。既定では、/F は、各ファイルの各行から、
空白で区切られた最初のトークンを渡します。空白行はスキップされます。既定
の解析動作を変更するには、オプションの "オプション" パラメータを指定しま
す。これは、異なる解析オプションを指定する 1 つ以上のキーワードを含む、
引用符で囲まれた文字列です。キーワードは、次のとおりです:

eol=c - 行末のコメント文字を指定します (1 文字)。
skip=n - ファイルの先頭でスキップする行数を指定します。
delims=xxx - 区切り文字のセットを指定します。これは、既定の
区切り文字であるスペースとタブを置き換えます。
tokens=x,y,m-n - 各繰り返しに対して、各行から for 本体に渡すトー
クンを指定します。これにより、追加の変数名が割り当
てられます。m-n の形式は範囲で、m 番目から n 番目の
トークンを指定します。tokens= 文字列の最後の文字が
アスタリスクである場合は、追加の変数が割り当てられ、
最後のトークンが解析された後、行に含まれている残り
のテキストを受け取ります。
usebackq - 次の新しい表示形式を指定します。逆引用符で囲まれた
文字列がコマンドとして実行され、一重引用符で囲まれた
文字列がリテラル文字列コマンドになりファイル名セット
のファイル名を二重引用符で囲めるようになります。
139for /?より :03/02/27 11:05
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

この例は、現在の環境の環境変数名を列挙します。
140for /?より:03/02/27 11:06
また、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)                (謎)
>>150 もう明日になっても会えません。
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 #
155calc.bat (1/6):03/03/06 23:05
四則演算ライブラリ作りますた。
一桁 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
156calc.bat (2/6):03/03/06 23:06
%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
157calc.bat (3/6):03/03/06 23:06
%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
158calc.bat (4/6):03/03/06 23:07
%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
159calc.bat (5/6):03/03/06 23:07
%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
160calc.bat (6/6):03/03/06 23:18
%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
161sample.bat:03/03/06 23:20
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でも動くようにできないものか・・
163jyanken.bat (1/2):03/03/07 03:43
マジでけた・・・
まだ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
164jyanken.bat (2/2):03/03/07 03:43
: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も編集ができそうだ
ま、 >>1 はこれでも使っとけ
http://www.vector.co.jp/soft/dos/util/se023753.html
公開日:95.12.22って、ずいぶん古いな
このスレに感動した。
BUとBATCPはバッチプログラマの必需品だろ。
177デフォルトの名無しさん:03/03/08 17:02
pifファイルを使わずに全画面表示で実行させる方法ありますか?
178bated.bat (1/?):03/03/08 17:04
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
179bated.bat (2/?):03/03/08 17:05
: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
180bated.bat (3/?):03/03/08 17:06
: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
181bated.bat (4/?):03/03/08 17:07
: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%
182bated.bat (5/?):03/03/08 17:09
: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
183bated.bat (6/6 最終):03/03/08 17:12
: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=
184bated.bat:03/03/08 17:14
ラインエディタ作りますた! 疲れたふー
基本的なコマンドしか使っていないので、dos3にも対応。
新規ファイルの編集と保存だけができます
既存ファイルの読み込みは不可
185デフォルトの名無しさん:03/03/08 17:27
HSPユーザーより酷いな。
このスレ。
186bated.bat (訂正1度目):03/03/08 17:41
行削除に大バグが・・・
以下の部分を差し替えてください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 で可能。
オプションなしで実行すればヘルプが出ます。
188187:03/03/08 18:00
>>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 のシェルほどは
プログラム書けんがな。
>>200 いいや書ける
>>201
まぁ IF, FOR, GOTO があればフローだけなら根性で書けるかもしれんが。
外部コマンド類は追加しないと標準搭載分だけじゃきつくね?
> まぁ IF, FOR, GOTO があればフローだけなら根性で書けるかもしれんが。
CALLを忘れてもらっては困る。

> 外部コマンド類は追加しないと標準搭載分だけじゃきつくね?
それはUnixのシェルでも同じだ。
204reboot.bat:03/03/11 04:03
>>203
外部コマンド追加!(NEC-PC98xx専用)
@echo エLヘ!>reboot.com
@reboot.com

でもこういうのって無粋な気がするのよねぇ・・
205204:03/03/11 04:05
おっと間違えた
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仕様はなんなんだよ。
209block.bat:03/03/11 05:38
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%
210block.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%
211コピペ失敗(|||;´Д`):03/03/11 05:46
コントロールコードの、コピペってどうやるのでつか・・・
>>211
&#x001b;とか汁
213191:03/03/11 16:24
>>192-193
Thanx!
WindowsMeには、dosdrv.txtが無いみたいです。
Windows98SEを漁ったらありました。名書。

例外イイ!
載ってなさそうなものを出してみる。これで合ってるよな
9x/Me PC-AT/PC-98

esc=&#x001b;
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行だけの場合省略可
&#x0001;〜&#x0006;=┌┐└┘│─
&#x0007;=↓、&#x000b;=四角の中に×
&#x000e;=黒点、&#x000f;=太陽みたいなマーク
&#x0010;=┼、&#x0012;=上下に伸びた矢印(↕)
&#x0014;=濃いアミカケ(▓?)
&#x0015;〜&#x0017;、&#x0019;=┴┬┤├
&#x001a;=薄いアミカケ(░?)
&#x001b;〜&#x001f;=↲↑|→←
訂正
×░ ○░
219デフォルトの名無しさん:03/03/11 23:26
NTもANSI.SYS使ったら同じようなのできるのだろうか?
CコンパイラだったらCONFIG.NTにANSI.SYSを書き加えればいいらしいが、
BAT/CMDは無理っぽいが。誰か詳しく希望
テキストファイルに文をついかするのってバッチファイrでできますか?
>>221
echo ついか>>text.txt
>>221
type con>ファイル名
最後はCtrl+ZのあとにEnter
あっ、追加だったか
>>220
> Cコンパイラだったら
意味不明
226221:03/03/12 00:27
>>222
>>223
すげ!簡単そうですね。

次のような事をプログラムを組んでやってたのを、バッチファイルでできるならしたいです。

D&Dされたファイル1のファイル名をファイル2の内容に書いて、
そのファイル2の名前を「ファイル1のファイル名」+「.avs」として出力。

こんなことをしたいのですが、バッチファイルでできそうですか?

echo %1 > %2
echo %2 > %1.avs
>>226
> D&Dされたファイル1のファイル名をファイル2の内容に書いて、
> そのファイル2の名前を「ファイル1のファイル名」+「.avs」として出力。
意味がわからん。
229221:03/03/12 01:28
>>227
すげー!みじけー!っと思ったけどうまくできなかったです。
>>228

すいません。

バッチファイル A.bat

       ファイル名                内容
ファイル1 aaa.txt
ファイル2 aaa.txt.avs(aaa.avsでもいい)   F:\aaa.txt(フルパス)

ファイル1をA.batにD&Dすると、ファイル2ができる、そんなA.batが作りたいです。
230221:03/03/12 01:38
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というレスをされた。シクシク
232221:03/03/12 01:41
>>231
ありがとうございます。
>>230
とりあえずもちっと日本語を勉強汁
ファイル名の変換バッチを作ってるのですが、
%~t1 は 03/03/10 17:47 というふうになりますが、
これを 03.03.10 とするにはどうすればよいでしょうか?
235221:03/03/12 04:42
やっぱ日本語へんかなぁ?
書き直します。

%~t1の内容をバッチファイル内で編集して
03/03/10 17:47

03.03.10
にしたいです。

それをファイル名につけるのですが、
ファイル名のつけ方や新しい変数の設定や代入はわかるのですが、
%~t1の中の前から8文字を取り出し、/を削除する方法はどうすればいいでしょうか?
236221:03/03/12 04:43
「やっぱ」は余計でした。
237221:03/03/12 04:45
>%~t1の中の前から8文字を取り出し、/を削除する方法はどうすればいいでしょうか?

%~t1の中の前から8文字を取り出し、/を . に置換する方法はどうすればいいでしょうか?
238for221.bat (文字列変換):03/03/12 06:39
>>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%
239221:03/03/12 07:14
>>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書け
246240:03/03/12 17:15
>245
winXP HomeEditionです。
パスが長すぎとかフォルダ名に空白がある(my document)とかが問題
なのでしょうか?
> フォルダ名に空白がある(my document)とかが問題
です。"でくくれ。あと悩んだらcopy /?を実行しろ。
248240:03/03/12 17:32
>247 ありがとうございます。
249221:03/03/12 18:13
>>242
ありがとうございます。
250238:03/03/13 05:03
>>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名
259envsize.bat:03/03/16 14:32
>>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でコマンドを実行させると大丈夫みたいです
261113:03/03/18 18:36
中断してたやつの続きをなんとなく作り始めてみるテスト
262デフォルトの名無しさん:03/03/23 04:50
うい、がんばれー、と応援してみるテスト
263デフォルトの名無しさん:03/03/28 12:11
クリップボードにある文字列をあらわす%1みたいなものってありますか?
264保守age:03/03/31 23:27
現在しりとりゲーム製作中。 公開できるといいが
(って、ここ質問スレなんだよな・・)
バッチのしりとりゲームって前あったよね WindowsPowerで見た
266264:03/04/01 00:58
>>265
なんですとぉ!?(泣
>>266
もう公開はしてないようだ。
http://www.google.co.jp/search?hl=ja&q=%82%D0%82%C6%82%E8%82%B5%82%E8%82%C6%82%E8

というわけでしりとり期待してます>264
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
270for268.bat:03/04/02 00:12
>>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
271for268.DAT:03/04/02 00:14
>>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-
272270-271:03/04/02 00:26
>>268
補足、現状iが3000以上になる時はプログラムの修正が必要なので注意です。
273270-272:03/04/02 00:35
そしてバグ発生。
1レスに詰め込もうとして、うっかり消しちゃった。

下の位置に :JOB の行を追加してください。n(_ _)n

if NOT "%i%"=="1001" goto COUNTUP
:JOB
find "-%i%-"<FOR268.DAT>tmp.bat
274for268.bat (全修正):03/04/02 08:05
ゴメン。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
275268:03/04/02 08:45
>>270-274
ありがとうございます。うるうる
ずいぶん長いソースになるんですね。
あとでやってみます。
フォルダ名はいちおう連番にしておいて、あとで改名するつもりでした。
なので、配列を使うほうのソースも参考になります。
どうしようかと思ってましたが、質問してよかったです。
DOS時代の大量のFDを塩漬けしたい人には役に立つと思います。
276270:03/04/02 08:59
>>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の方かも
>>281
forでできます。
最近知った。バッチ使っての印刷。最後のはネットワークプリンタに印刷する方法
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
289285:03/04/08 01:55
一緒の話題にあったのが、レジストリエディタで
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 コマンドの出力行のように展開します
>>288
cmd.exeだけのはず。
バッチファイルでオブジェクト指向プログラミングは可能でつか?
>>293
BatchScript.net
>>294
マジかよ!?

>>290
>for /f %i in ('hogehoge') do @set HOGE=%i

/fというのがcommand.comではできんかった。cmd.exe専用でしょうか?
/f無しでやったら、%HOGE%には'hogehoge'が入りました。
>>295
そのへんの拡張はすべてcmd.exeのみ。
297山崎渉:03/04/17 15:29
(^^)
>>294
ネタ?
>>294
(;´Д`)ハァハァ
つか男ならやっぱ command.com でやりたい
301山崎渉:03/04/20 03:05
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
302山崎渉:03/04/20 03:42
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
cmdは95、98、meは使えない、というか無いのでしょうもない
>>300
さんざん既出だと思うが
ttp://www.command.com/

こんなサイトがあったとは・・・
305デフォルトの名無しさん:03/04/27 15:00
>>304 か、カコイイ・・
>>303
bu.exeがあるじゃないか。
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
>>314
自己レス

http://pc2.2ch.net/test/read.cgi/pcqa/1051866821/l50
の90-92あたりで別に回答をいただいたのでこちらは終わりにします。ありがとうございました。
どなたか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
オナニー友の会
http://homepage3.nifty.com/coco-nut/
324322:03/05/08 17:00
具体的には
20%date:~4%で
2003/05/08という文字列が取れました。
ここから/を消したいのですがどうすればいいですか?
325322:03/05/08 17:08
すいません解決しました
326317:03/05/09 00:33
>>318
どうやってするの?
:loop
if "%1" == "" goto :end
rename ...
shift
goto :loop
:end
328317:03/05/09 01:09
>>327
 (´Д`;) アリガトウゴザイマス…
   ∨)
   ((
329317:03/05/09 01:56
複数のファイルに連番をつけるバッチファイルをつくりたいです。

@set ENV=1
:loop
if "%1" == "" goto :end
rename %1 %ENV%%~x1
@set ENV=%ENV%+1
shift
goto :loop
:end

だめなところをおしえてください。
どうなることを期待していて、結果がどう期待に沿わなかったか、
ちゃんと書かないところかな。
331317:03/05/09 11:33
>>330
いくつかのファイルをD&Dする。
拡張子はそのままに上から順番にファイル名を、
1.txt
2.txt
3.txt
としたい。

329のバッチでやると、
1.txt
1+1.txt
1+1+1.txt
となります。

お助けを〜。
set /?
ちゃんと読んだ? すぐ見つかると思うんだが。
333317:03/05/09 12:44
>>332
たぶん文字列として扱われてるので1+1+1みたいになるのだと思います。
数字として足し算をしたいのです。
それを変数に入れて、ファイル名にしたいのです。
うん、だからそのやり方はset /?ですぐ見つかるだろうと言ってるわけだが。
335317:03/05/09 13:10
>>334
すべて文字列と書いてあります。
数をいれたいのです。
>>335
NT系じゃないヒト?かな?
for で回したらイカンのかな?
337336:03/05/09 21:26
D&Dするのか、、、前言撤回。
338317:03/05/09 21:34
>>336
WIN2000です。
339317:03/05/09 22:14
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

こうしたらうまくいきました。
ありがとうございました。
>>317
set /a

cmd.exeだよな?
341317:03/05/12 02:10
>>340
できたーーーーー!
ありがとうございます。m(_ _)m

342330,332,334,340:03/05/12 07:33
だから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
コマンドの実行結果をファイルへリダイレクトしつつ画面にも表示する事って可能でしょうか?
>>348
UNIX-like tools
http://www.vector.co.jp/soft/win95/util/se010511.html
の tee.exe を使えばできます。
350346:03/05/15 12:15
>>347
Thanks!
ただ、echo=だと
ECHO は <ON> です。
とかいわれてしまいました。
echo.
なら、無問題です。
351347:03/05/15 12:17
>>350
スマソです。
WinXPのcmd.exeではうまくいってたので。
echo. は昔(command.com)から使われてたテクニックだが、
cmd.exeではecho=も使えるとは知らなかった。

そもそも質問するときに環境を書かない>>346が悪い。
漏れいつもECHO/にしてるんだが
>>353
同じくecho\でもいけた。
cmd.exeでしか試してないが。
+とか"でもいいようだ。要するに(cmd.exeは)ファイル名に使えない文字なら
区切りとみなすっぽい。
>>352

> NT4.0で使ってます。

思いっきり書いてあるが、、、、
>>356, >>346
正直、スマンかった。
Htaと組み合わせたい・・・>>バッチ
できんかのぅ?
HTMLアプリケーションのことか?
>>358
どういうことをしたいの?
361山崎渉:03/05/28 13:01
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
Σ(゚д゚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 ホシュ
369t-akiyama:03/06/15 09:43
携帯ゲーム機"プレイステーションポータブル(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
^^^^

みたいな感じになるんだよ。
>>375
1> = 標準出力
2> = 標準エラー出力
ttp://homepage2.nifty.com/winfaq/c/hints.html#548
>>374
cmd.exeならset /pでできるが、command.comじゃどうだろなぁ。
>374
環境が許すならWSH(VBS等)とかでやった方が早いかも

お前ら、wsh使ってますか? Part2
http://pc2.2ch.net/test/read.cgi/win/1022248379/l50
>>374
find /v で該当行を削除してから >> で最終行として足す事は可能です。
但し、行位置を変えずに編集するのは非常に難しいです。
 1 IP =
 2 HOST =
というふうに固定の行番号が入っているなら後からsortコマンドで誤魔化せるけど。
380375:03/06/27 19:53
376

そうだったのか。産休。でも、見た目に気になるから、表示しないようにできないのかな。
381デフォルトの名無しさん:03/06/27 20:15
標準入出力が扱えないって本当?
だからシェルスクリプトと違ってCGIスクリプトを書くのに使えないって聞いたんだけど。
command.com /c hoge.bat < input > output
ならできんじゃないか?
>>381
> 標準入出力が扱えないって本当?
うそ。

> だからシェルスクリプトと違ってCGIスクリプトを書くのに使えないって聞いたんだけど。
使える。
>>382-383
サンクス

だまされたのか(´Д`;)
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
:*/
--------------------
389388:03/07/04 17:39
訂正

else
    WScript.StdOut.WriteLine("FAILURE");

else {
    WScript.StdOut.WriteLine("FAILURE");
    WScript.Quit(1);
}
>>388
さんくす。
試してみます。
391388:03/07/04 17:51
また訂正

if (RESULT == "") {

if (RESULT != "") {
>>385
cygwin入れたほうが速くねえ?
あるいはmsys

>>388
exit status返せる?
394388:03/07/05 05:49
バッチにすると返せないから
@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'
401山崎 渉:03/07/15 10:01

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
402絢安允安安維:03/07/20 01:16
絢安允安安維
テキスト内の特定の文字列だけ書き換えさせたいのですが、
追記くらいしか検索にヒットしないのでマジ困ってます。

例を教えていただけませんでしょうか?おながいします。
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使用時は例外
407404:03/07/25 15:11
>>406
start "" "C:\Program Files\hoge\hoge.exe"
で出来ました、有難うございます。
408山崎 渉:03/08/02 02:23
(^^)
409山崎 渉:03/08/15 16:39
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
410デフォルトの名無しさん:03/08/20 13:57
テキストファイルに書かれている文字列を
変数に代入する方法ってありますか?
ちなみにテキストファイルには一行しか書かないものとして。
OSはW2Kです。
set /p var= < file
>> 411
ありがとうございます。
次のようなバッチファイルを作りたいのですが、どのようにすればいいでしょうか

・あるフォルダに入っているすべてのバッチファイルの
すべての行の左側に「echo 」と書き、
すべての行の右側に「 >>wmv9」と書く。
414訂正:03/08/24 01:24
次のようなバッチファイルを作りたいのですが、どのようにすればいいでしょうか

・あるフォルダに入っているすべてのバッチファイルの
すべての行の左側に「echo 」と書き、
すべての行の右側に「 >>wmv9.bat」と書く。
415訂正:03/08/24 01:25
OS はWIN2kPROです。
よろしくおねがいします。
416^>:03/08/24 04:03
>>414
for %%a in (*.bat) do for /f "delims=@" %%b in (%%a) do @echo echo %%b ^>^>wmv9.bat>>バッチ.cmd
move バッチ.cmd バッチ.bat

@はbatで使用されていない文字にすること
417訂正:03/08/24 07:15
>>416
ありがとうございます。
実行したバッチファイルが置かれているパスを取得する方法って無いですかね。
%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だと必ずフルパスが入ってくる?
>>423
>>422で解決だと思ーよ。
425デフォルトの名無しさん:03/09/10 23:26
Windowsのバッチで、
echo 1
echo 2
だと1と2の間と、2の次に改行が入るけど、改行を出力せずに
echoする方法ってありますか?
426デフォルトの名無しさん:03/09/14 18:58
ない
>>425
入らないよ。
cygwin入れてprintfってのもあるけど
429 :03/09/17 15:19
バッチファイルで
指定のディレクトリに
あいうえお__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
433432:03/09/17 17:30
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%の出力フォーマットが変わります。
(コマンドプロンプトは再起動が必要)
436435:03/09/17 18:01
>>434
これが一番きれいかも。曜日が入っちゃうけどね。
437WindowsMe:03/09/17 19:10
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
>>440
ありがとうございます。
ウィンドウズバッチってウェイトさせる事できるんですか?
素人質問スマンです
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
457454:03/10/03 09:30
>456

計算式を評価して代入するにはAオプションがいるんですね。きづいてなかったっす。
昨日はあきらめてVBでやることにして、動かしたんですが、あやまってDOS窓開きまくりでファイル消し始めて、
ある程度は消えたんですが、OSあぼーん、ソースも保存してなくてあぼーんしたので放置してました。
いただいたソースで今無事全ファイル削除できました。ありがとうございました。
桁が繰り上がるたびに0の数減らすんですね。これも思いつかなかったっですw
>>454
del \\?\C:\RECYCLER\NPROTECT\0000000*.
で消せない?
459454:03/10/03 13:23
>458

ちょっとそれはわからないです。もうファイル消しちゃったんで。
もしかしたら\\?\がポイントかもしれないから消せるかもしれませんね・・。
460454:03/10/03 13:24
といまおもったんですが、""でくくらないと消せないようなので*は使えないんじゃないでしょうか
数字に限定しないなら
for %a in (000?????.) do del "\\?\C:\RECYCLER\NPROTECT\%a"
でよかったかも
462454:03/10/03 17:35
>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
465 :03/10/08 23:07
指定のフォルダを削除するにはどうすればいいのでしょうか?
DELTREEを使うのはわかるのですが、
バッチファイルとして認識されていませんと表示されて削除できません

教えてください
>>465
rd/s/q C:
467デフォルトの名無しさん:03/10/08 23:45
>>465は、今頃実行してるんやろか・・・。
468 :03/10/08 23:50
>>467
してるわけないじゃん
Cドライブの中身全部消えるじゃん

本当の答えを教えてください
>>468
そんなにDELTREE使いたいなら
Win98のCOMMANDフォルダから取ってこいよ
>466=>467 なんかワロタ
471デフォルトの名無しさん:03/10/12 22:33
すいません、質問お願いします。使用しているのはXP HOMEのコマンドプロンプトです。

「A%20B.txt」という名前のファイルを「A B.txt」にリネームするバッチを組みたいの
ですが、現状だと%2をコマンドライン引数と認識しているようで上手くリネーム出来ま
せん。%を%そのものの文字として扱うための表記はどうすればいいのでしょうか?
%%
473471:03/10/12 22:52
>>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でやろうとすればから空のフォルダのみだし
>>476
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
みたいなことをやりたいのですが。
>>480
このスレ最初から読んでみ。
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
488487:03/11/14 02:09
拡張子 .java が取れてないですね。
どうやって取ったらいいんですか?
そもそもドットと拡張子を入力しないでいいようにバッチを書き直せばw

w2k以降なら %~n1 やら %~dpn1 とか使えるよ。
490487:03/11/14 04:59
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
>>490

>>489でっす。あれからも頑張ってたのか。
そこまでやるんなら make を使う
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
作れば?
それともバッチファイル以外は作れないの?
497495:03/12/05 12:44
>>496
標準でそういった機能があるかどうか聞いているだけ。
>>494
この程度ならawkだろ。
>>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
:*/
501500:03/12/11 02:07
>>500 下から5行目のreplaceのところはもうちょっと単純に:
    WScript.StdOut.WriteLine(f.ReadLine().replace(/^(.*?\t).*?\t/, "$1" + ++line + "\t"));
502495:03/12/11 02:49
pathextに.jsあるんだから無理にバッチファイルに埋め込まんでも
>>502
既定でwscriptで起動される環境でもcscriptで起動させるため。
504教えてマソ:03/12/21 07:06
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:を書きたがる
>>511
起動した瞬間にフォーマットでつか?
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を起動すれば出来る
520518:04/01/14 16:00
>>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で使えてる方はいらっしゃいませんか?
( ´,_ゝ`)ブッ
525518:04/01/15 15:54
>>522
なに!
じゃあ、32bitは動かんのか?
それじゃあ意味がありまへんがな。
>>523
 cmd.exeからではなくcommand.comから起動してみてください。
それでだめならばxtrやらC/C++/perlで同等のコマンドを作るしかないです。

>>525
 cmd.exe上ではエスケープシーケンスが使えなかったはずでは?
諦めてWinbatchEhやら他の言語を使いましょう。


528518:04/01/22 16:51
>>527
thanks!
529529:04/01/25 18:56
以下のようなバッチファイルを記述したいと考えています。

起動されたフォルダ内で処理をするabcというプログラムがあるとして、
バッチファイルを起動するとそのフォルダとそのフォルダ以下のサブフォルダを含めて
abcプログラムの処理をしたいと考えています。

つまり、あるフォルダでバッチファイルを起動するとそのフォルダ以下のサブフォルダを検出し
サブフォルダに移動してabcというコマンドをうつということを全サブフォルダで
行いたいわけです。

なにかよいアイデアはあるでしょうか?
手っ取り早くcygwin入れてfind+xargs

ってーいうのはこのスレでは反則ですか?
>>529
for /R . /D %d in (*) do (cd "%~fd" & abc)
533529:04/01/26 00:10
>>530-532
ありがとうございます。
/D と /R でいけるみたいですね。
それを使ってやってみます。
534デフォルトの名無しさん:04/02/03 16:05
Windows 98のコマンドプロンプトで %~dp0 に相当する値を
取得する右方方を教えてください。

おねがいします
DLLがエクスポートしている関数を呼び出せたと思う。
536sage:04/02/07 09:44
>>534 ヒントは >>484 にある。
537ひさまつ:04/02/10 03:38
教えて君で申しわけないのですが、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"
だけを入力すればいい。
マルチ
540ひさまつ:04/02/11 02:31
ここまでは、出来ました。

C:\WINDOWS>dir /b C:\TEMP1
c-file.txt
a-file.txt
b-file.txt
541ひさまつ:04/02/11 03:03
ヾ(@^▽^@)ノわはは
出来ました〜〜〜〜〜。
C:\WINDOWS>dir /b "C:\TEMP1" | sort /r
c-file.txt
b-file.txt
a-file.txt
この人の著書はだめぽ
ttp://www.iijima.nu/
killみたいなコマンドはないんでしょうか?
atで起動したのを殺したいんですが・・・
>>542
XPならtaskkill.exe
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だと何処にコピーされてるか解ってないな。
勉強しておきます。
解らなかったら、質問しても良いですか?
>>556
console
558デフォルトの名無しさん:04/02/18 18:16
質問です。

引数があるかどうかをチェックするのに
 IF "%1" = ""
で判断して、それはうまくいっているのですが、
デスクトップとかにあるファイルを渡すと、
「andの使い方が間違っています」と表示されて、強制終了します。

どうもパスにスペースを含んでいるのがまずいらしいというのは見当がついたんですが、
""で囲んでもダメとなると、どうやって回避したものかわかりません。
なにかうまい方法はないでしょうか。
環境とどういうファイル名かも書け。
>>558
IF "%~f1" == ""
561558:04/02/18 19:26
>>560
無事判定できました。
ありがとうございました。
562556:04/02/19 19:38
>>557
console ←これは、どうやって探すのですか?
Windowsの検索では、TXTの拡張子が出てきません。
DOSでやらないと探せないのでしょうか?
>>562
con という、コンソールデバイスだよ
564556:04/02/20 18:29
>>563
ちょっと調べておきます。
解らなかったら、又、質問させてください。
565あぼーん:あぼーん
あぼーん
566あぼーん:あぼーん
あぼーん
567あぼーん:あぼーん
あぼーん
568あぼーん:あぼーん
あぼーん
  /::::::::::::::::::::::::::\
  /::::::::::::::::::::::::::::::::::::\
 |:::::::::::::::::|_|_|_|_|
  |;;;;;;;;;;ノ   \,, ,,/ ヽ      ちょっと聞いてくれよ。
  |::( 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
574573:04/02/24 20:15
このようにしたいのですが

D:\test
|_dada
| |___temp
| |__00
|
|_______test001
|
|
|_______test002
|
|
|_______test003
|
|
|
|_______test004
575573:04/02/24 20:21
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
579573:04/02/24 21:22
>>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
で分岐させりゃ、いいんじゃね?
うまくいかないなら、ダウンロードそのものがうまくいってるのかどうか。
へたすっと、バッチファイル関係ないかも知れないしな。

そもそも製作依頼スレじゃないよな、ここ。
うまくいなかなかったバッチファイルなりを載せないと何をしたいのかも分からん。

質問ヘタならソースで語ってくださいな。
>>580
>>579はコマンドラインから打ったんだろ。
>>578の:mdから後をバッチファイルに汁>>573
>582
ファイルが途中で切れてもわからない。errorlevelでは拾えない。
FTPサーバのステータスコードを見るしかない。
585573:04/02/25 18:34
>>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 で保存しる
588573:04/02/25 20:45
>>586
そうですね。
「優しく解る!図解MS-DOS]見てます。
後、「MS-DOSVer.6.2ハンドブックPC-9800シリーズ」
とかWindows XP/2000/ME/98SE DOS/コマンドプロント辞典があります。
>>587
ちょっと挑戦してみます。
unified 形式って何ですか?-cとは違うんですか?
590589:04/02/26 01:02
誤爆スマソ
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)の結果が書き込まれてしまうようです。

よろしくお願いします。
600599:04/03/03 21:01
>>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で受けた値の両端のダブルクォーテーションを取るにはどうしたら良いのでしょうか?
607603:04/03/04 13:40
>>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"
614612:04/03/07 00:26
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"
617612:04/03/07 00:57
>>615
あ・・・・気が付きませんでした。Officeに直したら出来ました。
>>613
どうも有難う御座いました。
618デフォルトの名無しさん:04/03/07 00:58
>>616
なるほど。その環境変数は知らなかったよ。

ところで(システム|ユーザ)環境変数やらコマンドの動作の違いをOSのバージョンごとに
まとめているサイトとか知りませんが?
619612:04/03/07 01:13
>>616
すみません。
やってみました。どこがおかしいのでしょう?

A:\>"%ProgramFiles%\Microsoft Office\Office\Winword.exe"
コマンドまたはファイル名が違います.
>>619
OSのバージョンによっては環境変数 ProgramFiles が定義されていないかもしれないね。
set
または
set | find "ProgramFiles"
で ProgramFiles= で始まる行が表示されるかどうか確認してみては?
621612:04/03/07 01:34
>>620
有難う御座います。
確認してみます。
622612:04/03/07 02:01
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% は使えないことがわかったですか?
624612:04/03/07 02:13
>>623
ども、すいません。
関係ないが、612のJava環境のインストール状況が気になる。
> C:\PROGRA~1\COMMON~1\AUTODE~1:\D

AUTODE~1 って AutoCadか?
コロンが含まれているから無効なパスに見えるが。
627デフォルトの名無しさん:04/03/07 23:22
すいません。Dドライブからのパスです。
うpしたのでこれでいいのか、分かりません。
HPに説明とパスがあります。でも、Dドライブから実行したいので・・・。

ttp://ptba2.hp.infoseek.co.jp/cgi-bin/up/obj/obj2321_1.jpg
…しっちゃかめっちゃかな設定だな…
>>627
「path %path%」の部分が不要

それと>>626の言う通り、
「C:\PROGRA~1\COMMON~1\AUTODE~1:\DOS;」
の部分がおかしい。(「:\DOS」の前にセミコロン;とドライブ名が抜けてる?)

アセンブラやる前にもう少しDOS(コマンドプロンプト)の勉強もした方が
良いんではないかと・・・
630627:04/03/08 12:28
>>629
ども・・・・。
おっしゃるとおり、DOSの勉強を進めていったほうが良いですね。

>「C:\PROGRA~1\COMMON~1\AUTODE~1:\DOS;」
うーん・・・これは、私にも分かりません。
AuotCAdは、普通にCDからのインストールをしたので
私は、そのような記述をしてません。(それ以前にわからないです。)
AuotCAdは、使ってないからアンインソトールしました。
その記述部分を削ってもいいって事でしょうか?
631デフォルトの名無しさん:04/03/09 13:19
age
632m.s:04/03/09 16:46
C言語でソースプログラムをコンパイルするという一連の流れの中でアセンブルの後の「リンク」とはいったい何をしているのか教えてください。できるだけ詳しく。優秀なプログラマーさんお願いします。
スレ違い wdic.orgで調べれ
OSの種類によってバッチ・ファイルの処理を切り替える方法
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/267swchos/swchos.html
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/267swchos/table.html
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では無理なんでしょうか?
>>637
どこがどうできないのかくらい書けや
>>630
不要ならその部分を削除しても問題なし。

>>637
スレ違いだ。こっちで聞け↓

機械語なら俺に質問しろ!
http://pc2.2ch.net/test/read.cgi/tech/1035288252/l50

自分の使ってる環境や本の名前をもっと具体的に書かないと
まともに答えてもらえないぞ。
>>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=*;
643treg.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
644treg.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
645treg.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
646treg.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=
647642:04/03/14 17:24
申し送れましたが、Windows2000 Pro SP4 環境です。
>>642
長いんでよく見てないが、:GET_INI の最後は
goto :_%PRM1% → goto :EOF
では?
649sage:04/03/14 21:10
>>648さん、642です。

:SIZEの処理の場合は、set /a PRM2=%BUFFER%の処理を行うために。
また、:FINで変更が行われたことを表示させることも行うために
goto :_%PRM1%としています。
650642:04/03/14 21:10
上げてしまった・・・
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
652642&649:04/03/15 23:24
>>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 をいれているがな。
656653:04/03/20 08:28
653です。

ありがとうございます。

choiceをそういう目で見れたことはありませんでした。

98SEでは思い通りにいきましたが、やはり2kでは無理でした。
何で同等のコマンドがないんでしょう?
↓ここは確認しましたが、別途ツールでも無理ですね。
ttp://forum.nifty.com/fpcu/dosvcmd/choice.htm
http://www.vector.co.jp/soft/win95/util/se282254.html とか入れればいいだけじゃないのか ?
%time%の秒の部分が10回変化したら
659653:04/03/20 18:48
レスありがとうございます。

>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
>>663
標準出力をファイルに保存するだけなら tee を使うと簡単
dir | tee -a hoge.log

http://www.vector.co.jp/soft/winnt/util/se014671.html
http://www.vector.co.jp/soft/dl/win95/util/se033318.html
↑ダミアソ
668663:04/04/13 23:28
やはり駄目ですか・・・
dir > con > hoge.txt
con < dir > hoge.txt
とか色々やってしまった。ハズカシイ

>>666
tee イイ!
こーゆー事がしたかったんです!thx!
669デフォルトの名無しさん:04/04/18 11:25
DISP.DATってファイルはWin98SEでは、作れないのでしょうか?
この人のHPにはそれらしき事が書いてあるのですが。
ttp://homepage1.nifty.com/NAKAYA/20030623.htm
>>669
内容全然読んでないけど、「DISP.DATとういうファイルを作ります」なんて全角で書いてる時点で、俺なら信用しない。
671699:04/04/18 19:00
>>670
えーっと・・
申し訳ありません。「DISP.DAT」ですか?
そこまで気が付きませんでした。
ちょっとそのHPのソースをCでコンパイルしたらエラーになりました。





672699:04/04/18 19:01
{
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");
}
673699:04/04/18 19:02
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のスクリプトなんだが…

もしかして、俺釣られてる?
675699:04/04/18 21:11
>>674
すみませんでした。
違うスレに逝ってきます。
一体どのスレでどんな風に質問する気なのか、非常に気になる。
677699:04/04/18 21:41
やっぱりこの質問は、2ちゃんでは止めときます。
さよなら〜〜〜〜〜〜〜〜
Windows98 上で動かすバッチファイルで SET コマンドを使ったとき、
イコール記号を含む文字列を変数に入れようとすると、「構文が違います」と言われてしまいます。
イコールを含むようなものは代入できないのでしょうか。

例 SET HOGE="ABC=DEF"
>> 678
 対策としてBU使ったらどうかな?
上は構文エラーになる。=はどこがトークンか判断できないからね。
ちなみに""で括っても意味はないよ。
バッチでは変数はすべて文字列で評価されるからね。
>>662
touchでも使え。
681デフォルトの名無しさん:04/05/01 00:12
バッチ・ファイル中で日付をファイル名に使用する
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html
682682:04/05/01 01: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付属の文字コード表を参考にしましょう。
(まあ、!〜~の範囲をデシマルで出力すればいいんだけどね)
687682:04/05/01 10:03
>>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:\
688685:04/05/01 12:56
>686
tan x.
MS-DOS附属の BATKEY.COM しかないんでつが...
689reboot.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」とだけ記述されたバッチファイルを
起動・終了させる例を示していただけると助かります。

691690:04/05/01 16:32
↑ソフト本体はvb6でつくってます。
ここに書き込むのが適当なのか分かりませんが、
よろしくお願いします。
690 スレ違い|マルチ
氏ね
693690:04/05/01 18:04
デフォルトの名無し様

すみませんでした。失礼します。
694686:04/05/01 21:46
>688
 すみません。リンク提示をしていませんでした。
その他便利なツール紹介も含めて提示します。

- BU / BATCP (バッチで使えば便利なツール)
ttp://hp.vector.co.jp/authors/VA000007/

- BPP (Basic用のプリプロセッサ。モジュール単位での分割などができます。
バッチでも使えます)
ttp://www.noktosoft.com/

- BJ (バッチで構造化プログラミング。でも生成ソースに難がある)
ttp://www.vector.co.jp/soft/dos/util/se000464.html

- xtr (文章整形ツール。未完成で終ってしまって悲しい)
ttp://www.asahi-net.or.jp/~fe3s-mrkm/blind/xtr.htm

- BAT→C/C++トランスレーター
ttp://www.spacesoft.co.jp/

- Turbo C(参考資料)
ttp://hp.vector.co.jp/authors/VA003720/lpproj/special/borland/
695684:04/05/01 21:49
>> 687
 ECHOの文末を改行(端末設定がおかしいのかな?)していない以外は、
それで大丈夫です。

可能であればエラー処理を入れておいたほうがいいです。
ただ、それをやろうとするとほかのツールを使う必要があります。
今は、まだいいかと存じます。

一応、バッチファイル関連のサイトを提示しておきます。
ttp://www25.cds.ne.jp/~kamiken/bach/bach.html
>690
ぉぃぉぃ。この程度でVB使うなんてへっぽこ趣味PGの
オレですら考えられないんだが。
どんなプログラム書いているんだかと小一時間問い冷たく(snip)
ってか、ここで質問するならBSLかWinbatchEh関連で質問したほうがいいかと。
一応バッチ系統の言語なんだからさ。

BSL
ttp://hp.vector.co.jp/authors/VA013722/
697682:04/05/01 23:04
>>695
丁重なアドバイス、有難う御座います。
もうちょっと、学習してみます。
698685,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
>699
↓にあるよ。
自分で作ったプログラムを公開するスレ
http://pc5.2ch.net/test/read.cgi/tech/1076238917/41-42
704682:04/05/03 20:09
>>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
705682:04/05/03 20:11
結果です。
A:\>
OFF
OFF
OFF
OFF
OFF
OFF
OFF
OFF

OFF
OFF
OFF
OFF
OFF
OFF
OFF
OFF


A:\>
706682:04/05/03 20:14
同じになりません。
OSは、Win98SEです。
98じゃないからですか?
いや、「結果です」と言われても…
>>704
バイナリエディタで[の前が1Bになっているのを確認したか?
@echo offは文頭に1つでいいだろ
>>705
もしかしてコピペの仕方知らないの
>>706
使えると思うが、DOS/Vのファイル参照。
ttp://www.mirai.ne.jp/~nave/lib/echo.htm
710デフォルトの名無しさん:04/05/05 00:46
http://tv.yahoo.co.jp/vhf/tokyo/2004050423.html
をブラウザで開くバッチファイルってどう書けばいいんですか?
後ろの数字は年月日時で変わってきます。
>>710
%date%を使う
712デフォルトの名無しさん:04/05/15 22:06
質問です
指定した複数のファイルやフォルダの容量を調べて
まとめた容量を表示するにはどうすればいいのでしょうか?
>>712
for /?

%~zI - %I ファイルのサイズに展開します。

あとは足すだけ。
おまけ
set /?

SET コマンドには、2 つの新しいスイッチが追加されています:

SET /A 式
SET /P 変数=[プロンプト文字列]

/A スイッチは、等号の右側の文字列が、評価すべき数式であることを
指定します。式の評価はごく単純で、次の操作がサポートされます。
操作は、優先順位の高い順に示されています:

() - グループ化
* / % - 算術演算子
+ - - 算術演算子
<< >> - 論理シフト
& - ビット演算子 AND
^ - ビット演算子排他的 OR
| - ビット演算子 OR
= *= /= %= += -= - 代入
&= ^= |= <<= >>=
, - 式の区切り記号
>>714
cmd必死だなw
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
>>718 >>719
ありがd。
これから試してみますね。
721デフォルトの名無しさん:04/05/18 08:25
カレントディレクトリの9152バイトのファイルだけを削除するのってどうやるの?
722でけた:04/05/18 09:13
@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
バッチファイルに

start http://www.asahi.com/
start http://www.yomiuri.co.jp/

って書くと、当然ですが一つのブラウザが開いて読売のWebが
表示されておしまいです。そうではなくて、ブラウザが2つ
起動し、それぞれ朝日、読売とWebが表示できるようにしたい
のですが、DOSのコマンドじゃ無理でしょうか?なにか上手い
方法ありませんか?
start explorer http://www.asahi.com/
start explorer http://www.yomiuri.co.jp/
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
とあるとき
それがファイルかディレクトリかをいちいち聞いてくるのですが
これを聞かれずに全部ディレクトリで流したいときどうすればいいのでしょうか?

>>735
xcopy /?
737デフォルトの名無しさん:04/05/22 10:36
>>735
xcopy /i
よぉぉぉぉおおおおおおおおおおおおおおおおおし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`
のようなことをやりたいです。
>>745
command /? 嫁
>>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なんですが、御所望のツールは知りません。
ディレクトリ(フォルダ)の移動をファイルに保存して
おくようなツールを作ればないこともないのですが・・・。

欲しいのでしたらパブリックドメインで作ります。
著作権主張するようなものではないですからね。
>>745を分かる方いませんか?
>>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 つ入力します (^^)。
756754:04/06/04 21:55
あっ、 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
バッチ処理などで、あるジョブが失敗したら
このルートでジョブを流すなど設定できる
ジョブ管理ソフトって無いでしょうか?
マイクロソフト製品限定で。
よろしくお願いします。
>>762
マイクロソフトに訊け。
任意のファイルを任意の回数コピーするバッチを作りたいです。
たとえば 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で、パスを設定しないとまずいので、
できるだけ操作する人に簡単な方法で設定できるようにしたいのです。
788783:04/07/18 22:41
>>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]
"環境変数名"="値"
>>787
一度設定すりゃズっと覚えてるから>789の方法でいいと思うんだが
どうしてもバッチファイルでやりたきゃリソースキットのsetxとか試してみ。
ttp://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setx-o.asp

DOSの時代にもあったねぇ。こんなの。
791秀博:04/07/19 03:15
     ,.r<弌ヾヾヾヾヾヾ`ト`、-、__
    /-ニニヘヾヾヾヾヾヾヾヾヾヾ`ー-、
   ./ー二e `゙ `゙ ゙`ヾヾヾヾヾヾヾヾ、シナヘ
  仁一彡       ゙、ヾ、ヾヾ ゙ヘイ〃メ入
  f‐ニ=ツ ,.'   - 、 __        チ彡ニ┤
  !彡ニヽ   ` ー -- 二 _ー_--    三ニ-}
  V;〃ラ  /〃ニー        ̄   メ二ーヲ
  ハテj   ,. ニ、  、    、tヘヾi、 ヾミニソ
  .l. レ   < (・) > .;  .;:'  ,.= 、   lミ,‐ヲ
  ! l   、  ̄  ,! .i  < (・) >   レ' ノ
  l ト 、  ` '"´ ,!  l  、  ̄ ,   : ,j
  `1゙ヽ      ,!  l   ` ´  ,.イ ,/
   l ';  ,.:' (´,、 ,. ヽヾ    ,.:' /`     
   .| ; ,:'   `   ´ ′ヽ  ,.' /     
     ! ; ,.'  _,,,_ __    ;  ;' /
    ',  ゙、"ー-ニニニ=ヽ  ,.' /
    ヽヾ `ー--'''ー-一''′ /
     `ヽ、    、 _ノ/
        ` ー--一''''"´
94年に仙台の緑ヶ丘に住んでいる
わしの妹のところに無言電話をかけてきたやつは許さん
電話会社に通信傍受させるぞ
792783:04/07/19 09:19
>>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
795793:04/07/24 20:07
回答ありがとうございました。
ただこの処理では得たい結果が得られませんでした。
したい処理は、
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%
797793:04/07/25 10:37
>>796
納得です、for文のdo コマンド部分で&を用いて1回目の処理で抜けるわけですね。
最終行のデータはやはりこのかたちになりますか。

データが多いとき処理時間が気になりますがバッチの限界ですかね。

ともあれ助かりました。
お聞きしたいのですが、

echo 処理選択メニュー
echo 1.在庫データ取得
echo 2.出庫データ取得
echo 3.入庫データ取得

と、表示して処理を選択したいのですが、どうすれば良いでしょうか
教えてください、Win2000です。
>>798
choice /?
>>798
set/pとifを使う
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 〜
で、処理を打ち切るかどうかもその人の考えるところかな。
810810:04/08/10 12:29
あるテキストの内容を
「全選択」→「コピー」→「メーラー自動起動」→「新規メールにペースト」
って感じの流れを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を使う。

814810:04/08/10 16:24
wshでSendKeyで実現できました!
思っていた事が全部できちゃって驚きでした( ; ゚Д゚)

なんか色々できそうなので勉強してみます。
みなさんありがとうございました<(_)>
cmd終わったなw
>>815
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
826824:04/08/26 17:55
>>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
FOR %%i IN (1,1,1000) DO START http://www.2ch.net/
スゲー!
って、ハングアップしちゃったじゃんかよ。(’Д’;)
>>830-832
ありがとうございます!助かりました!
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
うまくいかなかったときのエラーメッセージは?
839837:04/09/08 12:52
本格的なものが必用ならバッチはお勧めしない
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
842835:04/09/08 15:45
>>838 エラーはまったく出ませんでした。

>>840 できました!!

みなさまありがとうございました。ほんと助かりました。
843デフォルトの名無しさん:04/09/09 16:33
タスクバーに表示しないでバックグラウンド的に実行する方法ってないですか?
終了はタスクマネージャで終了するかログオフで行えればいいんですが。
844デフォルトの名無しさん:04/09/18 21:48:35
バッチファイルについて質問です
例えば
あるフォルダとLhacaなどの圧縮ファイルがあって
そのフォルダをまるごとLhacaなどを使用して自動的に圧縮させて
違うフォルダに日付をつけて格納させたいのですが
こういうのって可能でしょうか?
845デフォルトの名無しさん:04/09/18 21:50:00
.cabでよければcabarcと%time%, %date%あたり使えば楽勝
846デフォルトの名無しさん:04/09/18 22:01:57
バッチファイルについて質問するときはOSも書くべきだと思う。
847デフォルトの名無しさん:04/09/18 22:08:09
>>845
できればZIPファイルでお願いします

>>846
Windows2000です
848デフォルトの名無しさん:04/09/18 22:12:29
>>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です。
850デフォルトの名無しさん:04/10/15 17:03:47
やりたいことがよくわからんが、
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
見たいな感じで使えるもの
852デフォルトの名無しさん:04/10/17 19:32:45
>>851
nircmdc.exe inisetval "c:\windows\test.ini" "section1" "TestValue" "1"
853デフォルトの名無しさん:04/10/18 06:24:13
>>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
855デフォルトの名無しさん:04/11/07 09:04:03
サブルーチン? call使えばいいんじゃないの?
856どざー:04/11/07 15:57:31
>>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
859デフォルトの名無しさん:04/11/11 09:35:37
bachからソフトを起動し、そのソフトを終了させなくてもbachを終了させる方法ってあります?
call で呼ぶと、帰ってくるまでexitできなくて。
860デフォルトの名無しさん:04/11/11 12:43:43
>>859
objWS = CreateObject(WscriptShell)
objWS.Run = 呼び出すプログラムへのパス)
という別のをCALLするとかしか思いつかん。
ERORRLEVELで
861デフォルトの名無しさん:04/11/11 12:44:14
何とかなるかどうかはプログラムに拠るだろうし。
862デフォルトの名無しさん:04/11/11 12:46:22
bachって何?
バッハ?
863デフォルトの名無しさん:04/11/11 12:47:19
>>859
一週間前に同じことをしようとしたんだが、結局vbsにした。
で、>>860に落ち着いた。しかし、なんか統一感がないので、処理を全部vbsで書いた。
864デフォルトの名無しさん:04/11/11 12:50:12
CreateProcess()だけするプログラムを作ればいいんじゃないの?
865デフォルトの名無しさん:04/11/11 12:51:07
>>862
windows3.1がモーツァルトだとしたらそうだ。
866デフォルトの名無しさん:04/11/11 12:57:11
>>859
start
867デフォルトの名無しさん:04/11/11 13:34:53
batchでしたね(^_^;)startでいけました!
一回startで試したんですけど、パスを""で囲むとだめだったんですね。
868863:04/11/11 14:14:08
>>866
横からありがとう。

START "タイトル" プログラムへのパス
でできた。

(雑誌の裏にでも書いておくべきメモとして。)
START ["タイトル"] [/Dパス] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NOMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [コマンド/プログラム] [パラメータ]

**コマンドにつけた"引用符"が、タイトルと混同されるみたいだ。
869デフォルトの名無しさん:04/11/12 10:12:38
Windowsの終了時に自動的にバッチを実行する方法ってありますでしょうか?
できるなら、ツール等を使わず、Windows環境内で実行できたらいいのですが。
環境は2000とXPです。
870デフォルトの名無しさん:04/11/12 12:31:58
>>869
gpedit.msc
871869:04/11/12 13:55:04
>>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が使えなくて困ってます。
873デフォルトの名無しさん:04/11/12 21:40:37
>>872
echoを使ってUPLOAD.txtを生成すれば済む
874872:04/11/12 22:03:53
>>873
なるほど。それならできそうです。
ありがとうございました。
875デフォルトの名無しさん:04/11/15 01:54:24
ネットワークで繋がっているサーバの時刻を秒数付で表示させたいんですけど
何か良い方法はありませんか。
net timeだと分数までしかでないので、使えないんですよね。

osはw2kです。
876デフォルトの名無しさん:04/11/16 11:43:36
>>875
何がしたいかも書くと吉
877875:04/11/16 15:28:03
>>876
自分の使用しているサーバとタイムサーバの時間が合っていることを
見た目でわかるようにしたいのです。

net time のsetを使えば合うことは知っているけど、それを知らない人にも
合ってるよねってことを確認させたいのです。
878デフォルトの名無しさん:04/11/16 18:01:00
>>877
俺だったらこうする。↓

ECHO "時間あってます"
879デフォルトの名無しさん:04/11/17 15:11:09
CDのボリュームラベルをファイル名にしてファイル一覧を作るにはどうしたらいいですか?
880デフォルトの名無しさん:04/11/17 15:15:14
dir q:の出力の一行目を取り込んでファイル名にして
dir q:\* /s /b > %LABELNAME%
881875:04/11/21 20:58:23
>>878
2ch的にはそれでOKなんだけどね。
やっぱり無理か。
882デフォルトの名無しさん:04/11/21 21:50:27
>>881
駄目な理由が分からない。
説明汁
883デフォルトの名無しさん:04/11/21 21:53:29
無理でいいんじゃないの。
884デフォルトの名無しさん:04/11/22 16:09:21
885デフォルトの名無しさん:04/11/25 23:34:26
バッチで任意の環境変数をSETするとき、SETLOCAL文は必要でしょうか。
バッチ内部の環境変数はそのバッチが終われば消えると思っていたので、今まで記述したこと内のですが。
886デフォルトの名無しさん:04/11/25 23:42:35
親のバッチファイルのを書き換えちゃうよ。
他のプロセスが親だった場合は知らないけど。
887デフォルトの名無しさん:04/11/26 18:50:01
>>886 即レスTHANKS!
親から子をCALLしている場合ですね。逆に見れば、自己完結のバッチには不要ということですかね。
888869:04/12/01 10:30:30
Windows終了時に自動でバッチを実行できないかと聞きました、869です。
gpedit.mscでシャットダウン時にスクリプトを実行する方法を教えていただいたのですが、
どうもうまく実行できないようです。
シャットダウン時にネットワークドライブの切断をするバッチ、
起動時にネットワークドライブに接続をするバッチを指定しているのですが、
スクリプトを実行中の文字は確認できるのですが実行できていないようです。
バッチ自体は手動で起動してみると正常に実行できるので不備はないと思うのですが、
何が原因でしょうか?アドバイスよろしくお願いいたします。
889デフォルトの名無しさん:04/12/01 11:08:25
ネットワークドライブを切断するプログラムのエラーメッセージや
エラーコードをファイルに出力して原因を調べたらいいのではないかと。
890872:04/12/01 23:24:32
作ったFTPのバッチをFTPサーバーに入れて正常に動作することが確認できました。
今度はFTPサーバーに置いたバッチをクライアントから実行したいです。

net use \\サーバー名\バッチを置いたフォルダ /user:ユーザ名 パスワード

でFTPサーバーに接続してから

call \\サーバー名\バッチを置いたフォルダ\バッチファイル名

と書いたバッチファイルをクライアントで実行したところ
open 〜
の時点でinvalid commandというエラーがでてしまいます。
クライアントからサーバーのバッチファイルを実行することはできないのでしょうか?
891デフォルトの名無しさん:04/12/02 00:25:19
>>890
telnet
892872:04/12/02 01:27:42
>>891
もう少し詳しく教えてもらえませんでしょうか。
telnetでLAN接続されているFTPサーバーに接続することはできるのですが、
そこから>>872のように、さらに別の(LAN接続されていない)FTPサーバーに
ログインしなければなりません。その方法がわかりません。
893869:04/12/02 12:41:20
コマンドをテキストに出力してみたんですが、起動・終了時の実行時はなぜか出力されない…
どうして…orz
894デフォルトの名無しさん:04/12/07 15:50:47
>>879
は俺も知りたい。
895デフォルトの名無しさん:04/12/07 18:10:46
896デフォルトの名無しさん:04/12/07 18:13:32
ドライブ C のボリューム ラベルは XXXXX です
で可変長で取れないよ。スペース検索してとか面倒だし。
一発で取れるのないの?
897デフォルトの名無しさん:04/12/07 18:17:02
dir q: | for /f "usebackq tokens=5" %%i in (`find "ボリューム ラベル"`) do set LABELNAME=%%i
898デフォルトの名無しさん:04/12/07 20:04:31
>>897
ありがとう。
パイプにforをつなげられるのか。
MSのスクリプトは気味の悪い構文が多いなぁ・・・
899デフォルトの名無しさん:04/12/11 01:40:05
>>898
無計画な増改築を繰り返しているからなー。
900デフォルトの名無しさん:04/12/12 22:28:32
バッチ処理の途中で処理を止めて、プロンプト画面で打ち込んだ文字列を
テキストファイルに出力する方法ってありますか?
たとえば、

dir > a.txt
   ↓
ここでバッチを一時停止させる(A処理)
   ↓
文字列を打ち込むと自動でa.txtに追記させるような方法(B処理)
   ↓
エンターキーか何かで続きのバッチ処理を再開させる(C処理)
   ↓
続きのバッチが流れる

(A・B・C)処理の方法ってありますか?
901デフォルトの名無しさん:04/12/12 22:37:18
rem hoge.bat
@echo off
pause
copy con %1

使い方はhoge a.txt、入力の終了はCTRL+Z。
902900:04/12/12 23:17:23
>>901
Thanks.
画面の文字列は”%1”もしくは”%%1”で記憶できるんですね。
願わくば入力の終了をCtrl+Zではなくエンターキー一回で
できれば言うことないんですが・・・。
903デフォルトの名無しさん:04/12/12 23:29:05
>902
君、一から勉強しなおした方がたぶん早いよ。
904900:04/12/12 23:30:41
(´・ω・`)ショボーン
905デフォルトの名無しさん:04/12/13 00:07:49
質問なんですが、バッチファイル内でexeを呼び出しているんですが、
バッチファイルをダブルクリックで実行するとそのexeは正常に動くんですが
windows→ファイル名を指定して実行でバッチファイルをフルパスで
起動すると、そのexeがうまく動いてくれません。
何が原因かがわからず困っています。
どうかご教授を・・・。
906デフォルトの名無しさん:04/12/13 00:14:38
バッチファイルの先頭付近に↓を追加してみるとか
%~d0 && cd %~p0
907905:04/12/13 01:14:36
>>906
私に対しての答えでしょうか?
対策としては、これを追加すれば出来るかもしれないということでしょうか?
バッチは詳しくわかってないので、%~d0 && cd %~p0が何を
表しているか、わからないのですが・・・。
908デフォルトの名無しさん:04/12/13 01:22:07
>>907
Windowsのヘルプくらい見れるだろ。
909デフォルトの名無しさん:04/12/13 12:01:52
プログラム(testprogram.exe)を起動するには
START testprogram.exe
だと思いますが、プログラムを終了するコマンドはありますか?
910デフォルトの名無しさん:04/12/13 12:53:07
911デフォルトの名無しさん:04/12/13 12:59:17
>>910
KILL testprogram.exe で終了できるんですね。ありがとうございます。
もうひとつお願いします。
バッチ実行中に、「終了するには10秒以内にFのキーを押してください」と表示させて
10秒以内にFのキーを押したときだけEXITに進んでバッチファイルを終了し、
10秒以内になんのキーも押さないときにはただ次の行に進ませるにはどうすればいいですか?
912デフォルトの名無しさん:04/12/13 13:08:57
913デフォルトの名無しさん:04/12/13 13:18:06
BATとWSHとどっちを使うのがいいですか?
914デフォルトの名無しさん:04/12/13 13:20:47
>>913
BAT の検索結果 約 16,600,000 件中 1 - 10 件目 (0.09 秒)
WSH の検索結果 約 678,000 件中 1 - 10 件目 (0.16 秒)

BATの圧勝。
915デフォルトの名無しさん:04/12/13 13:20:48
>>913
用途次第
916911:04/12/13 13:35:12
調べましたがこれでいいですか?
CHOICE /C:FN /T:2,10 終了するには10秒以内にFのキーを押してください
IF ERRORLEVEL 1 GOTO END
:END
EXIT
917911:04/12/13 13:43:19
失礼しました。こうです。これでいいですか?

CHOICE /C:FN /T:2,10 終了するには10秒以内にFのキーを押してください
IF ERRORLEVEL 1 GOTO END
REM ここに入れるプロセスは現在作成中
:END
EXIT
918デフォルトの名無しさん:04/12/13 13:44:01
自分で試せよ
919911:04/12/13 14:12:14
自分で試したけどなんかうまくいかない。
プロンプト画面が一瞬だけ表示されてなんかエラーメッセージみたいなのが
表示されるんだけどすぐ消えるので読み取れない。
プロンプト画面が消えないようにしてエラーメッセージを読むにはどうすればいいですか?
920デフォルトの名無しさん:04/12/13 14:37:17
>>919
コマンドプロンプトを先に起動させておいて、その中でバッチを実行するとメッセージが読める。
俺んとこではこう表示される。
CHOICE: タイムアウト時の既定値が指定された(または既定値の)選択肢にありません.
なのでこうしろ。
CHOICE /N /C:NF /T:N,10 終了するには10秒以内にFのキーを押してください
IF ERRORLEVEL 2 GOTO END

ところでEXEとかの実行可能ファイルはstartぬきでも呼べるよ。
921デフォルトの名無しさん:04/12/13 14:50:10
バッチファイル側でコプロセスの終了を待って次に進む->startなし
バッチファイル側でコプロセスの終了を待たずに次に進む->startあり
922919:04/12/13 14:56:23
>>920-921
サンクス。やってみます。
923デフォルトの名無しさん:04/12/13 16:31:18
ショートカット(*.LNK)を実行ってできますでしょうか?
924デフォルトの名無しさん:04/12/13 16:55:04
>>923
つまりお前には実行できなかったということだな
925デフォルトの名無しさん:04/12/13 17:05:40
一人頭の悪い厨房が常駐してるみたいだな。
わざわざこんな地味なスレ荒さんでも
926デフォルトの名無しさん:04/12/13 18:49:18
>>924
そうです。
>>925
フォローありがとうございます。って荒らしてんの、漏れじゃないですよね(;´Д`)
927デフォルトの名無しさん:04/12/13 19:16:01
DOS窓開く
実行したいショートカットをDOS窓へドラッグドロップ
リターン

DOS窓でできればバッチも同じ
928923:04/12/13 19:48:53
>>927
あぁ、それでよかったんですか。
わざわざ頭に start つけてますた…。逝ってきます
929デフォルトの名無しさん:04/12/13 19:55:36
choiceって、winNT系はそのままじゃ使えんのか…
ライブラリがあるけど、汎用性の問題から使えないなぁ。
930デフォルトの名無しさん:04/12/13 20:00:46
>>928
start でも問題なく開けるぞ。 >>406 みれ。
931デフォルトの名無しさん:04/12/13 21:01:15
バッチファイルを作ったのでアイコンをダブルクリックするとちゃんと動作するんだけど
タスクで決まった時間にこの.batファイルを実行しようとするとピクリとも動かない。
Dドライブにしまった.batファイルをタスクで実行するにはそのままじゃだめなの?
もしかして.batファイルはタスクでは動かせないのだろうか。
932923:04/12/13 21:23:51
>>930
あぁ、本当だぁ…。もう一回逝ってきます
933デフォルトの名無しさん:04/12/14 00:47:02
当方w2k鯖にてFTP.exeをバッチにてファイル転送をしたいのですが
バッチ内容を手動で行うと正常動作確認できたのですが、
バッチにて処理を行うと、putやgetの所で
FTPexe アプリケーションエラー、メモリがwrittenになることが・・・
とエラーが出るのですが原因が分かりません。
鯖再起動はサービスが24h稼動の為止める事が出来ません。
原因を教えてください。
934デフォルトの名無しさん:04/12/14 01:20:33
>>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 が動きそうで嫌だから。
937デフォルトの名無しさん:04/12/14 02:06:38
>>931
atコマンドで登録したらうまくいくかもね。
938デフォルトの名無しさん:04/12/14 06:18:29
>>933
バッチでFTPexeは起動できるけど
バッチでFTPexeを直接操作できないよね
ftp -s: のことだろうか?
具体的に何やってるか書かないと意味不明
939931:04/12/14 07:22:11
見当をつけて頂いてとても助かります。ありがとう。
>>934
はい、Windowsのタスクスケジューラです。OSはWin2000です。
ログが見れることをはじめて知ったので見てみます。
環境変数はまだ使わないで、del D:\フォルダ名\ファイル名.dbのように
絶対指定にしています。
>>936
.cmd を調べてみます。

>>937
atコマンドをググりましたがよくわかりません。帰ってきたらもういちど
じっくり検索してみます。
940デフォルトの名無しさん:04/12/14 11:13:10
>>939

>環境変数はまだ使わないで、del D:\フォルダ名\ファイル名.dbのように
>絶対指定にしています。

おまえ >>934 の言った環境変数の意味分かってるか?
941939:04/12/14 20:43:09
スケジュールログを見たら、ログオン失敗と出ていました。
タスクスケジューラの設定がいけなかったようです。直したつもりです。
プログラムもだめなところがあるかもしれませんが、タスクの
時間がきたら動くか確認します。ありがとうございました。またよろしくお願いします。

>>940 用語も覚えるようにします。
942933:04/12/14 22:13:50
>935
新たに何かを入れる時は申請通さないといけないので
見送りました
>938
バッチでFTPコマンド使う場合は-s:コマンドテキストが
当然だと思い説明を省きました。

FTP.exeをw2ksp4のバージョンの新しいのを
コピーして動かしてみた所正常に動きました。
レスありがとうございました。
943デフォルトの名無しさん:04/12/14 22:25:34
>>942
プログラミングとなんも関係ないな
アプリの使い方ならWin板か初心者板にでも逝けよ
944デフォルトの名無しさん:04/12/17 16:17:22
メッセージを時間指定して(例えば5秒間)表示することってできますでしょうか?
945デフォルトの名無しさん:04/12/17 20:37:23
>>944
可能。
やり方は、こいつが書いてくれるだろう

        ↓       
946デフォルトの名無しさん:04/12/17 20:39:53
947デフォルトの名無しさん:04/12/17 22:30:25
外部プログラム使えばなんでもできるが、
それをバッチファイルプログラミングと呼んでいいものか
948デフォルトの名無しさん:04/12/17 23:05:00
標準コマンドならありだろ
949デフォルトの名無しさん:04/12/18 18:53:31
外部プログラムを連続して呼べるようにしたのがバッチファイルじゃないのか?
950デフォルトの名無しさん:04/12/18 19:53:19
バッチ処理を記述できるのがバッチファイルだろ。
中か外かは関係ない。
951デフォルトの名無しさん:04/12/18 22:10:50
バッチからrubyを呼べば何でもできる。
952デフォルトの名無しさん:04/12/18 22:13:02
自分でexeを作ってバッチから呼べば何でもできる。
953デフォルトの名無しさん:04/12/18 22:17:43
@echo off
echo main() {puts("hello, world");} > hello.c
bcc32 hello.c
hello
954デフォルトの名無しさん:04/12/18 23:00:27
リネーム 年月日時分秒
955デフォルトの名無しさん:04/12/18 23:10:19
ファイルの日付けでリネームしようと思ったけど
素直にリネームソフト使った方がよさそうだね。
年月日時分秒.拡張子 とかバッチじゃ無理っぽい
956デフォルトの名無しさん:04/12/18 23:26:19
日付・時刻をファイル名にする

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行目はどのように書くべきでしょうか?
958デフォルトの名無しさん:04/12/19 00:11:24
for /F "usebackq delims=" %%i in (`コマンド`) do (
 md %%i
)
959デフォルトの名無しさん:04/12/19 00:34:07
>>957さん
ありがとうございます。
もうひとつ聞かせてください。

do の部分で、md の後 新規作成ディレクトリへの
xcopy を実行するには、どのように書いたらいいのでしょうか?
960デフォルトの名無しさん:04/12/19 00:47:04
for /F "usebackq delims=" %%i in (`コマンド`) do (
 md %%i && xcopy c:\src\* %%i\
)
961デフォルトの名無しさん:04/12/19 00:53:09
>>960さん
ありがとうございました。
962944:04/12/20 12:55:59
>>946
thx
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.*.* だと正常に動いて完了になるんですよね…
964デフォルトの名無しさん:04/12/27 20:13:54
共有ファイルを開くのであれば
net use x: \\hostname\share
じゃないのか?
965デフォルトの名無しさん:04/12/28 22:20:42
>>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です。
967デフォルトの名無しさん:04/12/29 04:49:15
echo LABELNAME=%testfile%

echo LABELNAME=%LABELNAME%
の間違いでした。このコードで>>966の現象が発生します。
968デフォルトの名無しさん:04/12/29 09:12:29
>>966
findからfindstrに
969デフォルトの名無しさん:04/12/29 15:16:25
>>968
findstrでも変わらずです・・・
970デフォルトの名無しさん:04/12/29 16:16:14
>>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
971デフォルトの名無しさん:04/12/30 18:28:22
自分の環境では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デフォルトの名無しさん:04/12/30 19:41:41
半角スペースが悪さしてるわけじゃないよね?
973デフォルトの名無しさん:04/12/30 23:53:55
>>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の中身

とエラーが出ないことがあるので、後ろに半角スペースを付けた
ここらへんも何故そうなるかが分らないんだよな
974デフォルトの名無しさん:04/12/30 23:56:47
cmdを極限まで極めるのとwshに早々に乗り換えるのとどっちが効率がいいですか?
975デフォルトの名無しさん:04/12/31 07:37:44
>>974
両方をそこそこ使えるようにするのが効率いい。
976デフォルトの名無しさん:04/12/31 08:47:14
Cygwinのbash
977デフォルトの名無しさん:04/12/31 09:06:41
for /f "tokens=5" %%i in ('vol c:') do set LABELNAME=%%i
978デフォルトの名無しさん
はっきりいってバッチプログラムあまりよく知らんが、

クライアント(Win2000)のIPアドレス・デフォルトG/W・DNSなんかを
変えたいんだが、クライアントの操作ユーザーがUser権限なんスよ。

そこで、バッチプログラムでダブルクリック一発で変更させたいんだが、
そのファイルを実行させるときだけ、Runasコマンド等で
一時的にAdministrator権限で動かせることはできるの?

漏れの考え方では、

administratorのパスワードが書いたファイルを読み込み、
変数やら何チャラに保存し、それを使用してRunasを実行させ、cmdを実行

callやら何やらでnetsh等のコマンドでTCP/IPを変更する

最後にadministratorのパスが書かれたファイルを削除する

ってな事を考えてるんだけど、そもそも出来るの?