初心者〜管理者まで必読!コマンドライン(DOS Pt.5) 952 :
950 :2007/04/12(木) 16:31:40 ID:wBWPLIFm
>>951 期待通り、余計なものは全部消えてくれました。
どうもありがとうございました。
これ知らない人もいるんだぁ
>>953 Win95あたりからPC覚えた奴は、まず知らんよ。
余程の研究心・向上心がない限りは。
関係ないけど、@echo offの、@ってMS-DOSのバージョンいくつから、サポートされたんだっけ? 昔は、echo offしかなかったよね。(で、echo offと表示されてしまうという)
PC-98用だとver. 5 にはあった。 3.3Cにはたぶんなかった。 EPSONのver. 4 はしらん。
Win98からPC使い始めたけど知ってる。 向上心はないけどヲタク気質なのは自覚してる。 常識はないけどハマると深いとこまで行っちゃう。
958 :
955 :2007/04/12(木) 22:12:58 ID:R5N4StSu
>>956 言われてみれば、たしかに、PC-98用で、Ver5.0あたりだったような気がする。
よく覚えてはいないんだけどね。
3.3Dは、どうだったか覚えてない。
ver3には無かったね。 それと当初から他コマンドにも@って使えたっけ? 最初は@echoしか無かった気もする。
ワークグループ名を変更したいのですが、何か良い方法はありませんか? wmicから、出来そうな感じがするのですがよく分からず・・・。
10秒後にスタンバイ/10秒後に休止ってできないでしょうか? C:\>%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState がスタンバイってわかったんですが時間を指定したいです シャットダウンの%windir%\system32\shutdown.exe -s -f -t 10 みたいな感じで
何度も出てるが、BATで10秒間waitさせるかコマンドでタスク登録する 10秒間wait ping localhost -n 11 タスク登録 schtasksコマンド WindowsXP/2003 atコマンド Windows2000 ただしwindows2000では、フリーでダウンロードできるリソースキットのjt.exeコマンドを使えば schtasksと同等にタスクの全ての機能を設定できる。
>>959 @は、どうだろう?
というか、他のコマンドにも@って使えるんだ?
echo以外つかったこともないや。
>>963 使える。
まぁ普通は先頭で @echo off するから、使う機会は少ないが。
>>964 最近別の用途と掛け合わせて@ifって使われてるじゃん。すこしウザイけど。
>>961 それって、スタンバイ?
うちではハイバネーションになったけど
回復コンソールでif文を使った.batファイルって実行できますか? また、回復コンソールは 1.WindowsXPが立ち上がらない時に実行する 2.WindowsXPのCDから起動して Rキーから起動する 事とした場合、作成した.batファイルの実行方法は FDにコピーしてFDから実行する 以外の方法で何かありますでしょうか? ネットワークは使えないしCDドライブも使えないし、USBメモリとか使えましたっけ?
事前に、ポリシー変更で回復コンソールでリムーバブルデバイスのアクセスを許可しておいて さらに回復コンソールでアクセスをイネーブルにするコマンドを発行しないと 確かFDにもアクセスできないよ。 BATはCMD.EXE(又はCOMMAND.COM)の機能だから回復コンソールじゃ動かないだろう。
>>966 休止を有効にしてれば[休止]に
休止を無効にしてれば[スタンバイ]
>>968 回復コンソールではbatchというコマンドでバッチを実行できる
CMD.EXEと同等の機能があるかどうかは知らない
標準のcmd.exeで実行できる(外部からコンソールアプリをDLしてこない)という条件で ファイルAとファイルBを比較して条件分岐させたいです。 fc /b filea fileb if errorlevel 1 ( hogehoge ) else ( piyopiyo ) で実現できますが、バイナリ比較は時間がかかります。 もっと高速に比較して同一ファイルなのか異なるファイルなのか判断できませんか? 厳密にチェックする必要はなく、ファイルサイズで判断できれば十分です。 ファイルサイズで比較するコマンドを教えてもらえませんか?
call /? か for /? よめ 比較は if で
>>975 %~zI - %I ファイルのサイズに展開します。
ですよねぇ。しかしどのように書いたらいいのかさっぱり分かりません。
callだともう1個batファイルが必要そうなので、forで行くと思いますが
ifとfor組み合わせてどのように書けばいいのですか?
だからcall /? 読めと言われただろうが
forはめんどいのでcallで call :sub FILEA FILEB goto :eof :sub if %~z1==%~z2 echo おなじ
support toolsのbindiff.exeはどう?
if /?よめ
もし〜だったら…する という構文なのに もし〜だったら だけ書いてどうするんだw
>>982 いや、だから
call :com
でまず ラベル:comに飛ばして
:com
if %~z1==%~z2
この比較(ファイルAとファイルBが等しいか)をして、その比較の戻り値( %errorlevel% で参照可能のはず)
が、callで読んだ次の行に戻ってきてif errorlevel 1 ( で、先ほど戻ってきた%errorlevel%
の値を参照して、もし等しくないなら1が入ってるはずで、等しいなら0が入ってるはずなので
1が入ってる場合にエラーを表示
って言う事をやっているのですが、もしかして :comを使いまわすようなコーディングしたら
ダメなんですかね?戻り値をどうやればcallで呼んだメインの方に返せるのかが分かりません。
returnコマンドとかあるのかな・・・
>>982 >もし〜だったら
>だけ書いてどうするんだw
もし等しかったら〜 %errorlevel%に0を入れて呼び出し元に戻る
そうでなければ〜 %errorlevel%に1を入れて呼び出し元に戻る
ってやりたいんですよ。
そしたら戻ってきた時に%errorlevel%の中身を参照して処理を振り分ける事が出来る。
そんな面倒なことしないで
>>978 みたいにcall先でechoすれば?
:com
if %~z1==%~z2 (
echo %~n2ファイルは正常にコピーできています) else (
echo エラー!!%~n2のファイルサイズが異なっています!正常にコピーできていません)
goto :eof
>>985 そのようにcall先でechoすると
goto :eof
で終わった際に、呼び出し元に戻りますか?
それとも、本当に呼び出し元に戻りなんかせずにEOFの通りファイルの最後、
つまりbat処理を終了してしまいますか?
1個正常にコピーできてないって出力したとしても、残りの4つも全て比較したいんで
終わるわけにはいかないんですよ。
# まだだ、まだおわらんよ
とりあえず
>>978 さん及び
>>985 さんのアドバイスを元に修正したbatファイルを
次のレスで投稿します。
かなり量が減ってスッキリしましたが、動作しません。
エラーメッセージは
== の使い方が誤っています。
です。
@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
helpよめ set/?よめ
goto/?よめ
だいぶ重症だな ファルダまたはディレクトリって分るかな? ms-its:C:\WINDOWS\Help\glossary.chm::/glossary_per.htm#JPN_HA
>>987 repairの方はファイル名が system.bak じゃね?
if "%~z1"=="%~z2"
などにしとけばファイルがない場合でも構文エラーにはならなくなる。
つーかさ、これ、Windows上で実行するのか?
もし生DOS上で実行するなら拡張機能は一切使えないぞ。
>>991 repairの方もsystemです。 .bakは C:\WINDOWS\tmpに作成されるbatがあります。
ファイルは存在するので、ファイルが存在しないからエラーなのではなくて
多分構文がおかしいのかと。
Windows上でも生DOS上でも実行しませんよ。
実行するのはBartPE上です。
ふーん。うちのWinXPでは動くけどね〜〜 BATは基本的に変数展開のあとに構文解析するから echo off せずに表示してみれば?
==の使い方が間違ってると出たら、ファイルが存在してないことが原因。
@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
ume
次スレをたてましょうか?
乙
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。