初心者〜管理者まで必読!コマンドライン(DOS Pt.5)

このエントリーをはてなブックマークに追加
952950:2007/04/12(木) 16:31:40 ID:wBWPLIFm
>>951
期待通り、余計なものは全部消えてくれました。
どうもありがとうございました。
953名無し~3.EXE:2007/04/12(木) 16:51:13 ID:bbjCez2k
これ知らない人もいるんだぁ
954名無し~3.EXE:2007/04/12(木) 17:41:51 ID:rGu9umuP
>>953
Win95あたりからPC覚えた奴は、まず知らんよ。
余程の研究心・向上心がない限りは。
955名無し~3.EXE:2007/04/12(木) 18:59:02 ID:R5N4StSu
関係ないけど、@echo offの、@ってMS-DOSのバージョンいくつから、サポートされたんだっけ?
昔は、echo offしかなかったよね。(で、echo offと表示されてしまうという)
956名無し~3.EXE:2007/04/12(木) 19:28:14 ID:y9MOEqig
PC-98用だとver. 5 にはあった。 3.3Cにはたぶんなかった。
EPSONのver. 4 はしらん。
957名無し~3.EXE:2007/04/12(木) 20:09:16 ID:wMb9FjeO
Win98からPC使い始めたけど知ってる。
向上心はないけどヲタク気質なのは自覚してる。
常識はないけどハマると深いとこまで行っちゃう。
958955:2007/04/12(木) 22:12:58 ID:R5N4StSu
>>956
言われてみれば、たしかに、PC-98用で、Ver5.0あたりだったような気がする。
よく覚えてはいないんだけどね。
3.3Dは、どうだったか覚えてない。
959名無し~3.EXE:2007/04/12(木) 22:24:09 ID:yB6u+aIk
ver3には無かったね。
それと当初から他コマンドにも@って使えたっけ?
最初は@echoしか無かった気もする。
960名無し~3.EXE:2007/04/12(木) 22:32:03 ID:7lzh3tl3
ワークグループ名を変更したいのですが、何か良い方法はありませんか?
wmicから、出来そうな感じがするのですがよく分からず・・・。
961名無し~3.EXE:2007/04/13(金) 01:08:36 ID:A6FQ1BMt
10秒後にスタンバイ/10秒後に休止ってできないでしょうか?

C:\>%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState
がスタンバイってわかったんですが時間を指定したいです

シャットダウンの%windir%\system32\shutdown.exe -s -f -t 10
みたいな感じで
962名無し~3.EXE:2007/04/13(金) 01:51:34 ID:NxxYhSlK
何度も出てるが、BATで10秒間waitさせるかコマンドでタスク登録する

10秒間wait
ping localhost -n 11

タスク登録
schtasksコマンド WindowsXP/2003
atコマンド Windows2000
ただしwindows2000では、フリーでダウンロードできるリソースキットのjt.exeコマンドを使えば
schtasksと同等にタスクの全ての機能を設定できる。
963名無し~3.EXE:2007/04/13(金) 11:20:28 ID:dJwG/TE7
>>959
@は、どうだろう?
というか、他のコマンドにも@って使えるんだ?
echo以外つかったこともないや。
964名無し~3.EXE:2007/04/13(金) 16:08:28 ID:gIYzY2x1
>>963
使える。
まぁ普通は先頭で @echo off するから、使う機会は少ないが。
965名無し~3.EXE:2007/04/13(金) 22:05:53 ID:utIlmCcH
>>964
最近別の用途と掛け合わせて@ifって使われてるじゃん。すこしウザイけど。
966名無し~3.EXE:2007/04/13(金) 23:12:30 ID:3iAXsNCy
>>961
それって、スタンバイ?
うちではハイバネーションになったけど
967名無し~3.EXE:2007/04/13(金) 23:41:00 ID:wdm4rCvY
回復コンソールでif文を使った.batファイルって実行できますか?
また、回復コンソールは
1.WindowsXPが立ち上がらない時に実行する
2.WindowsXPのCDから起動して Rキーから起動する
事とした場合、作成した.batファイルの実行方法は
FDにコピーしてFDから実行する
以外の方法で何かありますでしょうか?
ネットワークは使えないしCDドライブも使えないし、USBメモリとか使えましたっけ?
968名無し~3.EXE:2007/04/13(金) 23:57:35 ID:utIlmCcH
事前に、ポリシー変更で回復コンソールでリムーバブルデバイスのアクセスを許可しておいて
さらに回復コンソールでアクセスをイネーブルにするコマンドを発行しないと
確かFDにもアクセスできないよ。
BATはCMD.EXE(又はCOMMAND.COM)の機能だから回復コンソールじゃ動かないだろう。
969名無し~3.EXE:2007/04/14(土) 00:15:59 ID:D18xQzsC
>>966
休止を有効にしてれば[休止]に
休止を無効にしてれば[スタンバイ]
970名無し~3.EXE:2007/04/14(土) 09:53:09 ID:1NEaWppo
>>968
回復コンソールではbatchというコマンドでバッチを実行できる
CMD.EXEと同等の機能があるかどうかは知らない
971名無し~3.EXE:2007/04/14(土) 11:10:02 ID:YdveHbWJ
(案)
次スレテンプレ

初心者〜管理者まで必読!コマンドライン(DOS Pt.6)
適材適所で GUI と CUI を組み合わせて、
クマ-ヽ(・(ェ)・)ノじゃない、(゚д゚)ウマー

前スレ
1 http://pc.2ch.net/win/kako/1002/10023/1002392089.html
2 http://pc5.2ch.net/win/kako/1013/10138/1013833995.html
3 http://pc8.2ch.net/test/read.cgi/win/1062775949/l50
4 http://pc8.2ch.net/test/read.cgi/win/1116131036/l50
5 http://pc11.2ch.net/test/read.cgi/win/1152544955/l50

DOS由来コマンドだけでなく、Windows バージョンアップのたびに拡充されてきたコマンド、
wsh(cscript)、cygwin、Resource Kit、Support Tools、その他のフリーソフト等ふくめ
コマンドラインインタフェースに関するネタならなんでもOK。

質問も歓迎だけど、自分で調べて勉強する努力も忘れずに。
972名無し~3.EXE:2007/04/14(土) 11:14:31 ID:YdveHbWJ
(案)
関連スレ

バッチファイルプログラミング 3.bat
http://pc11.2ch.net/test/read.cgi/tech/1148485555/l50

■★▲DOSはまだ現役! Drive.B:
http://pc11.2ch.net/test/read.cgi/os/1046875141/l50
973名無し~3.EXE:2007/04/14(土) 11:34:42 ID:mKXsUQir
>>968
>>970
ITmedia エンタープライズ:Windows Tips「回復コンソールで利用できるコマンド」
ttp://www.itmedia.co.jp/help/tips/windows/w0539.html
回復コンソールでは、利用できるコマンドが限られている。

そうだから、CMD.exe同等の機能はないんじゃないかな(自信ない)。
974名無し~3.EXE:2007/04/14(土) 13:15:29 ID:6SAiqFC9
標準のcmd.exeで実行できる(外部からコンソールアプリをDLしてこない)という条件で
ファイルAとファイルBを比較して条件分岐させたいです。
fc /b filea fileb
if errorlevel 1 (
hogehoge
) else (
piyopiyo
)
で実現できますが、バイナリ比較は時間がかかります。
もっと高速に比較して同一ファイルなのか異なるファイルなのか判断できませんか?
厳密にチェックする必要はなく、ファイルサイズで判断できれば十分です。
ファイルサイズで比較するコマンドを教えてもらえませんか?
975名無し~3.EXE:2007/04/14(土) 13:29:26 ID:HZdXwwGg
call /? か for /? よめ
比較は if で
976名無し~3.EXE:2007/04/14(土) 15:26:10 ID:6SAiqFC9
>>975
%~zI - %I ファイルのサイズに展開します。
ですよねぇ。しかしどのように書いたらいいのかさっぱり分かりません。
callだともう1個batファイルが必要そうなので、forで行くと思いますが
ifとfor組み合わせてどのように書けばいいのですか?
977名無し~3.EXE:2007/04/14(土) 15:46:16 ID:YRhG6sRI
だからcall /? 読めと言われただろうが
978名無し~3.EXE:2007/04/14(土) 15:49:13 ID:HZdXwwGg
forはめんどいのでcallで

call :sub FILEA FILEB
goto :eof
:sub
if %~z1==%~z2 echo おなじ
979名無し~3.EXE:2007/04/14(土) 16:08:34 ID:YRhG6sRI
support toolsのbindiff.exeはどう?
980名無し~3.EXE:2007/04/14(土) 16:45:03 ID:6SAiqFC9
>>978
アドバイスありがとうございます。
そのアドバイスを元にこんなバッチファイルを作成したのですが、全く動作しません。

http://www.uploda.org/uporg774186.txt

何が悪いのでしょうか?
どう修正したら良いのかわからなくなってきました・・・
981名無し~3.EXE:2007/04/14(土) 16:52:34 ID:YRhG6sRI
if /?よめ
982名無し~3.EXE:2007/04/14(土) 17:48:08 ID:b97HeRvr
もし〜だったら…する

という構文なのに

もし〜だったら

だけ書いてどうするんだw
983名無し~3.EXE:2007/04/14(土) 18:53:03 ID:6SAiqFC9
>>982
いや、だから
call :com
でまず ラベル:comに飛ばして
:com
if %~z1==%~z2
この比較(ファイルAとファイルBが等しいか)をして、その比較の戻り値( %errorlevel% で参照可能のはず)
が、callで読んだ次の行に戻ってきてif errorlevel 1 ( で、先ほど戻ってきた%errorlevel%
の値を参照して、もし等しくないなら1が入ってるはずで、等しいなら0が入ってるはずなので
1が入ってる場合にエラーを表示
って言う事をやっているのですが、もしかして :comを使いまわすようなコーディングしたら
ダメなんですかね?戻り値をどうやればcallで呼んだメインの方に返せるのかが分かりません。
returnコマンドとかあるのかな・・・
984名無し~3.EXE:2007/04/14(土) 18:56:25 ID:6SAiqFC9
>>982
>もし〜だったら

>だけ書いてどうするんだw

もし等しかったら〜 %errorlevel%に0を入れて呼び出し元に戻る
そうでなければ〜 %errorlevel%に1を入れて呼び出し元に戻る

ってやりたいんですよ。
そしたら戻ってきた時に%errorlevel%の中身を参照して処理を振り分ける事が出来る。
985名無し~3.EXE:2007/04/14(土) 19:02:58 ID:v4DEaveu
そんな面倒なことしないで>>978みたいにcall先でechoすれば?

:com
if %~z1==%~z2 (
echo %~n2ファイルは正常にコピーできています) else (
echo エラー!!%~n2のファイルサイズが異なっています!正常にコピーできていません)
goto :eof
986名無し~3.EXE:2007/04/14(土) 19:40:55 ID:6SAiqFC9
>>985
そのようにcall先でechoすると
goto :eof
で終わった際に、呼び出し元に戻りますか?
それとも、本当に呼び出し元に戻りなんかせずにEOFの通りファイルの最後、
つまりbat処理を終了してしまいますか?
1個正常にコピーできてないって出力したとしても、残りの4つも全て比較したいんで
終わるわけにはいかないんですよ。
# まだだ、まだおわらんよ

とりあえず>>978さん及び>>985さんのアドバイスを元に修正したbatファイルを
次のレスで投稿します。
かなり量が減ってスッキリしましたが、動作しません。
エラーメッセージは
== の使い方が誤っています。
です。
987名無し~3.EXE:2007/04/14(土) 19:41:45 ID:6SAiqFC9
@echo off
echo C:\WINDOWS\repair\中のファイルが正常にC:\WINDOWS\system32\config\の中にコピーされたか
echo どうかをファイルサイズで比較してチェックします。kj_kai2.batを実行した後に実行して下さい。
echo Ctrl+Cキー同時押しでチェックをキャンセルできます。
pause

call :com c:\windows\repair\system c:\windows\system32\config\system
call :com c:\windows\repair\software c:\windows\system32\config\software
call :com c:\windows\repair\sam c:\windows\system32\config\sam
call :com c:\windows\repair\security c:\windows\system32\config\security
call :com c:\windows\repair\default c:\windows\system32\config\default

echo 1つもエラーが出なければ正常に5つのファイルがコピーできています
echo もし1つでもエラーが出たならば、エラーが出たファイルを手動でコピーしてください
echo Backupファイルは C:\WINDOWS\tmp\の中にあるはずです
pause
goto :EOF

:com
if %~z1==%~z2 (
echo %~n2ファイルは正常にコピーできています
) else (
echo エラー!!%~n2ファイルのファイルサイズが異なっています!正常にコピーできていません
)
pause
goto :EOF
988名無し~3.EXE:2007/04/14(土) 19:45:33 ID:YRhG6sRI
helpよめ
set/?よめ
989名無し~3.EXE:2007/04/14(土) 19:48:51 ID:YRhG6sRI
goto/?よめ
990名無し~3.EXE:2007/04/14(土) 20:15:13 ID:YRhG6sRI
だいぶ重症だな
ファルダまたはディレクトリって分るかな?
ms-its:C:\WINDOWS\Help\glossary.chm::/glossary_per.htm#JPN_HA
991名無し~3.EXE:2007/04/14(土) 20:40:44 ID:HZdXwwGg
>>987
repairの方はファイル名が system.bak じゃね?
if "%~z1"=="%~z2"
などにしとけばファイルがない場合でも構文エラーにはならなくなる。

つーかさ、これ、Windows上で実行するのか?
もし生DOS上で実行するなら拡張機能は一切使えないぞ。
992名無し~3.EXE:2007/04/14(土) 21:10:59 ID:6SAiqFC9
>>991
repairの方もsystemです。 .bakは C:\WINDOWS\tmpに作成されるbatがあります。
ファイルは存在するので、ファイルが存在しないからエラーなのではなくて
多分構文がおかしいのかと。

Windows上でも生DOS上でも実行しませんよ。
実行するのはBartPE上です。
993名無し~3.EXE:2007/04/14(土) 21:34:09 ID:HZdXwwGg
ふーん。うちのWinXPでは動くけどね〜〜
BATは基本的に変数展開のあとに構文解析するから
echo off せずに表示してみれば?
994名無し~3.EXE:2007/04/14(土) 21:50:36 ID:bU+xOO1T
==の使い方が間違ってると出たら、ファイルが存在してないことが原因。
995名無し~3.EXE:2007/04/14(土) 21:56:50 ID:bU+xOO1T
@echo off
echo a>a.txt&echo bb>b.txt
setlocal
rem +++ used local-variable : err_no, flag
echo [test1 start]&call :cmp2 a.txt a.txt
echo [test2 start]&call :cmp2 a.txt b.txt
echo [test3 start]&call :cmp2 a.txt x.txt
echo [test4 start]&call :cmp2 x.txt a.txt
echo [test5 start]&call :cmp2 x.txt x.txt
:end
del a.txt b.txt c.txt
endlocal
goto :eof
:cmp
set /a flag=0
if not exist %1 set /a flag = 2
if not exist %2 set /a flag += 4
if %flag% gtr 0 set err_no=%flag%&goto :eof
if %~z1 neq %~z2 set err_no=1&goto :eof
set err_no=0&goto :eof
:cmp2
call :cmp %1 %2
call :errmsg %err_no%
goto :eof
:errmsg
if %1 equ 6 echo *** error: file 1 and 2 not found ***
if %1 equ 4 echo *** error: file 2 not found ***
if %1 equ 2 echo *** error: file 1 not found ***
if %1 equ 1 echo *** error: unmatched sizes of file ***
if %1 equ 0 echo === same sizes of file ===
echo:&goto :eof
996名無し~3.EXE:2007/04/14(土) 22:30:16 ID:/RBcjwqG
ume
997名無し~3.EXE:2007/04/14(土) 22:47:52 ID:hbxFcMHM
次スレをたてましょうか?
998名無し~3.EXE:2007/04/14(土) 22:57:23 ID:hbxFcMHM
次スレ
ユーザー必読!コマンドライン(DOS Pt.6)
http://pc11.2ch.net/test/read.cgi/win/1176558776/l50

サブジェクトが長過ぎるため、新規スレがたてられなかったので、タイトル(サブジェクト)を変更しました。
999名無し~3.EXE:2007/04/14(土) 23:00:28 ID:hkKg08IN
1000名無し~3.EXE:2007/04/14(土) 23:17:02 ID:NDOCwV5G
続きは、
次スレ
ユーザー必読!コマンドライン(DOS Pt.6)
http://pc11.2ch.net/test/read.cgi/win/1176558776/l50
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。