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

このエントリーをはてなブックマークに追加
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のパスが書かれたファイルを削除する

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