初心者〜管理者まで必読!コマンドライン(DOS Pt.5)
2 :
名無し~3.EXE :2006/07/11(火) 00:24:53 ID:HxtG+321
意気揚々と埋めてるから何かネタでもあるのかと思ったのに・・・
for /?
だれもいない
誘導されて来ました。 クリックでTempフォルダの中身を消去するアイコン (.bat ファイル) を作りたいのですが、 rmdir /s "Tempフォルダのパス" だとTempフォルダ自体も消えてしまいます。 この場合に限らず、ディレクトリの中身だけを削除する場合どのように命令すればよいのでしょか。
消した後に作る
Tempフォルダにcdしてrmdir /s . なんてな
9 :
名無し~3.EXE :2006/07/13(木) 17:58:16 ID:ooElHgFf
>>9 その中にBATファイル例があるのは気のせいなんだろうか?
11 :
名無し~3.EXE :2006/07/13(木) 18:09:40 ID:ooElHgFf
その例を メモ帳で書いて拡張子を.batにしてhotfixと同じフォルダに入れて クリックするだけでいいんですか。
>>7 だと、アクセス権とか監査とかが復元できない場合があるので
>>8 のほうが賢いと思う。
ただ、/sだけでは「よろしいですか (Y/N)?」と聞いてきてしまうので、/qも付けたほうがいいかも。
あと、万が一対象フォルダが無くなった状態で実行すると、カレントフォルダ以下を 丸消しに逝ってしまうので、 cd 対象フォルダ&&rmdir /s /q . としたほうが良いと思う。
14 :
名無し~3.EXE :2006/07/13(木) 21:58:41 ID:64yIeWy4
そうだけど、全部手入力するするの? dir /b > patch.batとすれば、多少、編集が楽になるし、 for など使えば、-m -z でOKなパッチだけだったら、 ディレクトリ内のパッチをあてるようにもできるだろうし。 -m -z が使えないのが混ざってるとだめだけど。
15 :
14 :2006/07/13(木) 22:02:43 ID:64yIeWy4
>>11 のコメントでした、コメントがとんでしまってすまん。
dir /b /o:d > out.txt こうしておけば更新日時が古い順に並ぶお。 ダウンローダでファイルの日時を取得してるならこうやって並べると気持ちいいかも。
話の途中ですみません。 XPProで回復コンソールをWINDOW配下にインストールしたいのですが、 何かいい方法ないでしょうか? デフォだと%SYSTEMDRIVE%に強制的に 作られるんですが、ルートってのは目障りなんです。手動でWINDOWS 配下に移し、BOOT.INIのパス表記も合わせても、回復コンソール起動中に TXTSETUP.SIFが見つからない云々…のエラーが出てしまいます。 よろしくおねがいします。
うほっ、IDがDOS
神キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
質問です。 batでwavを呼び出して一度だけ再生して 終了させる方法はありませんか? 環境はXPproです。
22 :
21 :2006/07/20(木) 14:28:35 ID:bWg0PLeg
自己解決しました
・・・どう解決したか書いとけよ。
そんな情報イラン
25 :
21 :2006/07/22(土) 05:25:08 ID:WFo5cAzv
>>23 自分としては
一応別の言語でそれっぽいもの作って対応。
sleepとかもいつの間にか消えてたんでついでに作りました。
なんでバッチに拘ってるか分からなくなってきたorz
というかコマンドプロンプトで解決できてないや・・・
sndrec32 /embedding /play 〜.wav
27 :
名無し~3.EXE :2006/07/23(日) 15:55:03 ID:98gcVlRV
全ディスク中から、特定の名前のディレクトリだけを指定したいのですが、 ディレクトリ名にはワイルドカードは使えないんでしょうか? 例:\settingというディレクトリを指定したい
なんでこういう実験してみればわかるようなことを質問するかなぁ・・・
30 :
名無し~3.EXE :2006/07/26(水) 00:30:25 ID:7KnQnoV2
>>30 検証したわけではないが、%を^%に変更したらどうだべ?
32 :
30 :2006/07/26(水) 01:17:40 ID:7KnQnoV2
>>31 駄目でした…。
Google側に、「^」を含んだまま渡ってしまいます。
set CD=^%CD^% しておくとか
>>30 Shift_JIS以外のコードを使ってみるとか。
エスケープが必要な文字(%と&)を^でエスケープしてダブルクウォートで囲まないで渡す
36 :
30 :2006/07/26(水) 06:30:30 ID:7KnQnoV2
>>35 氏の方法でできました!
>>33 なるほどこれもいけますね。
汎用性がちょっと低いのが難点でしょうか。
>>34 実はこのコマンドラインを最終的には Perl のスクリプトの中に
含めたいのですが,その関係上でできれば Shift_JIS で
いきたかったのです。
>>31 氏も含め皆様どうもありがとうございました!
なんか気分がいい
39 :
名無し~3.EXE :2006/07/27(木) 14:05:13 ID:ed7fKJ1k
バッチファイルについて教えてください。 同一フォルダにある全てのテキストファイル(*.txt)の頭に、jpegファイルを連結して偽装jpegファイル を作りたい(目的は、iアプリのreate用)のですが、これのためのバッチファイルが書けません。 == connect.bat == copy dummy.jpg dummy2.jpg copy dummy2.jpg+%1 ren dummy2.jpg %1 これを connect *.txt で実行すると、やはり全てのテキストファイルが連結されてしまってうまくいきません。 PC9801時代からDOSは触ってるのですが、このような処理をどう書くのか忘れてしまって困っています。 なにかいい案はないでしょうか?
forでループさせろよ
41 :
名無し~3.EXE :2006/07/27(木) 17:18:18 ID:ed7fKJ1k
>>40 forあたりを使いそうなのはわかるのですが、どう書いたらよいのかわかりません。
for /?
four のレスは見事だな
忘れたんなら for /? みれば思い出せるだろ。 DOS時代のforの機能で十分だし。
>>39 2行目を
for /f %%F in ('dir /b %1') do copy dummy2.jpg+%F
にしたらどうだ?
forが使えんやつはgotoとshiftでも使ってろや
47 :
45 :2006/07/27(木) 21:11:39 ID:IqaLZ9Vg
スマソ、間違えたorz
for /f %%F in ('dir /b %1') do (
copy dummy2.jpg+%%F
ren dummy2.jpg %%F
)
>>45 をカキコした直後にブレーカーが落ちたもんですぐ訂正できなかった(泣)
49 :
45 :2006/07/27(木) 21:53:28 ID:IqaLZ9Vg
>>48 いけね、コピー先のファイル名はこの場合省けないのねorz
for /f %%F in ('dir /b %1') do (
copy /y dummy.jpg+%%F dummy2.jpg
move /y dummy2.jpg %%F
)
これでおk?
move?
バッチファイルのコマンドラインの途中で改行を入れたいんですが どうしたらいいですかね? それと dir hogehoge.txt /s /b で取れたフルパスをそのまま実行させたいのですがどうしたらいいのでしょう? お願いします
改行無理 お前も例にもれず、for /?
53 :
51 :2006/07/28(金) 03:22:10 ID:1XL80h13
補足です hogehoge.txtはファイル名は判っていますがサブフォルダに深く潜り込んでいて その為dir検索しています
54 :
51 :2006/07/28(金) 03:27:53 ID:1XL80h13
仕方なく現在は検索結果を別のバッチファイルにリダイレクトして実行させてます で start(改行文字) hogehoge.txtのフルパス ってやりたかったんですが・・・
>>54 forを使うのはループのためじゃなくってコマンド結果を環境変数に格納するためだ。
56 :
51 :2006/07/28(金) 03:53:20 ID:1XL80h13
57 :
51 :2006/07/28(金) 03:54:27 ID:1XL80h13
あ、そっか! ありがとー
58 :
名無し~3.EXE :2006/07/29(土) 01:06:41 ID:DUV1QYxh
echo タイトル: %~1 echo URI: %~2 echo 回数: %~3 echo 間隔: %~4 [sec] FOR /L %%I IN (%~3,-1,1) DO ( title [%%I / %~3 @ %~4sec] %~1 .\Script\sleep.exe %~4 .\Jane2ch.exe -b -h "%~2" ) このコマンドをSleep.exe使わずにやりたいんですけど、 これって .\Script\sleep.exe %~4 ↓ .\Ping.bat 1 %~4 でPing.batの中は @echo off ping localhost -n 2 > nul ping localhost -n %1 > nul でだめなんでしょうか? 動かないんですけど。。。
だめ。
60 :
名無し~3.EXE :2006/07/29(土) 03:01:48 ID:DUV1QYxh
>>59 やっぱりだめですか
書き換え方教えてください
61 :
58 :2006/07/30(日) 16:20:22 ID:TgP6edG5
どなたか教えてください
ping.bat ping ping.exe
63 :
58 :2006/07/30(日) 17:24:04 ID:TgP6edG5
>>62 えっ、どういうことでしょうか?
echo タイトル: %~1
echo URI: %~2
echo 回数: %~3
echo 間隔: %~4 [sec]
FOR /L %%I IN (%~3,-1,1) DO (
title [%%I / %~3 @ %~4sec] %~1
ping.bat ← ここです
.\Jane2ch.exe -b -h "%~2"
)
ってことですか?
久々に言おう・・・ 必死だなw
>>63 ping.batの中身の方だ。
つーか、そんな紛らわしい名前付けるな。
pingって書いたら、ping.batが実行されるかping.exeが実行されるか知ってる? それにbat中で別batを呼び出すのに単にbatって書いちゃダメだろ。
67 :
名無し~3.EXE :2006/07/30(日) 22:37:49 ID:TgP6edG5
>>65-66 えーと、こういうことでしょうか?
echo タイトル: %~1
echo URI: %~2
echo 回数: %~3
echo 間隔: %~4 [sec]
FOR /L %%I IN (%~3,-1,1) DO (
title [%%I / %~3 @ %~4sec] %~1
Call .\Waiting.bat %~4 ←ここを変更(名前は紛らわしいとだめらしいのでWating.bat)
.\Jane2ch.exe -b -h "%~2"
)
Waiting,batの中は
@echo off
ping localhost -n 2 > nul
ping localhost -n %1 > nul
↑じゃなしに
これなんですか?
ping
ping.exe
68 :
67 :2006/07/31(月) 02:00:01 ID:pjJQiXPC
出来ました ありがとうございました
69 :
名無し~3.EXE :2006/08/02(水) 13:36:04 ID:wsgBoBsR
XP sp2で USBマウスが反応しません。 (動きません) マウス(Hamma)の型番が不明でドライバーも見つかりません。 ディバイスマネージャでは、PS2-Pad というドライバがひとつ だけあります。 ドライバの更新、トラブルシューティングを やっても直りませんでした。 どうすれば、マウスが動くようになるでしょうか?
ネタ? スレタイ読める?
71 :
69 :2006/08/02(水) 14:23:26 ID:wsgBoBsR
すみません。 初心者スレと見間違いました。 申し訳ありませんでした。 w 気にせずに質疑、議論を進めてください。
質疑、議論とかそんな大そうなスレじゃないし . ィ .._ .......、._ _ /:/l! :~""''.>゙' "~ ,、、''‐'、| _ ご冗談を ゙、'、::::::ノ:::::::_,.-=. _〜:、 /_.}'':, ``、/:::::::::__....,._ `゙'Y' _.ェ-、....._ /_゙''i゙ノ、ノ ,.--l‐''"~..-_'.x-='"゙ー 、`'-、 ,:' ノ゙ノブ " .!-'",/ `'-‐'') /\ `/ でノ-〈 .-''~ >'゙:: ‐'"゙./ ヽ.,' ~ / //::::: ', / ,:'
73 :
名無し~3.EXE :2006/08/03(木) 00:20:18 ID:6j4+y6+n
こんばんは 最近コマンドラインの勉強を始めた者ですが質問があります。 コマンド実行結果によるERRORLEBELの値で分岐処理をしようと思っているのですが、 ERRORLEVELの値についてコマンド/?を調べてもどこにも書かれていません。 自分でざっと調べた結果、正常処理なら「0」、異常処理なら「それ以外」のように 思うのですが、具体的な値はどのように調べればよろしいでしょうか ご教授願います。
確かに未だにまともなリファレンスがないのはアレだよなぁ。
>73 これと言った統一ルールは無いよ。 ただ特に説明が無ければ、正常だろうがエラーだろうが 大抵は「0」が返ってくると思う。 何が変えるかはコマンドやexe次第。 C言語分かるなら、mainの戻り値≒ERRORLEVEL と思えばよろし。
0か1以外返すやつなら大抵readmeやヘルプとかに書いてる
コマンドで説明がないものは基本的に戻り値に意味が無いものだと思え。 統一した値など全くない。
それでも0は想定の範囲内くらいの意味は残ってるだろ。
>>78 0にもまったく意味なし。
正常でも異常でも0を返すコマンドはいっぱいある。
EXIT_SUCCESS は 0 じゃね?
2ちゃんねるの90パーセントは知ったかで構成されている
0が帰ってきたときは正常ということは全く言えないので0も無意味。
>>81 はもっと勉強しる。
正常に終了したわけじゃなくても、想定の範囲内で終了したなら 0を返すと思うが…。
想定の範囲内とかわけわからん言い方よせ。 もしダンマリとか落ちるとか以外の終了の場合ならそりゃその通りかもしれんが 普通それは想定内とか言う意味じゃない。 (そういうコマンドなら、unknownエラーでも0を返すよ)
>>79 なんのコマンドかに因らず「0なら正常終了」と考えられるかといえばそうじゃないのは確か。
でも、コマンドごとにどういうケースで0返すか考えて使うなら非常に有用だよ。
>>86 それは逆。コマンド毎に、エラーコードXXはこういう場合というのが考えれるのなら非常に有効。
88 :
名無し~3.EXE :2006/08/03(木) 23:15:55 ID:JXRq3dhJ
┐(´ー`)┌
>75で既に十分語られていると思うのだが。
まあ標準コマンドだと殆どは戻り値に意味が無いね。
正常終了=0、何らかのエラー=0以外の値、 となってない標準コマンドってあります? ほとんど上記パターンに則ってると思うんだけど。
>91 CHOICEコマンド
コマンドラインで、引数を元にテキストファイルを作成する事って出来ますでしょうか? 何がしたいかといいますと、beckyというメールソフトを使ってるのですが、 フィルタリングマネージャなどで条件により、プログラムの起動。 そのプログラムに引数として、メール本文を投げ、処理を行ったあと、 結果をテキストファイルとして出力したいんです。 どなたか詳しい方いらっしゃいますでしょうか?
beckyって使ってないから分からんけど、バッチファイル中では 引数は%1 %2 %3 ...で参照できるよ。 hoge.bat中に、 その処理させたいプログラム名 %1 > %2 って書けば、 hoge.bat hage.txt uge.txt でhage.txtが処理されてuge.txtに出力される。
96 :
名無し~3.EXE :2006/08/15(火) 18:59:50 ID:tB2dtgI0
一度だけ自動実行するバッチファイルを作りたいのですが、 自動実行するコマンドってあるのでしょうか?
タスクに登録するとか スタートアップで起動してBATの最後にリンクを削除するようにするとか レジストリの runonce に登録するとか 試した?
98 :
96 :2006/08/15(火) 19:46:01 ID:tB2dtgI0
>>97 自動実行って、そういうコマンドがあるんじゃなくって、
タスクに登録するなりして実現するものなんですね。
恥ずかしながら、コマンド一つで出来るものかと思っておりました。
ありがとうございました。
タスクに登録するコマンドならあるけど?
100 :
名無し~3.EXE :2006/08/15(火) 22:40:06 ID:rx3Cek+f
初心者な質問すみません。 コマンドプロンプト上で AフォルダとBフォルダの中身を比較して(下層フォルダ含む) AフォルダにあるものをBフォルダから削除するには どうすればよいでしょうか? 出来ればMD5などのハッシュ比較も行いたいです。 あと、ハングル名などのunicodeでもこれは可能でしょうか?
robocopyでいくつかのスイッチ組み合わせれば近いこと出来るかも。 ハッシュ比較は無理だけど。
>>101 スタートフォルダは普通に英数なんですけど
下層フォルダとファイル名がハングルなのですが
その場合でも出来そうですか?
サイズ比較くらいでも無理ですかね?
取り合えず、そうあたりで、 ファイルサイス一致するかどうか、次にバイナリ一致するかどうか で試してみれば? コンペアさせる順序をファイルサイズでソートすれば ファイル数がそれほど多くなければ十分実用になると思う
>>103 ファイル数が少なくて数十
多くて数千・・・危険?
>>100 スクリプト(このスレ的にはコンソールスクリプトかな)でやる方がいいね。
それとハッシュでの比較ってのは、既にどちらかのハッシュが算出してある場合以外は無意味。
何故かというと、通常のバイナリ比較だと
Aのバイナリを読み込み→Bのバイナリを読み込み→バイナリ比較
という流れだが、ハッシュ比較だと、ハッシュというのはバイナリ全体から算出するものなので
Aのバイナリを読み込み→Aのハッシュを算出→Bのバイナリを読み込み→Bのハッシュを算出→ハッシュ比較
と手間が増える上に、ハッシュというのは別バイナリで同一ハッシュになる可能性もあるから
信頼性は下がるという悪いこと尽くめの方法。
>>104 数千くらいなら全然問題ないでしょ。
20億越えると危険だけど。
まあ、数が多けりゃそれだけ時間は掛かるが
処理時間はファイル数よりファイルサイズ一致数に影響される。
まあちょっと(かなり)面倒だろうが頑張ってくれ。 for /? if /? dir /? setlocal /? あたり。 例】 ファイルサイズ for /f "delims=" %I in ('dir /a-d /s /b d:\foo') do echo "%~fI" は %~zI バイト バイナリ比較 fc /b file1 file2>NUL if not errorlevel 1
ありがとう御座いますですよー。 初心者なりに頑張ってみます。
今HDDが死に掛けであわててバックアップとってるところですが xcopyのコマンドでコピー先に既にあるファイルはコピーしない とするにはどうしたらいいでしょうか?
robocopyは便利だよ
Windowsのバッチファイル(.bat)で、単に第1引数、第2引数… のようなかたちではなく、 「-x」や「-x <パラメータ値>」のような形でパラメータを 渡して利用者が使いやすいような仕組みにしてあげたいとおもうのですが、 それをサポートしてくれる便利なツールなどはありますでしょうか? (UNIXでいうgetoptsないしgetoptみたいなもの)
外部ツール使うぐらいなら自分でなんとか解析するのじゃ。 shift とか for (%*) とか使えば何とかなるのじゃ。
>>108 /dかな。
指が覚えてるフォルダ丸ごと差分コピー。漏れが一番よく使う使い方。
xcopy /deciqhrkoxy コピー元フォルダ コピー先フォルダ
>>112 便利なツールは知らないけど、forで無理矢理作ってみた。
スイッチと値をひとかたまりで扱うため「-A:値」のようにコロンで繋げる書式にしちゃったけど。
@echo off
setlocal
set ParmA=
set ParmB=
set ParmC=
set ParmD=
:parmset
for /f "tokens=1* delims=:" %%i in ('echo %1') do (
if "%ParmA%"=="" echo %%i|find /i "-A">nul&&set ParmA=%%j
if "%ParmB%"=="" echo %%i|find /i "-B">nul&&set ParmB=%%j
if "%ParmC%"=="" echo %%i|find /i "-C">nul&&set ParmC=%%j
if "%ParmD%"=="" echo %%i|find /i "-D">nul&&set ParmD=%%j
)
shift
if not "%1"=="" goto :parmset
if not "%ParmA%"=="" (echo スイッチ -A で指定された値は %ParmA% です。) else (echo スイッチ -A は指定されていません。)
if not "%ParmB%"=="" (echo スイッチ -B で指定された値は %ParmB% です。) else (echo スイッチ -B は指定されていません。)
if not "%ParmC%"=="" (echo スイッチ -C で指定された値は %ParmC% です。) else (echo スイッチ -C は指定されていません。)
if not "%ParmD%"=="" (echo スイッチ -D で指定された値は %ParmD% です。) else (echo スイッチ -D は指定されていません。)
endlocal
>>114 ありがとうございます!上手くいきました!
>>115 ありがとうございます!findと暗黙的ループ変数を組み合わせて使うことはおもいつきませんでした。
大変たすかりました
引数1個も無しでも動くように直したyp @echo off setlocal set ParmA= set ParmB= set ParmC= set ParmD= :parmset if "%1"=="" goto :parmsetend for /f "tokens=1* delims=:" %%i in ('echo %1') do ( if "%ParmA%"=="" echo %%i|find /i "-A">nul&&set ParmA=%%j if "%ParmB%"=="" echo %%i|find /i "-B">nul&&set ParmB=%%j if "%ParmC%"=="" echo %%i|find /i "-C">nul&&set ParmC=%%j if "%ParmD%"=="" echo %%i|find /i "-D">nul&&set ParmD=%%j ) shift goto :parmset :parmsetend if not "%ParmA%"=="" (echo スイッチ -A で指定された値は %ParmA% です。) else (echo スイッチ -A は指定されていません。) if not "%ParmB%"=="" (echo スイッチ -B で指定された値は %ParmB% です。) else (echo スイッチ -B は指定されていません。) if not "%ParmC%"=="" (echo スイッチ -C で指定された値は %ParmC% です。) else (echo スイッチ -C は指定されていません。) if not "%ParmD%"=="" (echo スイッチ -D で指定された値は %ParmD% です。) else (echo スイッチ -D は指定されていません。) endlocal
斜め横からすみません
この前から見てますが↑これと
>>115 はどうやって使うんですか?
BATファイルにして動かしても、、、、何ですが、、、、
%%jを%%iにしてみたら?
すまん。 BATの内容読んだら、パラメタには、 -A:xxxx -B:yyyy というようにコロンで区切って値を渡すようになってたよ。
123 :
名無し~3.EXE :2006/08/19(土) 21:08:22 ID:VuqHKvs3
わからなきゃ使わなければいいのに
他人が使ってるのを見たら使いたくなるだろうが 使いたくなる人が増えたら作者も作ったかいがあるというものだ だれか親切な人使い方教えてくれ
1.
>>118 の「@echo off」から「endlocal」の行を選択してメモ帳に貼り付け。
2. 各行の末尾に空白文字(半角スペース)が入ってたら消す。
3. 「hoge.bat」でファイル名を付けて保存。
4. コマンドプロンプトで、
hoge.bat -A:apple -B:bag -C:cat -D:dog
とか打ってみる。
5. 下の表示が出たら成功。
スイッチ -A で指定された値は apple です。
スイッチ -B で指定された値は bag です。
スイッチ -C で指定された値は cat です。
スイッチ -D で指定された値は dog です。
5. 引数いろいろ変えてテストしてみてクレ。
あ5がふたつだorz
exeファイルをログインしているユーザとは 別のユーザで実行したいんですけどできます? OSはxpです。 start コマンドでexeファイルは起動できるのですが、 別ユーザ権限で実行したいのです。 exeファイルを右クリックしてメニューに出てくる「別のユーザで実行する」のを コマンドでできますでしょうか?
るなs
バッチファイルの実行中に指定秒数一時停止させる方法は有りますでしょうか? pauseだと人が押さないとアレなんで…
これはこれでアレな方法 @echo off echo 約5秒待ちます... start /min /wait mshta.exe "javascript:void(setTimeout('window.close()', 5000))" echo ok
' sleep.vbs ' C> cscript //nologo sleep.vbs 5 Set args = WScript.Arguments if args.Count = 1 then WScript.Sleep args.Item(0) * 1000
>>131 ,132
出来ました!
ありがとうございますm(_ _)m
次の1行を記述したファイル sleep.js : try{WScript.Sleep(1000*WScript.Arguments(0));}catch(e){} を作って,バッチファイル中に cscript //b sleep.js 10 のように書けば10秒sleep。
136 :
135 :2006/08/26(土) 10:36:18 ID:FeFrpd2p
>> 134,135 ありがとうございます、そちらも試してみます。
ping 127.0.0.1 -n 10>nul
細かいことだが
>>138 だと「約9秒間待つ」処理になる。
まあ、バッチファイルにそれほど細かい精度を要求する人はいないと思うが…
じゃあ ping 0 -n 11 > nul で
ワロタ なごんだ 感心した
テキストファイルの最初の数行を抜き取って上書きしようとして more +!nl! hoge.txt>hoge.txt とするとテキストが空になってしまうのですが、一度別のファイルに書き出してからじゃないと上書きは無理ですか?
すいません
>>143 の行の前に
setlocal enabledelayedexpansion
set /p n=
です
入出力のファイルオープンを同じファイルにするのは無理だって。 これはどのソフトでも同じ。 他ソフトを見習って、一旦作業ファイルに出力した後、 入力ファイル削除、出力ファイルをリネームしろ。
146 :
143 :2006/08/27(日) 23:10:18 ID:DuGHZ1Jx
>>145 やはりそうですか、ありがとうございました。
テキストエディタなんか一見対象ファイルを編集してるようだが 実際は作業ファイルを別に作成したりしてるわけで保存時に そのファイルを移動したりしてる。 元のファイルはその前に削除したりバックアック名にリネームしたりしてて。
バッチファイルでコンピュータ名を変更したいのですが可能でしょうか? OSはWindows XP Proです。
>>149 [このソフトのパス]wisteria <設定ファイル> <画像ファイル...>
例:
c:\resizer\wisteria.exe "c:\resizer\custom.ini" "c:\a.jpg" "c:\b.jpg" "c:\c.jpg"
Helpくらい嫁。
>>150 すいません
その通り記述して作ったんですがショートカットをSendToに入れて使えないんです
嫁じゃなく読めだった
注意 実行ファイル(及びショートカット)ではなく、起動したウインドウへ D&D してください って書いてあるじゃん
>>153 いえそれがバッチファイルでのバックグラウンド動作ができるらしいんですが…
すいませんバッチファイルのショートカットをSendToに入れると実行できました ViXからのSendTo内バッチファイル実行が不可能なようですお騒がせしましたすいません
Win95なら別だが、ショートカットだけでbatいらないんじゃね?
>>156 ショートカットだと
>>153 の方が言っておられますように
ウィンドウへD&Dが必要なんです
バッチファイルを使用するとそのD&Dの手間が省けるので楽です
>>157 なぜできないのか理解できないので実際に試してみたが、普通にできたぞ。
ViXは知らんが。
>>158 エクスプローラーの送るメニューからは可能なようです
ViXのバグか何かだと思いますお手数おかけしてすいません
160 :
名無し~3.EXE :2006/09/06(水) 20:21:28 ID:37Qi347M
161 :
名無し~3.EXE :2006/09/06(水) 20:22:10 ID:37Qi347M
↑誤爆です
>160 誤爆なのか。確かにスレ違いだが 完全に外してるワケでもない微妙な誤爆だなw 例えば解析したいファイルの名前が「aaaaaaa」で その結果を「bbbbbbbb」に保存したいなら コマンドプロンプト開いて mecab aaaaaaaa -o bbbbbbbb って打ってエンター、な。
>>157 作者です(w
ショートカットでいけますよ.
ショートカットのプロパティのリンク先をこんな感じにします.
"D:\release\resizer\wisteria.exe" "D:\release\resizer\pattern01.ini"
作者は来るなよバカ
(・∀・)カエレ!!!(・∀・)カエレ!!!(・∀・)カエレ!!!
>>163 起動するだけで終わり
その後D&Dしないといけない
XP にて、bat ファイルを使って、環境変数をシステムに通知する
方法ってありますでしょうか。
たとえば、
reg add HKEY_CURRENT_USER\Environment /v ENVNAME /d ENVVALUE
で環境変数に値を追加した後に、この変更をOS再起動なしに有効にしたい
場合、どのようにしたらよいでしょうか。
ここを読むと、
http://support.microsoft.com/kb/104011/ja?spid=1131&sid=global SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM) "Environment", SMTO_ABORTIFHUNG,
5000, &dwReturnValue);
でできるようなのですが、なるべく余分なプログラムなしでやりたい
ので、できれば、DOSコマンド、無理ならWSHあたりでどうにかする
方法をごぞんじないでしょうか?
rundll32 でできたらいいね
169 :
名無し~3.EXE :2006/09/09(土) 11:47:46 ID:C5Wo58dx
170 :
169 :2006/09/09(土) 12:06:00 ID:C5Wo58dx
[タスク]の[詳細設定] メニューの [AT サービスのアカウント]
172 :
名無し~3.EXE :2006/09/09(土) 13:50:11 ID:C5Wo58dx
>>171 レスありがとうございます!
タスクとはどこから開けますか?
173 :
172 :2006/09/09(土) 14:00:51 ID:C5Wo58dx
control
175 :
167 :2006/09/09(土) 16:38:46 ID:b6RM+FdO
>168 ためしに、 rundll32 user32.dll,SendMessageA 65535 26 0 0 とやってみましたが反映させませんでした。rundll32 では呼び出せないのかな。 うーん、なんとかならんですかねえ。
>>175 「Windows XP Service Pack 2 サポート ツール」や「Windows 2000 Resource Kit」などから
setx.exeを拾ってくれば?
177 :
名無し~3.EXE :2006/09/09(土) 17:50:25 ID:QgusI8od
98SEのDOSプロンプトで、あるプログラム(.exe)を実行する際、画面スクロール が出来ないため見づらく困っています。 全体を表示させるにはどうしたらいいでしょうか? 尚、XP-Proも持っていますが、このDOSで実行すると、プログラムが閉ループ に入るため使っていません。
NYADOSとかck (for Win9x)ではだめかな 使ったこと無いけど
179 :
名無し~3.EXE :2006/09/09(土) 20:48:35 ID:C5Wo58dx
コマンドプロンプトのバッチファイルで、a.exeとb.exeの間に5秒余裕を入れたいです。 以下のようにsleep コマンドだと思うのですがうまくいきません。 どなたかアドバイスお願いいたします。 start "" /MAX "C:\自動起動\a.exe" sleep 5 start "" "C:\自動起動\b.exe
181 :
180 :2006/09/09(土) 21:04:03 ID:lO4MfV+7
a.exeが完了してから5秒待つわけでなければ 「/WAIT オプションが必要」は撤回します。
183 :
名無し~3.EXE :2006/09/09(土) 21:32:44 ID:C5Wo58dx
作成したバッチファイルをクリックして実行すると間に5秒入るのですが、 タスクから自動実行すると実行は時刻どおりにしますが 5秒の間隔は無視されてしまいます。 しかもa.exeは非アクティブになります。 何か間違っていることがあればご指摘お願いします。 バッチファイル start "" /MAX /WAIT C:\a.exe cscript //b sleep.js 5 start "" /WAIT "C:\b.exe
184 :
名無し~3.EXE :2006/09/09(土) 21:36:39 ID:m9zXbjkI
これはどお? ↓ timeout /t 5
185 :
177 :2006/09/09(土) 21:44:15 ID:Ya9BvK8X
186 :
183 :2006/09/09(土) 21:46:09 ID:C5Wo58dx
>>184 一段目の下に入れてみましたが、同じでした・・・
バッチでなくてJScriptにして cscript //b runAandB.js で実行してみるとか。 // runAandB.js var WshShell = new ActiveXObject("WScript.Shell"); WshShell.Run("C:\\a.exe", 3, true); // 3: ウィンドウをアクティブにし最大化 // true: プログラムの実行が終了するまでスクリプトを待機させる WScript.Sleep(5000); WshShell.Run("C:\\b.exe");
190 :
名無し~3.EXE :2006/09/14(木) 07:47:45 ID:l5s6sQsr
&&を使って2つのファイルを実行させたいのですが、"CommandA && CommandB" の通りやると "C:\Program Files\test\test.vbs && C:\Program Files\test\test2.vbs" となってエラーが出てしまいます。 初歩の初歩とは思いますが、こうしたコマンド中にスペースがある場合のコマ ンド連結の方法を教えてください。すいませんが、お願いします。
>>190 × "CommandA && CommandB"
○ "CommandA" && "CommandB"
192 :
名無し~3.EXE :2006/09/14(木) 08:40:57 ID:l5s6sQsr
>>191 ありがとうございます。すいません、実はこのコマンドをATコマンドを使って
スケジューラーに登録したいのです。それで
ATコマンド cmd /c "CommandA" && "CommandB"
とやるとCommandAはスケジューラーに登録されるのですが、CommandBは
ATコマンド実行時に同時に実行されてしまうのです。
二度手間になってしまって申し訳ありませんが、もし"CommandA" && "Com
mandB"をスケジューラーに登録できる方法をご存知でしたらご教授ください。
193 :
192 :2006/09/14(木) 11:08:58 ID:l5s6sQsr
すいません、自己解決しました。 cmd /c atコマンド cmd /c "CommandA" && "CommandB" と/cスイッチを2重に掛けてしまったのが悪かったようで atコマンド cmd /c "CommandA" && "CommandB" とすることできちんとスケジューラーに登録されました。
コントロールパネル > 地域と言語のオプション > 詳細設定 > Unicode 対応でないプログラムの言語 を英語(米国)に一発変換するコマンドを教えてください。賢い人お願い。
ローカルネットワークで使うファイル共有機器を使っているのですが 恐らく破損が原因で一部のファイルが削除できなくなってしまいました。 UNCを使ってChkdskをかけようとすると、できませんでした。 その外部機器は共有専用の物でそれ自体にログインすることはできません。 操作元のPCはWindowsXPです。 何か良いファイルの削除方法はありませんか?
フォーマットぐらいできるんじゃね?
アフォウ
chkdskもformatもローカルのドライブしかやってくれないよ。
3年半前の誰かに「ありがとう」。
----------------------------------------------------------
初心者必読!最低限知っておくべきDOSコマンド 2
http://pc5.2ch.net/test/read.cgi/win/1013833995/660 660 名前:名無し~3.EXE[sage] 投稿日:03/04/02 20:56 ID:MJorWg4J
>>658 shift というコマンドがある。
@echo off
:loop
if '%1'=='' goto end
attrib %1 /d /s -h -s
attrib %1 /d /s +h +s
shift
goto loop
:end
---------------------------------------------------------
これを応用させてもらって
@echo off
:loop
if '%1'=='' goto end
C:\Soft\ffmpeg\ffmpeg -i %1 -ab 128 "%~dp1%~n1.mp3"
shift
goto loop
:end
201 :
名無し~3.EXE :2006/09/21(木) 09:41:25 ID:iuEaw+TT
a&b.exe っていうのがあって(そういう危険なファイル名をつけるのが問題なんだが、それは諦めるとして) これをVBScirptから起動して、その標準エラー出力を捕獲したいんですが Set objShell = WScript.CreateObject("WScript.Shell") scmd = "cmd /c a&b.exe 2> out.txt" WScript.echo scmd objShell.Run scmd とすると、cmd.exeの機能として、 a&bの部分を a , b.exe と分解してしまいます。 リダイレクトしなければ scmd="a&b.exe" で済むのですが。 cmd.exeに、&を特殊文字じゃなく、ファイル名の一部だと認識させるにはどうすればいいでしょうか?
scmd = "cmd /c a^&b.exe 2> out.txt"
203 :
名無し~3.EXE :2006/09/21(木) 12:17:14 ID:ZaRXWuea
204 :
名無し~3.EXE :2006/09/21(木) 17:26:59 ID:v01n1OiK
cmd と関係ないじゃん HEAD /saitama/saitama.html HTTP/1.0 Host: hogehoge.com
WEB上にあるファイルと、ローカルにあるファイルのMD5とかを参照比較して、違ってたら何かメッセージ出したり、起動したりDLしたりって事、出来ませんか?
「コマンドライン」ってほとんどのWindowsアプリを起動できるから 「出来ません」とは答えられないよね。
ダウンロードする前にmd5の計算が出来ればね。
ascii文字列の比較をしたいです。UNIXの "comm"コマンドのような ものを探しているのですが、compやfcではいまひとつです。
>>212 お〜、ありがとうございます。ついでにsortとuniqももらってやりたいこと
ができましたー
wmeのinputsourceのところをbatファイルで書き換えて 自動エンコード開始をしたいのですが書き換えコマンド教えてください。 最初はチョコアで書き換えてbat起動させて自動エンコード開始させようと思ったのですが チョコアでwmeのファイルを書き換えることができないのを知ってbatで書き換えて自動起動をしようと考えています。
xcopy C:\甲 D:\乙\甲 /d/e/i/q/h/r/y これを一度実行して、甲の中の丙.txtを削除。再度xcopy実行。D:\乙\甲の中に丙.txt が残ってる。 丙.txtは削除して欲しいんだが、xcopyだけで解決するにはどうすればいい?できればrdは使いたくないな。
自分で読んでも、わかりにくい文になった。すまそ。 送り側で削除されたファイルを、受け側に残したくないっていう意味です。 さらに、受け側の容量がデカイので、rd xcopy でやると時間が掛かりすぎて困るっていう意味です。
そういうのはもうそういった同期ソフトを使うべきでは
xcopyじゃできません。 robocopyなら/PURGEスイッチ使えば尾k
一瞬/PUGERAスイッチに見えた
同期ならFileFileCopyを使えばいい
それか
>>218
漏れも昔はファイルファイルコピーと空目してたからあまり大きなことは言えないが ファイアファイルコピーだぞ
ファイルファイルコピー吹いたwwwwwwwwww
本当だ!wwww 紹介元にFileFileCopyってあったからそのまま鵜呑みにしてたよ。 2年くらいずっとそうだと思って疑わなかった。 そいじゃFileFileCopyって類似ソフト作っちゃおうかな。 RDとXCOPYだけのどうしようもないヤツ。
224 :
名無し~3.EXE :2006/10/05(木) 21:36:35 ID:WbWfkADc
以下のようなバッチファイルを作ったのですが、 思ったような結果になりません。 やりたいことはバッチファイルを置いたディレクトリの配下に 「CVS」というディレクトリがあったら消すということをしたいのですが。 どこが間違ってるでしょうか? @echo off cd %CD% for /r /d %%i in (*) do ( if "%%~ni" == "CVS" ( rd %%i /q/s ) ) pause
自己解決しました。 @echo off cd %CD% for /r /d %%i in (*) do ( if "%%~ni" == "CVS" ( rd "%%i" /q/s ) ) pause
echo onして見てみれば分かる。 ちなみにやりたいことって @rmdir /s /q %~dp0CVS でいいんじゃね?
227 :
名無し~3.EXE :2006/10/09(月) 14:13:20 ID:1VStL+z8
コマンドラインからZIP圧縮は可能なのでしょうか? できれば圧縮率も指定できるといいのですが
cd c:/ じゃね?
>>227 コマンドライン型の圧縮率指定可能な圧縮ツール使えば可能。
因みにコマンドラインツールを使いたくないとかいう情報後出しは却下。
ツールが見つからなければ、ソフ板のありますかスレへどうぞ。
230 :
名無し~3.EXE :2006/10/09(月) 18:04:20 ID:HzNhAxQB
fsutil hardlinkで、ファイルのハードリンクを作成できるようですが、 あるファイルについて、ハードリンクがいくつ張られているのか 知る方法はありますか?
ntfs utils
すいません、ものすごく既出な質問だと思うのですが、 プログラムA実行完了後、プログラムBを実行する場合、 programA.exe && programB.exe でいいんですか?それとも何か良い方法があるんでしょうか?
>>233 programA && programB
programAが正常に終了した場合のみprogramBを実行する
programA & programB
programAが実行された後、programBを実行する
無理に一行に書く必要もなかろう programA & programB は programA programB と同意 あと結果に応じての処理なら programA && programB が programA if not errorlevel 1 programB と同意 まあ君の分かりやすいように書いとけば? なお結果が異常な場合には、programA || programB| 実行するために start /wait programA って書くこともできる。
237 :
名無し~3.EXE :2006/10/11(水) 14:56:10 ID:IOmcdCd9
バッチ処理を続けると勝手に終わっちゃうよ(ノД`) なんで?バッチの中からcallで沢山ある他のバッチを次々に読み込んでいくんだけど 構文や処理内容にエラーがないことは半年かけて確認したよ。 1次バッチ→call2次バッチ→call3次バッチ(複数) →call2次バッチ→call3次バッチ(複数) こんな感じで次々にバッチ処理をするんだ。2次バッチは100個ほどで、3次はそれぞれ15個 バッチって処理限界あるの? 仕事場のPCでは最後まで走るのに自宅のPCとか他部署のPCでは途中で処理をやめちゃうよ OS/WinXpPro Version2002 SP1 CPU/PenD920 RAM2.0GB HDD/300GB MB/Intel D945GNT こんな環境です。
BATに間違いないなら、メモリーリークとかあるのかもね。 一応環境変数のワークサイズはXPの場合8192バイトだったかな。(2000だと2048バイト) あとはsetlocalとかcmdとかで操作してみるとか。
バッチの内容に問題あるんじゃね? エラーが出ると、エラーが出た瞬間に窓閉じるからな。 だから見た目には途中で勝手に終わったように見える
>2次バッチは100個ほどで、3次はそれぞれ15個 1500個も同時にプロセス動かすのって・・・すげー嫌な感じ。 漏れは絶対やりたくない。
特定のファイルの属性を隠しファイルにしたいんですがどのようなコマンドを書けばいいですか? よろしくお願いします
attrib
>>242 すいません今思い出してできました本当にすみません
ついでなのですが特定のファイルが他のプロセスに使用されている場合
そのプロセスがそのファイル使用していない状態にしてそのファイルを削除するようなコマンドはどうすればいいでしょうか
よろしくお願いします
>>243 標準コマンドには無いから、そういう事が出来るコマンドラインツールを探すか作るかして利用する。
ファイルからオープンしてるプロセスを特定する方法ってあるんか? Win32APIでも構わんので知ってたら教えてくれ。
>>244 やはりファイルをUnlocker等のソフトに飛ばしてその後に削除するコマンドを使うしかないのですね
ありがとうございました試行錯誤してみます
>>245 逆。
ファイルからオープンしてるプロセスを特定するんじゃなくて
既存プロセス群が掴んでるファイル群の中から、対象に一致する物を探す。
つーか、検索ってのは普通そういうものだし。
これ以上の話は板違いなので、APIスレなり使用言語スレなりでどうぞ。
>236 > if not errorlevel 1 programB errorlevel はゼロか否かで判定する方が良くない? っていうかソフトによって微妙に違うとは思うんだけど。
>>248 if の昔ながらの書式をもう一度確認した方が良いぞ。
if errorlevel 1 で 1以上の場合だ。
>249 あらら…確かにhelpにも書いてあるわ。 俺普段 %errorlevel% しか使わんから気付かんかった。スマソ
すいません。 ファイル名を指定して実行で、 cmd /k cd e:\temp としても cd せずに、無指定と同じc:\dqnment〜のまま窓が出ます。 出てきた窓で e: とすると e:\temp に直接移動します。 カレント指定で起動するにはどうすればいいのでしょうか。
cd /?
>251 ちゃんと cd コマンドの詳細を見よう。
254 :
名無し~3.EXE :2006/10/14(土) 14:24:13 ID:y7UvFN4Z
たとえば サーバー:192.168.0.254 クライアント1:192.168.0.2 クライアント2:192.168.0.3 というアドレスのPCがあるとき クライアントがどれか1台でも起動していれば = 何もしない すべてのクライアントがシャットダウンしたら = サーバーもシャットダウンする というのを作りたいのですが linuxでシェルスクリプトなら ping 192.168.0.2 -c 4 if [ $? = 0 ] then onoff=10 fi ping 192.168.0.3 -c 4 if [ $? = 0 ] then onoff=10 fi if [ $onoff = 10 ] then echo "PC ON" else echo "PC OFF" halt -p fi で、出来るのですがDOSのバッチファイルの場合 PING 192.168.0.2 の戻り値ってどう取得すればいいのでしょうか?
if /?
PING 192.168.0.2 IF ERRORLEVEL 1 ECHO つながってませんよ。 IF ERRORLEVEL 0 ECHO つながってますね。 ↑ 2行目と3行目を入れ替えてはいけない点に注意。
257 :
251 :2006/10/14(土) 17:32:10 ID:T/OFuaaU
>251-252 ありがとうございました。うまくいきました。
258 :
名無し~3.EXE :2006/10/14(土) 21:31:15 ID:y7UvFN4Z
>>256 PING 192.168.1.7
IF ERRORLEVEL 1 SET DT=10
IF ERRORLEVEL 0 SET DT=0
PING 192.168.1.5
IF ERRORLEVEL 1 SET DT=10
IF ERRORLEVEL 0 SET DT=0
PING 192.168.1.6
IF ERRORLEVEL 1 SET DT=10
IF ERRORLEVEL 0 SET DT=0
IF DT=10 THEN notepad.exe
ELSE
cmd.exe
みたいにやってみてるんですが
うまくいきません。
259 :
256 :2006/10/14(土) 22:07:32 ID:pw30TYg5
>258 最後の3行はIF文の書き方がマズい。俺なら以下のようにする。 (Win95/98/Meの場合はCMD.EXEの代わりにCOMMAND.COM) IF "%DT%"=="10" NOTEPAD.EXE IF NOT "%DT%"=="10" CMD.EXE /C コマンドライン
260 :
256 :2006/10/14(土) 22:09:24 ID:pw30TYg5
ごめん。訂正。 IF "%DT%"=="10" NOTEPAD.EXE IF "%DT%"=="0" CMD.EXE /C コマンドライン
261 :
256 :2006/10/14(土) 22:16:05 ID:pw30TYg5
NOTEPAD.EXEが終了するまでバッチファイルを終わらせたくない場合は、さらに以下のようにする。 IF "%DT%"=="10" START /W NOTEPAD.EXE IF "%DT%"=="0" CMD.EXE /C コマンドライン
262 :
名無し~3.EXE :2006/10/14(土) 23:11:28 ID:y7UvFN4Z
>>261 PING 192.168.1.7
IF ERRORLEVEL 1 SET DT=10
IF ERRORLEVEL 0 SET DT=0
PING 192.168.1.5
IF ERRORLEVEL 1 SET DT=10
IF ERRORLEVEL 0 SET DT=0
PING 192.168.1.6
IF ERRORLEVEL 1 SET DT=10
IF ERRORLEVEL 0 SET DT=0
IF "%DT%"=="10" START /W NOTEPAD.EXE
IF "%DT%"=="0" CMD.EXE /C コマンドライン
ですが、すべてのPINGが通らない状態
(つまりクライアントがすべて終了している状態)でも
IF "%DT%"=="0" CMD.EXE /C コマンドライン
のほうが動いてしまいます。
>>259 > (Win95/98/Meの場合はCMD.EXEの代わりにCOMMAND.COM)
%COMSPEC% /C
runasコマンドで ノートパッドを別ユーザーとして起動したいのですが 下記のようにするとユーザ(hogehoge)のパスワードが求められます。 runas /user:hogehoge notepad 引数か何かでパスワードは指定できないのでしょうか?
265 :
256 :2006/10/15(日) 00:14:00 ID:bYSqBt4L
>>263 そういや環境変数COMSPECの事をすっかり忘れてた。フォローthanks.
>>262 SET DT=0
PING 192.168.1.7 >NUL
IF ERRORLEVEL 1 SET DT=10
PING 192.168.1.5 >NUL
IF ERRORLEVEL 1 SET DT=10
IF "%DT%"=="10" START /W NOTEPAD.EXE
IF "%DT%"=="0" %COMSPEC% /C コマンドライン
または
PING 192.168.1.7 >NUL
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 SET DT=10
IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 SET DT=0
IF "%DT%"=="10" START /W NOTEPAD.EXE
IF "%DT%"=="0" %COMSPEC% /C コマンドライン
PING 192.168.1.5 >NUL
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 SET DT=10
IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 SET DT=0
IF "%DT%"=="10" START /W NOTEPAD.EXE
IF "%DT%"=="0" %COMSPEC% /C コマンドライン
これでどうかな?一応、両方とも試してみてよ。
266 :
名無し~3.EXE :2006/10/15(日) 00:58:26 ID:Blrgi1Gy
>>265 たびたびありがとうございます
両方実行してみましたが
CMD(コンソール?)が開きますが
たとえば
SET DT=0
PING 192.168.1.7 >NUL
IF ERRORLEVEL 1 SET DT=10
PING 192.168.1.5 >NUL
IF ERRORLEVEL 1 SET DT=10
IF "%DT%"=="10" START /W NOTEPAD.EXE
IF "%DT%"=="0" %COMSPEC% /C コマンドライン
の方だと
C:\>SET DT=0
C:\>PING 192.168.1.7 1>NUL
C:\>IF ERRORLEVEL 1 SET DT=10
C:\>PING 192.168.1.5 1>NUL
この後CMDが消えるという結果です。
まず、OSは何かを明らかにすべきじゃない? win9xの場合は不明。(各コマンドの結果は殆どERRORLEVELに反映されないので) win2000の場合、pingでエラーの場合、ERRORLEVEL=1となるが 相手が居ない場合(Request timed out)はERRORLEVEL=0となる。 で、win2000の場合 -------------------------- @echo off set dt=0 ping PC1 | find "100%% loss" if errorlevel 1 (set dt=10&goto :alived) ping PC2 | find "100%% loss" if errorlevel 1 (set dt=10&goto alived) if %dt%==0 echo ****すべてのマシンが応答しませんでした*** :alived -------------------------- ping -n 1 PC1の方が結果は早いが、完全には応答しない場合も考えられるので 4回試行して全部Request timed out(100% loss)を捉まえるものとしている。
268 :
名無し~3.EXE :2006/10/15(日) 01:07:05 ID:Blrgi1Gy
266の続き PING 192.168.1.7 >NUL IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 SET DT=10 IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 SET DT=0 IF "%DT%"=="10" START /W NOTEPAD.EXE IF "%DT%"=="0" %COMSPEC% /C コマンドライン PING 192.168.1.5 >NUL IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 SET DT=10 IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 SET DT=0 IF "%DT%"=="10" START /W NOTEPAD.EXE IF "%DT%"=="0" %COMSPEC% /C コマンドライン の結果は C:\>PING 192.168.1.7 1>NUL C:\>IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 SET DT=10 C:\>IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 SET DT=0 C:\>IF "10 " == "10" START /W NOTEPAD.EXE C:\>IF "10 " == "0" C:\WINDOWS\system32\cmd.exe /C shutdown -s C:\>PING 192.168.1.5 1>NUL この後CMDが消えるという結果です。 よろしくお願いします。
269 :
名無し~3.EXE :2006/10/15(日) 01:09:11 ID:Blrgi1Gy
>>267 そうですね、うっかりしていました。
すべてWindows2000Proです。
270 :
名無し~3.EXE :2006/10/15(日) 01:25:58 ID:Blrgi1Gy
>>267 win2000の場合
--------------------------
@echo off
set dt=0
ping PC1 | find "100%% loss"
if errorlevel 1 (set dt=10&goto :alived)
ping PC2 | find "100%% loss"
if errorlevel 1 (set dt=10&goto :alived)
if %dt%==0 echo ****すべてのマシンが応答しませんでした***
:alived
で実行できました!
255,256,259-261,263,265,267
ありがとうございました!
271 :
256 :2006/10/15(日) 02:08:15 ID:bYSqBt4L
なるほどなぁ・・・俺は自宅でWinXP、職場でWin2000とWinNT4.0を使ってるが、
"Request timed out"の場合は3つともERRORLEVEL=1と思い込んでたよ。
それと今まで肝心な
>>254 の目的をすっかり失念していた。
なんだか色々混同して勘違いしてたよ。かえって混乱させちまったようで、ごめんな。
>>270 pingで端末名指定ミスしたら、常にalivedになっちゃうのでチェックした方が良いかも。
あとサーバーなら接続端末の状態や数をチェックするコマンドがあったんじゃない?
273 :
名無し~3.EXE :2006/10/15(日) 17:49:13 ID:Blrgi1Gy
>>271 いいえ、そんな
いろいろ勉強になりました。
ありがとうございました。
>>272 御助言いただきありがとうございました。
質問です。 ショートカット(.lnk)を作るコマンドはありますか?
>>199 亀レスですまんが,ありがとう
同じようなことしようと思って苦労してた
>>245 XP Proなら
c:\windows\system32\openfiles.exe
なければ、oh.exeやhandle.exeを入手。
特定のEXEファイルに複数のファイルを一つずつ投げたいんですがどう書けばいいですか? ループとかそのあたりを使えばいいのは大体わかるのですが…
投げるっていうのは、DDEのこと?SendMessageみたいなもの?それともその他?
exeをパラメタを変えて何度も起動するだけでいいなら
>>283
285 :
名無し~3.EXE :2006/10/19(木) 11:18:07 ID:xPYMe9IZ
素のWindowsだけで指定ファイルのパス名をコピーすることって出来ますか? 別にコマンドライン使わなくてもいいんですが。
>>285 出来るよ。WSHを使うのが定番。
普通に引数でパスを取って、IEの機能を使ってクリップボードに格納する。
腐るほどサンプルが転がってるから、あとは自分で拾ってこい。
んーと、それは素じゃない。どんなファイルもつくらずに、 Windows標準のみのファイルやアプリで実現できませんか?
>>287 WSHは大概Winなら入ってると思うがWinの何を使ってるの
ファイルを作らないなら、 「ファイル名を指定して実行」にファイルをドロップして、そこからコピー。 コマンドプロンプトにドロップしても出来るけど。 ファイルを作るなら、 START IExplore.exe about: というバッチファイルか、 フルパス\IExplore.exe about: というショートカットを作って、ファイルをドロップして、そこからコピー。
>>287 出来るよ。
コマンドプロンプト開いて対象ファイルを窓にD&Dすると、パスが表示されるので
それを範囲選択してコピー。
先に言っておくが、面倒だとか言うなよ。自分でわざわざ面倒になるような条件出してるんだから。
因みに、「素のWindows」と言った場合は、一般的に外部ソフトを入れない事を差し
ファイルを一切作らないことは差さないので覚えておくように。
>>288 .vbs、.js、.wsfなどのファイルを作成するのが嫌なんだと思われ。どうしてなのかは知らないが。
>>282 FORのほかに、
リソースキットのforfiles.exe
や
SFUのfind.exe
も。
292 :
名無し~3.EXE :2006/10/19(木) 14:49:09 ID:xPYMe9IZ
例えば、フォルダ右クリックにプロンプトを開くっていうのは、 レジストリをいじるだけで可能で こういう感じで機能を実現できればなって思ったんですが、 簡単にやろうとすると難しいみたいですね。
>
ttp://pc8.2ch.net/test/read.cgi/tech/1148485555/41 >41 :デフォルトの名無しさん :2006/09/26(火) 21:00:10
> 実行中にcmdの窓を最小化させる方法はないですか?
Set Word=CreateObject("Word.Application")
Name=WScript.Arguments.Item(0)
If Word.Tasks.Exists(Name) Then
Set Task=Word.Tasks.Item(Name)
Task.WindowState=2
End If
Word.Quit
If IsEmpty(Task) Then WScript.Echo Name&"is not found !"
というVBSファイルを作って、
TITLE hogehoge
hoge.VBS hogehoge
コンソールログをうまく取る方法はないもんでしょうか。 DOSのconcopy.com unixのscript みたいな。 cmd.exe 2>&1 | tee.exe file は入力が取れない。 more | cmd.exe 2>&1 | tee.exe file も、もうひとつ。
懐かしのシラネーヨ.batだな。 ^Cとか^Zとかに対応できないのが玉に瑕
>>100 亀れす。
こういうのは、SFUなどのfind.exeが得意なのでは。
find.exe folderB -t -comp folderA -rm
とかで。
297 :
net time :2006/10/19(木) 22:08:33 ID:DylRciLf
コマンドに"net time"時刻同期のコマンドがあるのですが、1度コマンドを実行すると10秒ほど経たないと次の"net time"コマンドが飛ばないようなのですが、すぐに2回目のコマンドを飛ばすことはできないのでしょうか? ご教授願います。
298 :
296 :2006/10/19(木) 22:21:02 ID:W81ZluKJ
済みません。 本家のfindでサポートしてないシンタクスでした。 便利だったんですけど。。。
>>292 んーと、それは素じゃない。どんなファイルもいじらずに、
Windows標準のみのレジストリやアプリで
フォルダ右クリックにプロンプトを開くっていうのは、
実現できませんか?
レジストリもいじらないで
機能を実現できればなって思ったんですが、
簡単にやろうとすると難しいみたいですね。
なんていう考え方もありますわな。
>>300 矛盾しすぎだな…簡単に〜というのも曖昧な表現過ぎて…やっぱいいや
ちなみにVistaの少なくともRC1ではShift+右クリックでコマンドプロンプトを開く メニューが表示されてたけど最近のビルドだとなくなってるような。
>>301 もともとのコメントが矛盾してるのを逆説的に示してるだけでしょ
>>304 無理な注文言うなってことだろ?
そんなことも分からんの?
正確には、無理な注文にマジレスするだけ無駄、ってことか。
まさに、バカにマジレスするのは疲れる...ってのが分かったよ。
>>300 「マジレスするトンマ野朗」に俺もなってしまった。
310 :
300 :2006/10/20(金) 22:55:44 ID:xavmQ34J
コメントを差し控えさせて頂きます。(常套句)
素のWindowsが好きなのは、人それぞれの勝手ですが、 それならそれで、素のWindowsに入ってるヘルプでも見て、 その範囲で使ってればよいものを、 素のWindowsにない情報をネットに求めれば、 得られる回答が素のウィンドウでないのは当たり前だろ。 という寓話です。
ID:ZW0sFp6Nよ トンチンカンなこと言ったのを指摘されて恥ずかしかったからといって、そうどくれるなよ、な。
技術的な話をしてもよろしかったでしょうか?
禍転じて福となす?怪我の功名?なんだかよく分りませんが、
VBScriptやJScriptの敷居がそんなに高い?のなら、
それに、このスレッドはコマンドラインのスレッドだし、
このスレッドらしい?VBScriptやJScriptを使わない方法はないものか?
と考えてみました。
素のWindows 2003 Serverには、CLIP.EXEが入っています。
Windows XPなどは、残念ながら、有償のリソースキットを入れるしかなさそうです。
バッチファイルで、やる方法。
Clipboard as Name.CMD
@ECHO %* | CLIP.EXE
レジストリとダミーファイルで、やる方法。
Clipboard as Name.NameOnClipboard
拡張子.NameOnClipboardに関連付け
open動詞にCMD.EXE /C,ECHO %* | CLIP.EXE
WSHのドロップハンドラを指定。
ファイルを作ったりするので、
>>285 さんの要件には合いませんが、
一般の、ファイルを作ってもいいから、なんとかしたい、というニーズには、
合うと思います。
そう謂えば、Power ToysのSend to Clipboard as Nameも
ダミーファイルClipboard as Name.NameOnClipboardを作ってましたね。
Command Prompt from Hereと違って、レジストリだけじゃ無理みたいです。
コマンドプロンプトでFOR /F "delims=にタブを入れたいが、 タブが補完キーに解釈されて、入力できない場合は、一時的に、補完を無効にすればよい。 cmd /f:off FOR /F "delims=タブ exit
316 :
名無し~3.EXE :2006/10/22(日) 23:28:41 ID:wssoUMQ0
コマンドプロンプトで解釈される文字列上で、Tabを別文字で指定するこは無理だと思う。 そういう意味合いの質問だよね? 単にTabの部分を別文字に置換するのならテキストエディタとかで置換してやればいいけど。 一旦環境変数にTabを代入してそれを使うことなら可能かもしれない。(試してないけど) set tab= for /f "delims=%tab%" %%I 又は for /f "delims=!tab!" %%I (遅延環境変数を使わないとダメな場合も結構あるかも)
318 :
316 :2006/10/23(月) 00:00:57 ID:wssoUMQ0
>>317 さん
なるほど。。
環境変数でTabをセットしてあげれば確かに別文字にできますね。
まだ試してないですけど。
それで試してみます。ありがとうございました。
質問よろしいでしょうか。 例えばEドライブの直下にwavというフォルダがあり、その中にartist1、artist2、…、artistn(nは任意の数)というフォルダ群があり、 それぞれのフォルダの中にalbum1、album2、…、albumn(nは任意の数)というフォルダ群があり、それらのフォルダの中にそれぞれtrack1.wav、track2.wav、…、trackn.wav(nは任意の数)というファイル群があったとします。 これらのwavファイル全てをlameにかけてエンコードし、そのファイルをEドライブ直下のmp3というフォルダの中にwavフォルダと同じフォルダ構造で出力したいんです。 (例:E:\wav\artist1\album1\track1.wavはE:\mp3\artist1\album1\track1.mp3として出力したい) これをいちいち LAME "E:\wav\artist1\album1\track1.wav" "E:\mp3\artist1\album1\track1.mp3" cls LAME "E:\wav\artist1\album1\track2.wav" "E:\mp3\artist1\album1\track2.mp3" ………(中略)……… LAME "E:\wav\artistn\albumn\trackn-1.wav" "E:\mp3\artistn\albumn\trackn-1.mp3" cls LAME "E:\wav\artistn\albumn\trackn.wav" "E:\mp3\artistn\albumn\trackn.mp3" cls exit とやっていたのでは記述量が膨大で大変です。 for文などを使って上手くループ処理に出来ないですかね? お力を貸してください、お願いします。
> for文などを使って上手くループ処理に出来ないですかね? 出来ますよ。
>>320 本当ですか!具体的にはどのようにすればよいのでしょうか。
>>316 >FOR /F 〜にて、DELIMSにTABを指定する際に、
>見た目のスペースを別の文字に置き換えることって可能でしょうか?
>例えば "DELIMS=[TAB]" を "DELIMS=\t" のようにするなど。
テレパスではないので、質問に素直に答えると、
SET hoge=FOR /F "DELIMS=[TAB]" 〜
SET %hoge:[TAB]=\t%
ECHO %hoge%
もし、これが求めているものと異なる場合は、質問を変えたほうがよいと思う。
ファイル名に時間を含めるために set DATESTR1=%time:~0,2%%time:~3,2% みたいな感じで時間を取得してそれをリネームに使ってるんですが、 これだと10〜24時までしかうまく動きません。 0〜9時台だと取得がずれてしまってリネームに失敗するんですが、何かうまい方法あるでしょうか?
>323 バッチファイル内では以下のように記述すると良い。 (WindowsNT/2000/XPにて可。恐らくWindowsServer2003やWindowsVistaでもOKだと思うが未確認) FOR /F "eol=; tokens=1,2 delims=: " %%i IN ('TIME/T') DO @SET TIMESTR=%%i%%j FOR /F "eol=; tokens=1,2,3 delims=/ " %%i IN ('DATE/T') DO @SET DATESTR=%%i%%j%%k
>>324 XPで無事できました!
ありがとうございます
このスレで出る質問は大抵for文で解決してますけど、ほんと何でもできるんですね……
FOR /F "delims=" %%0 IN ('MORE') DO ( ECHO %%0 ECHO %%0>&2 ) でtee.cmdが出来るかも、と思ったら、 FOR /F IN ('コマンド')は出力を一旦どこかに溜め込んでるみたいですね。残念。
FOR /F %%0 IN ("〜") で、トークンの数を調べようと思ったら、どうすりゃいいでしょう? 不定個数のトークンの処理ってむずかしいような。 "tokens=1*"で1個ずつ取り出して残りを再帰呼び出しするのでしょうか。
for /? を見る限りでは、eolを活用すりゃ良い気がする。 区切り文字が複数ある場合、更に一ひねり必要だけど。
FOR /Fのeol=はline separatorでなく、start of commentなのよ
%%*とかshiftforとかあれば楽かも。
ちょっと話脱線するけど、慣れちゃって疑問感じないけど冷静に考えると、 アルファベット順に自動で変数割り当てるって、やっぱ変な仕様だよなぁ。 そのせいで↓みたいな変な制約もあるわけだし。 > %i は for 文で明示的に宣言され、%j と %k は tokens= オプションで暗黙的に > 宣言されています。tokens= 行を使って 26 個までのトークンを指定できますが、 > 文字 'z' または 'Z' よりも高い変数を宣言することはできません。FOR 変数名は > 単一の文字で、大文字と小文字を区別し、グローバルなものであり、一度にアクティ > ブにできるのは合計 52 個までです。
と文句いいつつ試してみたらちゃんと動いたのでちょっと嬉しかった。 C:\>type hoge.txt 001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016,017,018,019,020, 021,022,023,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,040, 041,042,043,044,045,046,047,048,049,050,051,052,053,054,055,056,057,058,059,060, 061,062,063,064,065,066,067,068,069,070,071,072,073,074,075,076,077,078,079,080, 081,082,083,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100 C:\>for /f "tokens=1-25* delims=," %a in (hoge.txt) do for /f "tokens=1-25* deli ms=," %A in ('echo %z') do echo %Z C:\>for /F "tokens=1-25* delims=," %A in ('echo 026,027,028,029,030,031,032,033, 034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053, 054,055,056,057,058,059,060,061,062,063,064,065,066,067,068,069,070,071,072,073, 074,075,076,077,078,079,080,081,082,083,084,085,086,087,088,089,090,091,092,093, 094,095,096,097,098,099,100') do echo %Z C:\>echo 051,052,053,054,055,056,057,058,059,060,061,062,063,064,065,066,067,068 ,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,084,085,086,087,088 ,089,090,091,092,093,094,095,096,097,098,099,100 051,052,053,054,055,056,057,058,059,060,061,062,063,064,065,066,067,068,069,070, 071,072,073,074,075,076,077,078,079,080,081,082,083,084,085,086,087,088,089,090, 091,092,093,094,095,096,097,098,099,100 C:\>
333 :
327 :2006/10/26(木) 22:32:23 ID:/s+J/qsz
>>331 なので、私は数字の0,1,2,...を使うことを勝手に推奨しています。
%0から始めると1-31 %Oまで使えます。途中%:とかも。
試してみたら「%31」だと「%3」と「1」になっちゃうんだけど、どうやるの?
call でサブルーチン呼んでshiftすりゃいいべ
>>335 tokens=1-31*で%0から%Oまで。
32番目以降のトークンは取れない仕様みたいです。 set n=0 :loop set /a n=n+1 set x=0 for /f "delims=, tokens=%n%" %%1 in (hoge.txt) do ( echo %%1 set x=1 ) if %x%==1 goto loop echo %n%
不定個数のトークンを処理する方法 type hoge.txt>line.txt set n=0 :loop set /a n=n+1 set x=0 for /f "delims=, tokens=1*" %%1 in (line.txt) do ( echo;%%1 echo;%%2>line.txt set x=1 ) if %x%==1 goto loop echo %n%
>>336 callは、delims=空白タブ=;,の扱いになるので、delims=,などのときに使えない。
XPでは.exeのショートカットにドロップしても引数が消えませんが、 .vbsのショートカットでは消えます。 ところが、lnkfileのドロップハンドラをwshのものに変えると、 .vbsのショートカットでも消えなくなります。 なので、2000や98などでも、lnkfileのドロップハンドラをwshのものに変えると、 ショートカットにドロップしても引数が消えなくなるかも知れません。
タブ文字の入力方法 for /f "delims=" %0 in ('type con') do set tab=%0 (タブ)(改行) ^Z echo a%tab%b
343 :
名無し~3.EXE :2006/11/02(木) 17:49:18 ID:sjRZNhMU
test
344 :
名無し~3.EXE :2006/11/02(木) 18:12:49 ID:YlCRHYMe
whoami
345 :
名無し~3.EXE :2006/11/02(木) 18:47:47 ID:J4pr3aX8
サーバー:192.168.0.254 クライアント1:192.168.0.2 クライアント2:192.168.0.3 というアドレスのPCがあるとき クライアントがどれか1台でも起動していれば = 何もしない すべてのクライアントがシャットダウンしたら = サーバーもシャットダウンする ということでこちらで以下のやり方を教えていただきました。 @echo off set dt=0 ping 192.168.0.2 | find "100%% loss" if errorlevel 1 (set dt=10&goto :alived) ping 192.168.0.3 | find "100%% loss" if errorlevel 1 (set dt=10&goto :alived) if %dt%==0 C:\backup.bat :alived これを、どれか1台でもpingに反応していれば 繰り返すにはどう書けばいいのでしょうか? ご指導よろしくお願いします。
goto使っててどうして分からないのか不思議だ? もっとも手直しが少ない方法は、 :alivedラベルを@echo offとset dt=0の間に移動する。 っていうか環境変数dtは要るのか? 無駄に設定してるだけに見える。
そうでもないか。
環境変数dtに関するset命令とif命令は俺も全て不要だと思う。
349 :
名無し~3.EXE :2006/11/04(土) 12:31:17 ID:Rj1Lj+SZ
困ったことが起きました
諸先輩方のお知恵をお貸しください
Windowsの復元操作をしてフォダ名が書き換えられてしまったのです
WEBページをローカル環境に保存して見ていたものが
すべて「フォルダ名→フォルダ名(2)」の形になりました
http://kasamatu.o0o0.jp/pochi/src/hajime4938.jpg.html pass:2ch
フォルダ名(2)を取得してフォルダ名に変更する(もどす)スクリプトをお願いします
1)OSはWindowsXPHESP2
2)復元したあと復元ポイントを放棄したので「再復元」「復元の取り消し」は出来ない
3)書き換えられたフォルダはすべて「フォルダ名→フォルダ名(2)」最後に(2)がついた形、(2)はすべて半角
4)WEB保存用フォルダは一つだけ。階層がたくさんあって全部で数百以上あるので
手作業は困難
5)どシロートなのでコマンドプロンプトの知識は無い
作ってもらったのを使うことは出来る程度のレベル
よろしくお願いします<(_ _)>
書き忘れましたが「ファイル名」はそのままです フォルダ名だけです<(_ _)>
>>349 @echo off
setlocal enableextensions enabledelayedexpansion
for /r %1 %%i in (.) do (
cd /d %%i
for /f "usebackq delims=" %%j in (`dir /ad /b *^(2^)`) do (
set fn=%%j
ren !fn! !fn:~0,-3!
)
)
REM --- ここまで
↑をメモ帳にコピペして「hoge.cmd」と名前を付けて
WEB保存用フォルダの一番上の階層に保存した後
エクスプローラから「hoge.cmd」をダブルクリック。
別に何も作らなくてもFlexibleRenamerとかのリネームツールで フォルダのみを対象に「(2)」→「」の置換をすれば良いだけだけどね。 正規表現すら必要ないし、サブフォルダ内も全て一発でリネームできる。
>>351-352 ありがとうございます
やってみたら「みつかりません」が多数出るのでどうなったかと思いましたが
実際に見たら書き換えられていたようです感謝<(_ _)>
354 :
名無し~3.EXE :2006/11/04(土) 23:02:49 ID:USOpz/32
バッチファイルでは無理
358 :
354 :2006/11/04(土) 23:41:33 ID:USOpz/32
皆様、ありがとうございます。 『「ENTERキー」を叩く』という動作自体をbatファイルの中に書き込む ことは不可能でしょうか? もしこれが不可能だとすると、他にどんな方法が考えられますか? お願いします。
>>358 JavaScript/Bookmarklet
URLに " " は要らんよ
試してないけど、こんなのでどう? MSHTA.EXE vbscript:Execute("CreateObject(""WScript.Shell"").SendKeys ""{ENTER}"":close:")
どうしてもbatでEnterを打たせたかったら
なにかフリーソフトを用意して、それをbatから呼び出すとか
普通に
>>356-357 みたく直接開けばいい話だと思うが
364 :
354 :2006/11/05(日) 01:13:52 ID:RCi+n/90
すみません、お騒がせしました。 WSHを使えばすむ話でした。 Set WshShell=Wscript.CreateObject("Wscript.Shell") WshShell.Run"IEXPLORE.EXE" WScript.Sleep(4000) WshShell.SendKeys("{ENTER}")
366 :
名無し~3.EXE :2006/11/05(日) 15:38:54 ID:rje+y4ta
質問させてください win2kprosp4で 実験の過程で C:\WINNT\system32\GroupPolicy\Machine\Scripts\Shutdown に 無限ループするように作ったバッチファイルを置いて実行させてみるのですが 10分?(正確に測っていない)ぐらいするとシャットダウンされてしまいます。 これは、何かタイムアウト処理が働いているからでしょうか? どうすればシャットダウンさせなくできますか?
367 :
名無し~3.EXE :2006/11/05(日) 18:03:57 ID:ft5S0/Lo
質問です。 DVD−ROM(F:\)から中に入ってるファイル名を取得そのファイル名から D:\〜にある同一ファイル名でヒットするものをを削除する こんな感じのバッチファイルを作りたいんですがどう書けば良いのでしょうか? FOR /R F:\ %%F IN (*.) DO DEL %%F PAUSE これを実行するとF:\が間違ってると言われます・・・
>367 DEL C:\HOGEHOGE.log DEL C:\HOGEHOGE2.log FOR /F "eol=; tokens=* delims=/ " %%i IN ('DIR/O:N/A/B F:\*') DO @DIR/B/S D:\"%%i">>C:\HOGEHOGE.log FOR /F "eol=; tokens=* delims=/ " %%i IN ('TYPE C:\HOGEHOGE.log') DO @ECHO %%i>>C:\HOGEHOGE2.log FC/B C:\HOGEHOGE.log C:\HOGEHOGE2.log ↑ 上記のバッチファイルを実行して、最後に「相違点は検出されませんでした」と表示されるかどうかと C:\HOGEHOGE2.logの内容を確かめてみてよ。ひょっとしたら削除にも応用できるかも。
369 :
名無し~3.EXE :2006/11/05(日) 23:12:56 ID:ft5S0/Lo
>>368 D:\>DEL C:\HOGEHOGE.log
D:\>DEL C:\HOGEHOGE2.log
C:\HOGEHOGE2.log が見つかりませんでした。
D:>FOR /F "eol=; tokens=* delims=/ " %i IN ('DIR/O:N/A
/B F:\*') DO @DIR/B/S D:\"%i" 1>>C:\HOGEHOGE.log
ファイルが見つかりません
ファイルが見つかりません
ファイルが見つかりません
ファイルが見つかりません
ファイルが見つかりません
ファイルが見つかりません
ファイルが見つかりません
D:\>FOR /F "eol=; tokens=* delims=/ " %i IN ('TYPE C:\H
OGEHOGE.log') DO @ECHO %i 1>>C:\HOGEHOGE2.log
D:>FC/B C:\HOGEHOGE.log C:\HOGEHOGE2.log
ファイル C:\HOGEHOGE.log と C:\HOGEHOGE2.LOG を比較しています
FC: C:\HOGEHOGE2.LOG を開けません。このファイルまたはフォルダは存在しません
こんな感じでした。
hogehoge2.logには何も書かれていませんでした
370 :
368 :2006/11/05(日) 23:25:25 ID:gaAwMg4f
>369 画面上に表示されたメッセージは、FCコマンドの結果だけ俺のWinXPで試してみた時と違うな。 hogehoge.logのほうの内容はどうだった?あと、あんたのWindowsはXP?2000?
371 :
名無し~3.EXE :2006/11/05(日) 23:47:43 ID:ft5S0/Lo
>>370 自分はWinXPです。
hogehoge.logはファイル自体存在してなくて
hogehoge.logはbatファイル起動後生成されるが中身は空です
372 :
366 :2006/11/05(日) 23:47:56 ID:NoIo79Hl
実験機のIPは192.168.1.254で C:\WINNT\system32\GroupPolicy\Machine\Scripts\Shutdown に置いたバッチファイルは :reset ping 192.168.1.2 | find "100%% loss" if errorlevel 1 (set dt=10&goto :alived) ping 192.168.1.3 | find "100%% loss" if errorlevel 1 (set dt=10&goto :reset) if %dt%==0 shutdown -p :alived という内容です。 どちらか一方でもPCが起動していれば (事前に2台のPCのPINGが正常に返ってくることは確認しています) [スタート]→[シャットダウン]→[電源を切る] [シャットダウンのスクリプトを実行しています]というメッセージが続くはずなのですが 約10分でシャットダウンしてしまいます。
373 :
名無し~3.EXE :2006/11/05(日) 23:48:44 ID:ft5S0/Lo
× hogehoge.logはbatファイル起動後生成されるが中身は空です ○ hogehoge2.logはbatファイル起動後生成されるが中身は空です
374 :
368 :2006/11/06(月) 00:29:31 ID:WGTzoRqP
>>371 むぅ、俺と同じXPでhogehoge.log自体が存在しない結果に終わったのか。
実は俺の場合、DVD-ROMドライブの代わりにUSBメモリ(ファイルシステムの種類はFAT)をEドライブに
割り当てていて、Dドライブの代わりにCドライブ内で同一ファイル名を探させる設定にして試したんだ。
それにより、
E:\2CH-EX.txt
C:\My Documents\2CH-EX.txt
C:\My Documents\TEMP\2CH-EX.txt
もしも上記のように"2CH-EX.txt"ファイルがEドライブに1つ、Cドライブに2つ存在するとしたら
C:\HOGEHOGE.log と C:\HOGEHOGE2.log には、
C:\My Documents\2CH-EX.txt
C:\My Documents\TEMP\2CH-EX.txt
この2行が書き出される結果に終わるはず。(実際、それに準拠する結果だった)
そういうのを
>>367 へ応用できるんじゃないかと思ったんだけどな・・・どうなってるんだろう?
>>366 バッチの中身関係なくてグループポリシーの設定だよ。
詳しくはスレ違いなのでどっか他で調べてね。
376 :
名無し~3.EXE :2006/11/06(月) 00:52:18 ID:eYDcpk0u
>>374 すいません。ドライブ名が違ったみたいです。
Fドライブの中身はDドライブには存在しないからこの結果で、
対象をGにしたらhogehogeとhogehoge2には同じファイル名の
テキストが出来ました。
377 :
368 :2006/11/06(月) 01:48:07 ID:WGTzoRqP
>>376 ならば後は
>>368 のバッチファイル4行目を以下のように変更すれば
>>367 が解決すると思う。
FOR /F "eol=; tokens=* delims=/ " %%i IN ('TYPE C:\HOGEHOGE.log') DO @ECHO %%i>>C:\HOGEHOGE2.log
↓
FOR /F "eol=; tokens=* delims=/ " %%i IN ('TYPE C:\HOGEHOGE.log') DO @DEL "%%i"
ちなみに
>>368 のバッチファイル3行目で D:\"%%i" の代わりに D:\%%i と記述した場合、WinXPでは
ファイル名に含まれる特殊文字次第でファイルを取りこぼしてしまう事があるから注意。
("D:\%%i"はOK。単にファイル名に空白が含まれるかどうかさえ気をつければ良いという問題ではない)
このあたりの仕様はWinXPとWin2000とWinNT4.0でも各々微妙に異なるから、
他の種類のWindowsでも使い回したい場合は事前に充分テストすべきだろう。
378 :
名無し~3.EXE :2006/11/06(月) 11:15:28 ID:QBOemFrs
>>367 FindExistsRm.CMD 比較元ディレクトリ 比較先ディレクトリ
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%0 IN (%1) DO (
FOR /R %1 %%1 IN (*) DO (
SET x=%%~f1
SET x=!x:%%~f0=%2!
FOR %%2 IN ("!x!") DO (
echo DEL "%%~f1"
)
)
)
>>100 FindCompRm.CMD 比較元ディレクトリ 比較先ディレクトリ
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%0 IN (%1) DO (
FOR /R %1 %%1 IN (*) DO (
SET x=%%~f1
SET x=!x:%%~f0=%2!
FOR %%2 IN ("!x!") DO IF "%%~t1"=="%%~t2" IF "%%~z1"=="%%~z2" (
BINDIFF "%%~f1" "!x!"
IF !ERRORLEVEL!==1 (
echo DEL "%%~f1"
)
)
)
)
すいません RDコマンドで、あるフォルダを一括削除したいんですが もの凄い深い階層にあるファイルが原因なのか 「XXXXXXが見つかりません」と、システムがメッセージ出してしまって フォルダの削除ができません。 こういった長〜いファイル名をコマンドプロンプトで扱う場合 どういう手がありますか?
標準コマンドで片付ける場合はsubstで見た目のパス短くしてやれば桶
subst って、そのフォルダ直下にごみ箱できちゃうよね
>>381 半角スペース込みだったら"でくくらんとそうなるな。
387 :
名無し~3.EXE :2006/11/12(日) 15:00:04 ID:Utpk1ks7
コマンドプロンプトでファイルの存在確認してから削除する方法おしえて
if exist
389 :
387 :2006/11/12(日) 15:41:59 ID:Utpk1ks7
橋本内科医院市立 芦別病院北海道立本岐診療所永野医院新潟手の外科研究所たかの耳鼻咽喉科高月整形外科内山クリニック長谷川内科南輪内診療所
よく、 IF "%1"=="" 〜 のように書きますが、%1に"が奇数個含まれていると、エラーになります。 %1に何が含まれていてもエラーにならない方法はないものでしょうか?
set HOGE=%1 set HOGE=%HOGE:"=% IF "%HOGE%"=="" 〜
IF @%1==@ 〜
>>392 call :sub "<"
コマンドの構文が誤っています。
>>393 call :sub """
コマンドの構文が誤っています。
setlocal set aaa= set aaa=%1 if ERRORLEVEL 1 〜
>391 素直にWSH(WindowsScriptingHost)を利用するほうが無難だと思う。
>>392 +
>>393 +α
これでよさそうです。
call :sub "<"
call :sub """
call :sub
goto :eof
:sub
set HOGE=@%1
set HOGE="%HOGE:"=""%"
ECHO %HOGE%
IF %HOGE%=="@" ECHO
callって他のバッチファイルだけじゃなくてラベルを呼べたのか
呼べるってラベルじゃねぇよ!
関係ねぇよ。種類なんかよぉ!
目的がわからんので使えないかも知れないけど if "%~1"=="" とかを普通は使う。
起動時に実行するコマンドラインで ”ファイルのパス” と しているのですが確認ダイアログが出てしまいます。 確認ダイアログを無しに実行できるコマンドラインオプションを教えて下さい。
確認ダイアログ?
____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ <確認ダイアログが出てしまいます | |r┬-| | \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // < 確認ダイアログだっておwwwwwwwwwwwwwww | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / バ | | l||l 从人 l||l l||l 从人 l||l バ ン ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
とりあえず質問文の意味がよくわからないので詳しく書き直したほうがいいんじゃないかと思うよ
406 :
名無し~3.EXE :2006/11/15(水) 13:07:26 ID:F2T3mu71
誘導された為、こちらで質問させて頂きます。 バッチファイルを使用して同じLANネットワークに接続されている 別のPCでDOSコマンドを実行したいと思っています。 どのようなコマンドで実現出来ますでしょうか? OSはwindows2000になります。ご教授ください<(_ _)>
telnet rcmd rconsole 標準ならtelnetだけど、使いやすいのはrcmdかな。あと、 at \\対象マシン 時刻 コマンド でも可能。
409 :
名無し~3.EXE :2006/11/16(木) 08:42:22 ID:cHsBiSJl
Windows PowerShell の正式版が出ますたね
PowerShell スレってどこかに立ってる?
立ってないよ
>>410 スレ立てるなら、スレタイ候補。
〔CMD〕 Windows PowerShell Vol.1 〔Script〕
>414 じゃあ俺も対抗してスレタイ案。 【Monad】Windows PowerShell【MSH】
コマンドラインからsleepする方法が一つ増えたな powershell -command sleep 1 ……激しく使わない気がするが
中身.NETだからなぁ 家のPCじゃ、起動させるまでにsleepしそうだ
試してないけど、実際にはpowershellの起動時間がsleep時間にプラスされるんだろうな。
うちのPCだとpowershellの実行が0.6秒くらいかかった (WindowsXP,Athlon64 3400+) @echo off setlocal set starttime=%time% echo 00:00:00 | time > nul powershell -command sleep 0 echo 実行時間は %time% です echo %starttime% | time > nul w32tm /resync
0.6秒は既にpowershellがキャッシュに乗ってるときで、 powershellの初回起動時は6秒かかった やっぱり激しく役にたたない
>>424 0.6秒はいくらなんでも早すぎだろ、と思っちゃった。
うちなんか12,13秒掛かるんですが。
初回でも1〜2秒だけど、.NetFrameworkなプログラム常用してるからかな。
CLIをネイティブに事前にコンパイル済みしたのをキャッシュしておくことによって 時間短縮するソフトが確かあったよ。
ngen のフロントエンドなだけだよ
sleepのためにPowerShellを入れる気はしない。 他に便利なことはないの?
.NET Frameworkのライブラリの機能は全部コマンドラインやスクリプトから呼べるらしい
いままでだって JScript .NET でできたわけだし
(今のところ)ノートン先生に怒られない
.NETなんかじゃなくて、ちゃんとしたCシェルとかbashとかをMSから提供して欲しかったね。
>>434 つ Services for UNIX
つ Subsystem for UNIX-based Applications
jscg(compile&go)よりは速いんでしょうか?
9x系で、n秒後に再起動ってやりたいんだけど、どうやったらいい?
ping
>>441 すまん、それを使えばいいのは分かるが、もう少し詳しく頼む。
スレ内検索くらいすればいいのに
あ、検索するのすっかり忘れてたorz どもですたノシ
WInMeでは再起動を自動でやるにはツールを使わないとダメ? それともWSHでできる? WSHでできるなら方法を教えてもらえると助かる。 スレ違いだったらスマソ。
ログファイルの自動整理をたくらんでいるのですが、質問です。 決められたファイルのファイルサイズを調べ、 10キロバイト以下では処理1を、 20キロバイト以下では処理2を、 30キロバイト以下では処理3を、 というIF文を作りたいのですが、 具体的にどう記述すればよいのかわかりません。 どのように書けばできますか? 外部ツールを使ってもかまいません。
NT系だったら for /f %%A in ('dir 〜') do if 〜 call 〜 とかでどうだべ?
for /? %%~zI
450 :
446 :2006/11/24(金) 18:06:07 ID:2KLVL2Zf
>>447 >>448 >>449 レストンクス。OSは2Kです。
for %%F in (".\うんこ.jpg") do if %%~zF GEQ 20000 echo ちんこ
for %%F in (".\うんこ.jpg") do if %%~zF GEQ 10000 echo まんこ else echo あなる
で3とおりイケました。ありがとう!
・・・と思ったが、うんこのファイルサイズが20000以上の場合、
ちんこだけ動かしたいのに、ちんことまんこが両方とも実行されてしまいます。
A<固定値<B という範囲内に限定された条件分岐のうまい方法はありませんか。
if文を2段構えにする方法しか思いつきません。
漏れなら後で自分で読んで悩まないように単純な書き方すると思う。漏れ馬鹿だから。 for %%F in (".\うんこ.jpg") do set FileSize=%%~zF if %FileSize% GEQ 20000 echo ちんこ if %FileSize% LSS 20000 if %FileSize% GEQ 10000 echo まんこ if %FileSize% LSS 10000 echo あなる
おバカ? for ( if A if B if C )
とりあえず うんこのサイズ20000で吹いた
こんなのは? set v=0 for %%F in (".\うんこ.jpg") do set sz=%%~zF if %sz% geq 10000 set v+=10000 if %sz% geq 20000 set v+=10000 if %sz% geq 30000 set v+=10000 goto case%v% :case0 goto :eof :case10000 goto :eof :case20000 goto :eof :case30000 goto :eof
455 :
446 :2006/11/24(金) 18:49:34 ID:6m7E/X5o
>>451 トン。これはわかりやすい!
大馬鹿な俺でも、不等号の方向が頭に即座に浮かぶ。
>>452 うーん・・ごめん。もうついていけない。
ABCが10000,20000,30000だとすると、
どんなコマンドを書けば実現できますか?
>>451 の単純比較法よりも優位な点はなんでしょう?
>>453 ニヤリ。
>>454 なるほど。
すげー、ラベルのgotoの先で変数を使うのか。
これなら各分岐先で、複数のコマンドの羅列群を
複数行に渡ってカンタンに入れられますね。
複数コマンド、複数行ってだけなら普通にif文で使えるけど?
>>452 が理解できなかった人へ
for %%F in (".\うんこ.jpg") do (
if %%~zF geq 20000 (
echo ウンコてんこ盛り
) else if %%~zF geq 10000 (
echo ウンコ並
) else (
echo ちょびっと
)
)
459 :
446 :2006/11/24(金) 20:34:34 ID:6m7E/X5o
>>458 なるほど、カッコで囲えばいいのか。
それにしても、このウンコ講座、まじで役に立ちました。
おかげさまで、うんこ摘み分け もとい、ログファイル選別バッチが
完成しました。みなさん、くだらない質問につきあってくれてありがとう。
俺は、AとかBとか1,2,3,とか甲乙とかのサンプル名詞よりも、
うんこちんこと書いたほうが理解力が早いことが判明。(´゚З゚`) ンモー
しかしこのスレにはかなりのスキルを持った人が常駐しているようですね どんな問題でもポンと的確な答えが返ってくる 2chの片隅にひっそりと存在するささやかなスレですが、すばらしいスレです いつも答えてくれている人に感謝
質問する方もある程度は心得た人だからさ。まともな人に対する答えはどこでもこんなもん。 いつもDQN質問が多数を占めるスレばかり見てるんじゃないのかね。
バッチファイルで計算型GOTO文みたいなことができたのか…
set /a v+=10000 だったね。orz set /a v=%sz%/10000*10 if %v% geq 30 set v=30 goto case%v%KB
へー、 set /a v=sz/1000*10 これでも良いんだ。
doskeyマクロってfor文のin ('コマンド') の部分で使えないのね set hoge="コマンド" set hoge=%hoge:~1,-1% とやっておいて in ('%hoge%') こんな感じ?
466 :
名無し~3.EXE :2006/11/28(火) 12:07:45 ID:MZyNBUPe
コマンドブロンプトすごい!
バッチファイルの中でプログラムを起動する時、それを終了しなくてもプロンプトの方は終了させるようにするにはどうすればいい?
すまん自己解決した、ショートカット使えばいいのね
start /?
>>469 ……なんでコロッと忘れちまってるんだろう俺orz
ありがとう
startとショートカットの違い。 unixで非同期実行の&があるが、ショートカットはその感じ。 コンソールアプリやバッチファイルのショートカットを作って、 hoge.lnk とやると、標準入出力が共有されたまま、非同期実行できますよ。 startはコンソールが別になります。
コンソールからWindowアプリを起こすと、待たないで復帰します。 待つときは、Startを使いますが、他に、 cmd/c hoge.exe とか、 hoge.exe|more などでも待ち合わせできます。 メリットは特にないけど。
へーそこまでは知らなかった、いやstartの存在も忘れていたんだけども。
474 :
名無し~3.EXE :2006/11/28(火) 22:27:25 ID:oG1sWt3Q
バッチファイルからFTP使ったり、結構おもろいよ。 データベースからバッチ実行=>FTPの起動・自動ログイン・処理・ログアウト とか。 MS-DOS時代、waitコマンドラインあったけど コマンドプロンプトでそれらしいのあるんだろうか?
>>435 >つ Services for UNIX
なんて言われても、home editionなので、インストール不可。
SFUには便利そうなコマンドがあるので、一部だけでも抜き出して使いたいのですが、
いい方法はないもんでしょうか。
VirtualPCでPROの環境を作ってインストールするしかないかなぁ。
つ ORCA
>474 ググってもwaitコマンドがどういうのか判らんかったけど pauseコマンドで代用出来たりする?
>>285 >素のWindowsだけで指定ファイルのパス名をコピーすることって出来ますか?
レジストリの変更だけでも出来ますね。
MSHTA.EXE "about:<script>resizeTo(0,0);</script><hta:application id=hta border=none /><script>var s=hta.commandLine;var f=false;
for(var k=0;k<s.length;k++){c=s.charCodeAt(k);if(c==32)if(!f)break;if(c==34)f=!f;}s=s.substr(k+1);clipboardData.setData('text',s);close();</script>" %1
を関連付けで、*に動詞hogeで登録すれば、ファイル右クリックhogeでパス名がコピーされます。
ただし、複数ファイルは、これでは出来ません。
ショートカットのリンク先に
MSHTA.EXE "about:<script>resizeTo(0,0);</script><hta:application id=hta border=none /><script>var s=hta.commandLine;var f=false;for(var k=0;k<s.length;k++)
{c=s.charCodeAt(k);if(c==32)if(!f)break;if(c==34)f=!f;}s=s.substr(k+1);clipboardData.setData('text',s);close();</script>"
を入れて、SendToにこのショートカットを置けば、複数ファイルが送れますが、ファイルを作成することになるので駄目ですね。
フォルダ内のファイルと同じ名前のテキストファイル(0kb)を 作るバッチプログラムが欲しいのですが、 下のようにするとファイル名中に空白等があった場合 そこから先が省略されてしまいます。 暇な人いましたら修正してもらえませんでしょうか if "%~1"=="" goto :eof pushd %1 for /f %%i in ('dir /b %1') do type nul >%%~ni.txt popd
"%%~ni.txt" で良いんじゃないかな?
バッチ内部で組み込む条件で、テキストの抜き出し加工について質問です。
■テキストファイル TEST.TXT の内容(サンプルです。
>>1 より引用)
>DOS由来コマンドだけでなく、Windows バージョンアップのたびに拡充されてきたコマンド、
>wsh(cscript)、cygwin、Resource Kit、Support Tools、その他のフリーソフト等ふくめ
>コマンドラインインタフェースに関するネタならなんでもOK。
■出力したいテキスト TEST2.TXT 内容
>拡充されてきたコマンド、
>wsh(cscript)、cygwin、Resource Kit、Support Tools、その他のフリーソフト等ふくめ
>コマンドラインインタフェースに関するネタ
このときの条件は、テキストファイルから、
指定された開始文字列 「拡充」 からはじまり、
指定された終了文字列 「関するネタ」 までを抜き出す
このように2点間のテキストを抜き出すには、
どのような方法を使えばいいでしょうか。
FINDで、1行丸ごと抜き出すところまではできました。
が、FINDでは該当する文字列が含まれると1行丸ごと引用しますので、
行の途中から文章を引用することができません。
賢い方法、なにかありませんか?よろしくお願いします。
よく分からないけどsedかawkの出番かな?
484 :
480 :2006/11/30(木) 01:02:06 ID:9lgU88/V
>>481 すんません、だめでした。
OSはXP Homeです
>>482 @echo off
echo W=WScript;a=W.Arguments;s=W.StdIn.ReadAll();W.Echo(s.match(a(0)+'(.^|\n)*'+a(1))[0])>%temp%\aaa.js
cscript //nologo %temp%\aaa.js 拡充 関するネタ < 1さん.txt
del %temp%\aaa.js
>>484 これでどう?
for /f "delims=" %%i in ('dir /b %1') do type nul >%%~ni.txt
487 :
480 :2006/11/30(木) 11:08:08 ID:9lgU88/V
バッチなら @if(0)==(0) ECHO OFF CScript.exe //NoLogo //E:JScript "%~f0" <1さん.txt GOTO :EOF @end WScript.Echo(WScript.StdIn.ReadAll().match(/拡充[\s\S]*?関するネタ/)[0]);
コマンドプロンプトなら mshta "javascript:var f=new ActiveXObject('Scripting.FileSystemObject');f.GetStandardStream(1).WriteLine(f.GetStandardStream(0).ReadAll().match(/拡充[\s\S]*?関するネタ/)[0]);close();" <1さん.txt >結果.txt
>>479 本家(Unix)にないMKS Toolkitに
filebox Displays a Windows 2000 Open or Save dialog box.
gres Substitutes for a pattern in a file or stream.
mapimail Sends mail on a Win32 system using the MSMapi32 ActiveX COM object.
など面白そうなコマンドがいっぱい。
バッチだけでやると.CMD 拡充 関するネタ <1さん.txt @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET F=0 FOR /F "delims=] tokens=1*" %%0 IN ('FIND /N /V ""') DO ( SET X=%%1 SET Y= IF DEFINED X SET Y=!X:*%1=! IF NOT "!X!"=="!Y!" ( SET F=1 ECHO:%1!Y! ) SET Y= IF DEFINED X SET Y=!X:*%2=! IF NOT "!X!"=="!Y!" ( SET F=0 CALL :LEN ECHO:!Y! ) IF !F!==2 ECHO:!X! IF !F!==1 SET F=2 ) GOTO :EOF :LEN SET Z=0 :UP IF "!Y:~%Z%!"=="" GOTO :SET SET /A Z+=1 GOTO :UP :SET SET Y=!X:~0,-%Z%!
492 :
482 :2006/12/01(金) 00:02:40 ID:2IMejFpR
>>492 の最初の「皆様、貴重」が「貴様」に見えた寝る
>493 俺は昔同級生に「貴」(タカシ)が居た 年賀状出し辛かった
497 :
490 :2006/12/02(土) 17:19:08 ID:0XNYfzVD
勘違いでした。 MKS ToolkitはSFU2.0に30日DEMO版が入っているだけでした。 なので興味喪失。 ところで、未インストール状態のSFU中のexeを叩いても そんなファイルは見つかりません。と言うのは、 exe形式がPOSIX Subsystem用になってるとか、 そういうことなんでしょうか。ちょっと不思議です。
PowerShellを用いてtxt形式(echo 〜と変数の組み合わせ)のファイルを 連続して作成できるようにps1ファイルを作成し、ファイル作成は動作は正常に行えたのですが 出来上がったファイルの文字コードがUTF-16で次のプログラムに受け渡せなくて困ってます。 echoの時点でSJISにしたり、ファイルをスクリプトから変換できるようなツールがあればお教えください。
>>499 PowerShellからリダイレクトかけた時点でBOM付UTF-16LEに戻されるから
cmd,exeを呼び出して使えってことなんでしょうが PowerShellからcmd.exeを呼び出せるもんなんですか?
つ じゃなくて見 じゃないの
そうそう、SFUにiconvがあった。 iconv -f from_code -t to_code [-s char] [file ...]
Out-Fileで-encoding指定すればいいんじゃね?
>>502 ダメ文字・・の消し方で躓いたので端からあきらめてました。
>>503 .NetFrameworkを使ったスクリプトをWebで見つけて参考に作り上げたのですが
どうせunicode中間ファイルができるなら、
cat $fname[] | Out-File -encoding ASCII -filepath $fpath
とかで簡単にいけそうですね。
ありがとうございます >499、501、502、503
パイプラインで出力する方法を設定できれば楽なのにMSさん。
>>499 によれば、
FIND /V "" < BOM付きUnicodeファイル > シフトJISファイル
とか、
「BOM付きUnicodeを出力するコマンド」|FIND /V "" > シフトJISファイル
とやればよいのでは。
PowerShellを知らないので頓珍漢かも。
XP Home SP2なんですけど ">"とか"|"とか"&&"とか"()"に関してのヘルプってどうやったら出てくるか教えてください。
Homeにあるかどうか知らないけど、Proだと スタート→ヘルプとサポートでコマンド ライン リファレンスを検索 →コマンド シェルの概要、リダイレクト演算子 に書かれている
うちのXP Home では "コマンド ライン リファレンス" では検索に引っかからないので "dir" など回復コンソールにもあるコマンド名で検索して[関連項目]から移動。
hh ntcmds.chm::/redirection.htm 通常は、 hh ntcmds.chm hh ntcmds.chm::/ntcmds.htm
>>507 ,508
見つけられました、ありがと〜でした
こっちだった。 hh ntcmds.chm::/ntcmds_shelloverview.htm
ヘルプとサポートセンタで開くほうがよくない? helpctr.exe /URL ms-its:ntcmds.chm::/ntcmds_o.htm
>>512 PATHが通っていないのでSTARTで。
>>513 512で見れた。すげええええ、こんなことが出来るのか
XPを10年使って初めて見た。
>>514 > XPを10年使って初めて見た。
未来から来られたんでしょうか?
>>514 一度見つけたら右クリック「お気に入りに追加」しておくべし。
hhのほうも、
hh.exe windows.chm
で、「お気に入り」や「検索」「キーワード」タブを表示、
左上隅のアイコンを右クリックして、「URLへ移動」に
ntcmds.chm::/ntcmds_shelloverview.htm
などを入れて表示して、「お気に入り」タブで「追加」しておくべし。
IME辞書をバッチファイルでバックアップしたいのですが xcopy c:\progra~1\common~1\micros~1\ime\imjp9\dicts\imjp81~1.dic d:\ /s/y としても「指定されたファイルが見つかりません」になってしまいます。 どこがおかしいでしょうか?
518 :
517 :2006/12/05(火) 20:27:20 ID:L6haTKq6
事故解決しました。
質問したからには自己解決であっても答えを書いとけよ。 後世の人のために。
単にパスミスだろう。 デフォだと、\Program Filesの下なんかに無くて %USERPROFILE%\Application Data\Microsoft\IMJP8_1\imjp81u.dic だし。
xcopy c:\progra~1\common~1\micros~1\ime\imjp9\dicts\imjp81~1.dic d:\ /s/y ↓ xcopy c:\"program files"\"common files"\"microsoft shared"\ime\imjp9\dicts\imjp81~1.dic d:\ /s/y
522 :
517 :2006/12/06(水) 00:15:08 ID:Wd7oNSvB
途中で書き込んでしまった。 半角スペースが含まれるフォルダ名をダブルクォーテーションで囲まなかったのが 原因でした。
windows.chm, ntcmds.chm などのリンクを表示する毎に、 IMT??.xml 2KB, IMT??.xml 1KB, IMT??.xml 566KB が %TEMP% に増殖するようになった。 MS06-061(924191) の msxml3.dll を旧バージョンにしたら 直ったけど・・・なんだかなぁ
>>521 8.3形式のショートファイル名では""で括る必要なんてなかろう?
それでどうしてエラーになったのか説明になってないよ。
>>524 横レスで悪いが、その短いファイル名を書き間違えた(長いファイル名と異なり環境によって不定だから
いちいち確認し直さないと間違える恐れがある)からエラーになったという事じゃないの?
Windows2000です ホスト名をコマンドで変更できないのでしょうか? 表示はhostnameでできるみたいですが
>>525 情報乙。
クリック2回で1MB強・・・気付かず放置してたら・・
chmの動作も少々不安定で稀にWSHのエラーダイアログを見た。
件のDLLを差し替えてから解消。
>>523
530 :
521 :2006/12/07(木) 14:46:49 ID:tZeJn9bU
>>524 初めてのバッチ処理なんで、何で失敗したのかとか成功したのかが全然わからないです。
たぶんmicros~1がMicrosoft Officeとか別のフォルダを指していたのではないかと思う。 ダブルクォーテーションを使うにしても、全体をまとめて括るのが普通だと思う。 "c:\program files\common files\microsoft shared\ime\imjp9\dicts\imjp81~1.dic"
532 :
521 :2006/12/07(木) 15:36:05 ID:tZeJn9bU
xcopy /m/s/y "c:\documents and settings\ユーザー名\application data\microsoft \imjp8_1\imjp81u.dic" 最終的にこれで落ち着きました。 IMEの場所が変だったのはデフォルト以外の場所で参照していて、 デフォルトフォルダを忘れてしまっていた。 (隠しフォルダ設定になっていたため検索しても引っかからなかった。) 名前の似ているフォルダを見つけて消してしまったのかと思い、そこにIMEを移したからです。
最近、腕が鈍っているあなたに練習課題。 そもさん 一時ファイルを作成せずに、テキストファイルのn行目を削除して上書きするには?
echo n行目d e | edlin テキストファイル
>>534 上乗
知らなんだ。このスレで初出なのでは。
旧式には旧式のやり方があってな
別解の募集は継続しておいて、別の練習課題。 そもさん バッチでsetlocalを使って処理した上で、環境変数hogeに値をセットして返すには? 同様にカレントディレクトリを変更して帰すには?
setlocal 処理 endlocal&set hoge=値 pushd X:\hoge\hoge\hoge 処理 popd
539 :
名無し~3.EXE :2006/12/08(金) 03:18:43 ID:pYxlA4EA
あるファイル以外を全部コピーしたいんですけど、除外するようなコマンドってありますか?
540 :
539 :2006/12/08(金) 03:52:59 ID:pYxlA4EA
541 :
537 :2006/12/08(金) 15:03:28 ID:ZdduNYTr
設問が分りにくかったですね。 setlocal set /p num=加える数を入力してください set /a hoge+=num だとうまく行かない。 setlocal set /p folder=ディレクトリを入力してください cd /d %folder% これもうまく行かない それぞれ直して。という意味です。
コマンドプロンプトのデフォルトのディレクトリ を変える方法を教えてください。 Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\Owner> ↑ これ
543 :
542 :2006/12/08(金) 15:42:55 ID:QCa6jACi
544 :
537 :2006/12/08(金) 15:56:56 ID:ZdduNYTr
設問が分りにくかったですね。 setlocal set /p num=加える数を入力してください set /a hoge+=num だとうまく行かない。 setlocal set /p folder=ディレクトリを入力してください cd /d %folder% これもうまく行かない それぞれ直して。という意味です。
545 :
537 :2006/12/08(金) 16:05:27 ID:ZdduNYTr
>>544 ごめん。みすった。
リダイレクションの練習課題
標準出力をファイル、標準エラーをパイプに。
標準出力をコンソール、標準エラーをパイプに。
標準出力と標準エラーを入れ替える。
バッチの中でコンソールにプロンプト。バッチ使用者がリダイレクトしていてもコンソールに。
set /p hoge=prompt
>>542 そんなこと、言ったって、起こし方によるだろ。
どの起こし方のことを言ってんのさぁ?
>>543 と思ったら書いてあったね。
しかし、そのソフトがコマンドプロンプトをどう呼び出してるかが分らなければ、
どうしようもないんじゃないの。作者に聞けば?
或いは、バイナリエディタで中を覗いて、書き換えるか。
偉い人、バッチの使用例などを暇なときに書き込んでくれませんか?
>>543 名前からするとEMACS擬似みたいだから、バイナリじゃなくて、
呼び出してるマクロソースを変えればいいんじゃないの。
hh ntcmds.chm::/redirection.htm を見ると、 ! file.txt を検索してから、Search.txt にハンドル 1 (STDOUT) とハンドル 2 (STDERR) をリダイレクトするには、次のように入力します。 ! ! findfile file.txt>search.txt 2<&1 なんて書いてあって、えっ嘘、と一瞬思うけど、やってみると動くのよね。 全くもってへぼいヘルプ。わざとだったりして。
>>549 内蔵みたいで、マクロソースが無いんですよね・・・。
諦めてショートカットつくっちゃいましたw
レスありがとうございました。
>>551 もし、呼び出しが「cmd」だけなら、
C:\Documents and Settings\Owner
にcmd.cmd
cmd.exe /k cd フォルダ
を作る。
.exeを忘れると悲惨。
で行けるかも。駄目ならやっぱり、バイナリで書き換え。
553 :
533 :2006/12/09(土) 01:01:47 ID:KVXyeSOl
想定解答、5行目のとき @ECHO OFF FOR /F "delims=] tokens=1*" %%0 IN ('FIND /N /V "" ^<テキストファイル') DO ( IF "%%0"=="[1" TYPE NUL >テキストファイル IF NOT "%%0"=="[5" ECHO %%1>>テキストファイル )
554 :
537 :2006/12/09(土) 01:14:50 ID:KVXyeSOl
>>538 正解です。
これを
>>541 の問題に適用すると、こうなるわけですね。
setlocal
set /p num=加える数を入力してください
endlocal & set /a hoge+=%num%
setlocal
set /p folder=ディレクトリを入力してください
cd /d %folder%
pushd .
endlocal
popd
後半は想定外で、想定解答は、
setlocal
set /p folder=ディレクトリを入力してください
(
endlocal
cd /d %folder%
)
>>552 他からの呼び出しがうまくないですね。
@echo off
if "%1"=="" (
cmd.exe /kcd フォルダ
) else (
cmd.exe %*
)
ローマ字覚えたての中学生みたいな子がいるな。
スレタイ嫁
559 :
名無し~3.EXE :2006/12/10(日) 13:02:38 ID:DlucxiVx
同等のWin32ネイティブアプリ使え
そこをなんとか(´・ω・`)
Vistaからは日本語16bitアプリがサポートされなくなるし、 今の内から移行しておいた方がいいぞ。
・・・・(´・ω・`)アイ LANに繋がってる別の古いマシンを16bit専用にします。
VirtualPC等で仮想マシン上で純粋なDOSかWin9xを動かしたら軽くなるかも
>>563 ここで訊く話ではないのだけれど、あえて質問。
そのDOSと他のマシン(Windowsマシン?)とLANの接続方法は?
幾通りものやり方はあるけど、
>>563 のところでは、どういう接続方法?
>>559 DOSプログラムへのショートカット (pif)を作って
そのプロパティのその他のタブの「ほかのプログラムの優先度」を高いほうにして実行したらどうか。
>>566 これで結構緩和されました。ありがとう!
>>565 ・・・・・(´・ω・`)クロスシリアル
568 :
565 :2006/12/10(日) 22:57:18 ID:xLBP+58r
>>567 回答ありがとうございます。
ク、ク、クロウトシコウ(苦労と試行)じゃないや、クロスシリアル。
わかりました、たしかにケーブルさえ用意出来ればそれがいいかも。
(以前、実際やったことあるけど、とんでもなく転送速度が遅かったけど)
RS-232CコネクタがついているPCはよくありますものね。
569 :
1/2 :2006/12/11(月) 15:32:28 ID:XufxOd7S
コマンドプロンプト上にUTF-8でエンコードされた文字を表示することは可能ですか?
Shift-JISしか表示出来ないと思っていたのですが、SP(an SGML parser :
ttp://www.jclark.com/sp/index.htm )の
nsgmls.exeがutf-8で出力し、文字化けせずに表示されています。僕の勘違いでしょうか?
以下が試した内容です。ファイルにリダイレクトした内容、Perlで取得したコマンドライン出力ともにUTF-8でした。
[コマンド実行前に設定した環境変数]
SET SP_CHARSET_FIXED=1
SET SP_ENCODING=utf-8
[実行したコマンド]
nsgmls test.dtd test.sgm
XPPro sp2
SP 1.3.4
ActivePerl 5.8.8
570 :
2/2 :2006/12/11(月) 15:34:41 ID:XufxOd7S
[test.dtd] UTF-8で保存 <!DOCTYPE test [ <!ENTITYend"終わり"> <!ELEMENTparam - - (#PCDATA) > <!ELEMENTtest - - (param)+ > ]> [test.sgm] UTF-8で保存 <test> <param>あいうえお&end;</param> </test> 長くなってしまいましたが、よろしくお願いします。
>>570 の訂正です。
<!ENTITY
<!ELEMENT
の後にはスペースが入ります。済みませんでした。
type test.sgm は無理でしょ? よく知らんけど、出力先がファイルかconsoleかで区別してんじゃね〜の?
ローマ字覚えたてなもんで、作ってみました。 タイプ.CMD ファイル.txt @if(0)==(0) ECHO OFF CScript.exe //NoLogo //E:JScript "%~f0" %~f1 GOTO :EOF @end var htmlfile=WScript.GetObject(WScript.Arguments.Item(0),'htmlfile'); while(htmlfile.readyState!='complete') WScript.Sleep(100); WScript.Echo(htmlfile.body.innerText);
>>572 ありがとうございます。出力する方法あるのかなぁ。
575 :
名無しさん@Vim%Chalice :2006/12/11(月) 21:11:55 ID:oJSjGerR
>>569 を見て思ったんだけど
簡単にゆうと
xmlparserと呼ぶんだろうか?covert txt.htmlみたいな処理
xml/atomを処理して用はtag抜きしてテキストで人が可読出きるように処
理してくれるコマンドラインツールを持ってた。
perlで処理ってのも(今はそうだけど)あるけど
単体で簡単に処理できた。 javaで出来てた。
http:// 〜で指定、 ローカルから指定
などができてdescriptionを吐いてくれた。
titleやlinkは吐いてくれたかどうだったか忘れたけど
消しちゃったらしく見つからない('A`
類似してるのでご存知の方いたら教えて下さいorz
テキストをHTMLに変換.CMD <テキストファイル >HTMLファイル @if(0)==(0) ECHO OFF CScript.exe //NoLogo //E:JScript "%~f0" GOTO :EOF @end var htmlfile=new ActiveXObject('htmlfile'); htmlfile.write('<html><body></body></html>'); htmlfile.body.innerText=WScript.StdIn.ReadAll(); //WScript.Echo(htmlfile.body.innerHTML); WScript.Echo(htmlfile.documentElement.outerHTML);
HTMLをテキストに変換.CMD <HTMLファイル >テキストファイル @if(0)==(0) ECHO OFF CScript.exe //NoLogo //E:JScript "%~f0" GOTO :EOF @end var htmlfile=new ActiveXObject('htmlfile'); htmlfile.write(WScript.StdIn.ReadAll()); WScript.Echo(htmlfile.body.innerText);
一つだけならテクニック披露ってことでいいけど 幾つも書かれるとさすがにうざい。(しかも大文字) 条件コンパイル文は省略してfoo.jsとでもしてくれ。
>>1 に「WSHもOK」って書いてあるんだから無理やりbatにせんでもいいわな。
>>574 だから
>>573 じゃ駄目なん?
UTF-8、EUC、ISO-2022-JP、Unicode Big Endianは読めるけど。
581 :
名無し~3.EXE :2006/12/15(金) 15:27:11 ID:S/zivTUD
>>580 ありがとうございます。私の為に書いて下さっていたのですね。レスが遅くなって済みませんでした。
私の説明の仕方が紛らわしかったです。UTF-8でエンコードされた文字列データを
シフトJISに変換せずに出力し、正しく(文字化けせずに)表示することが可能なのか知りたかったのです。
例えば、UTF-8で平仮名の'あ'は16進表記で'E3,81,82'という並びになりますよね?
このようなデータをそのまま標準出力に出力すると、データをシフトJISとして解釈して、
コマンドプロンプト上には'縺・'と表示されてしまうと思っていたのですが、
上記nsgmls.exeの出力では'あ'と表示されているようなので不思議に思い質問させていただきました。
そもそも、リダイレクトしたデータがUTF-8でエンコードされた文字列データだとしても、
標準出力に出力された文字列がUTF-8でエンコードされていたとは限らないのでしょうか?
それとも、
>>572 さんが仰っているように内部で出力先を判断することが可能なのでしょうか?
>>573 を試してみました。WSHはよく分からないのですが、シフトJISに変換して出力されていますよね?
僕の知識不足や勘違いでしたらごめんなさい。
>>581 >>573 の末行を以下に変えると、Unicodeで出力します。
new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1,true).Write(htmlfile.body.innerText);
これで、コンソールに出すと、Unicodeがちゃんと表示されます。
でもUTF-8は無理そう。
やり方は知りませんが、コンソールかどうかの判定ができのでは。
>>582 本当だ、表示されました。きっと何かあるんですね。
ありがとうございました。
584 :
名無し~3.EXE :2006/12/16(土) 19:10:41 ID:8R61Kbto
いきなりですみませんが、アドバイスしていただきたいことがあります。 あるバッチファイルを実行したいときに、ファイルアイコンをダブルクリックした場合や、 あらかじめ開いてあるコマンドプロンプトでバッチファイルのフルパスのみを入力した 場合には普通に実行できるのですが、コマンドプロンプトやスタートメニューの 「ファイル名を指定して実行」で"cmd.exe (バッチファイルのフルパス)"と入力しても "cmd.exe"が起動するだけでバッチファイルの中身がまったく実行されません。 (フルパスを""で囲み忘れているということはありません) バッチファイルの内容が"@pause"しかない場合でもうまくいかず、原因がまったく 分からず困っています。どなたか思い当たることなどありましたらレスお願いします。 こちらの環境はWinXP Pro SP2です。管理者権限のユーザでログインしています。
585 :
名無し~3.EXE :2006/12/16(土) 19:20:49 ID:sMjQ//iN
cmd /c "CALL (バッチファイルのフルパス)" では駄目?"
callって必要?
そもそもcmdから呼ばなければいけないのか?
そもそも、なんでcmd/?しないんだ?
589 :
584 :2006/12/16(土) 21:01:04 ID:8R61Kbto
レスありがとうございます。無事できました。callはあってもなくても大丈 夫でした。 /cをつけなければならないのと、/cの引数に直接パスが指定できるのを 知らなかったため悩んでしまいました。お手数おかけしました。
特定の場所にあるファイルを、バッチを呼び出されるたびにFTP先に「移動」したいです。 いきなり移動は出来ないでしょうから、コピーと削除を組み合わせて作りたいと考えています。 フリーソフト「FFFTP」のコマンドラインでアップロード機能を呼び出し、 特定のディレクトリにあるファイルを自動アップロードすることは出来ました。 ところがこの方法では問題があり、転送が成功した・失敗したときの判別が できないため、転送元のファイルを安全に削除することが出来ません。 また、FTP接続が途中で途切れることが多く、接続先に中途半端な ファイルサイズの異常ファイルが出来てしまい、目視で確認しながら削除しています。 このような動作を、MS謹製のFTPコマンドで自動化できないでしょうか。 下記の動作をさせたいのですが、これをコマンドorバッチで行うには どのように記述すればよいでしょうか。 ・ディレクトリAにある全ファイルを、FTP接続先のディレクトリBにすべてコピー ・FTP接続先のBに転送したファイルと、転送元のファイルサイズを比較する ・ファイルサイズを元に、正常に移動できたと判断できるファイルは、ディレクトリAから削除 ・ファイルサイズが異なっている場合は、異常転送ファイルと見なし、再度転送する。 ・全部のファイルを転送したら、バッチを終了。 FTPアドレス C.com アカウント DDD パスワード EEE 転送ファイルの種類:テキスト SSL:なし OSは2Kです。BATでもwshでもかまいません。どうかよろしくお願いします。
サウンドとオーディオデバイスのプロパティ>オーディオ>音の再生 を任意のデバイスに切り替えたいのですがそのコマンドはどう書けばいいのでしょうか? Control.exe Mmsys.cpl,,2 これ以降が分かりません。
592 :
名無し~3.EXE :2006/12/17(日) 18:46:32 ID:ahAVL3DJ
えーといろいろ探しててここに流れ着いたんだが、 おまいらコマンドプロンプトの文字色と背景色何にしてる? MySQLとか叩くので見易さの配色を追求したいのだが、 あっても、背景を明るく、文字を濃い色でっつうヒントしかない。 ヒントください。
color ce
COLOR コマンドは、Windows2000、XPからです。 Win95/98をお使いの方は、例えば「窓の手」などを使えば出来ます。
95/98ではpromptで設定してたなぁ prompt $e[;33;1;40m$p$g
consoleおもすろ
>>consoleおもすろ あれでKDEのkcomsoleとかmacのあれとかscreenばり に使えるなら最高なのにね 残念で泣けてくる なんて重いんだ。cygwinがサクサクじゃないか なぜに.Netのような もっさーで 凶過負荷な処理なんだ ほんとwinのコマンドプロントはあれ 処理がもの凄く重い たまに使うけどね。常用する気になれないよなぁ 素のプロントにもどたよ。 したければcygwin入れるのがいいと思う。 比べてもの凄く軽くて驚愕('A`
なに言いたいのか分かんねーよ。 素のプロントとかコマンドプロントとか何だよ。意味わかんねーから。プロンプトだろ。 要するに『cygwin良いよ』てことだろ?ならそー書けって。無駄多すぎ。95点。
>>598 95点もやるのか?
60点あれば充分じゃん。(大甘だけどな)
> ほんとwinのコマンドプロントはあれ > 処理がもの凄く重い > したければcygwin入れるのがいいと思う。 > 比べてもの凄く軽くて驚愕('A` 矛盾していると思うのは自分だけ?
602 :
599 :2006/12/20(水) 00:04:47 ID:GNDOcEV8
正直なところ(内心評価)、100点満点で、0.60点ってところかな。 一応合格っていうことにすれば、60点(合格基準)っていっただけ。 本当は合格どころじゃないんだけどな。
よく分からんが、.NETとか出てるところから推測すると 常用できない重いコマンドプロンプトってのは少し上で出てた例のアレで それを使うくらいならlinuxの方にしとけってことを言ってるのかな?
PowerShellの話か? あれは確かに初期化で時間食うから使うの止めた
管理者権限でログオンしているかどうか調べるにはどうしたらいい? ローカル・ドメイン両方で使えるやつを頼むよ。
net user net group / net localgroup じゃダメ?
バッチでやるなら、こんな感じ? 検証はしてないが・・・ NET LOCALGROUP ADMINISTRATORS | FIND "%USERNAME%" >NUL IF NOT ERRORLEVEL 1 ( ECHO 管理者権限を持つユーザと認識しました ) ELSE ( NET GROUP ADMINISTRATORS 2>NUL | FIND "%USERNAME%" >NUL IF NOT ERRORLEVEL 1 ( ECHO NTドメイン環境の管理者権限を持つユーザと認識しました ) ELSE ( echo 管理者権限の無いユーザでログオンしています ) )
そのユーザー名が ローカルではAdministratorsに、グローバルではDomain Usersに所属してるとすると (ごく普通のケース) 今そのユーザー名でローカルにログインしてるのか ドメインサーバーにログインしてるのかをまず切り分けなきゃ。
609 :
605 :2006/12/22(金) 20:48:14 ID:XuMQmg9z
何だか難しそう・・・orz 調べれば調べるほど敷居が高く感じる・・・(汗) サンプルがあるといいのだが・・・
コンピュータ名とホスト名の付け方が特殊だと駄目かもしれないけど、 if "%LOGONSERVER%"=="\\%COMPUTERNAME%"で判別可能かも。 もしくはwhoamiコマンドとか。 あと、漏れが昔やったことあるのは、対象のマシンが特定できる環境 だったので、管理共有から中が見れるかどうかで判別したことがある。 >今そのユーザー名でローカルにログインしてるのか >ドメインサーバーにログインしてるのかをまず切り分けなきゃ。 日本語的にすごく違和感感じた。 「ローカルのユーザーでログオンしてるのか ドメインのユーザーでログオンしてるのか」 と書いたほうがいいと思った。
net gruop このコマンドは Windows ドメイン コントローラでのみ使用できます。 ダメじゃん。使えね。
at
>>612 AT...O・・・? ATO? 後、10分でイブが終わるとか?
チラ裏・・・備忘録 Cドライブ直下に今日の日付のフォルダを作成する。 @echo off echo チラ裏にでも書いてろ for /f "tokens=1,2,3* delims=/ " %%i in ('date /t') do (set yyyy=%%i& set mm=%%j& set dd=%%k) for /f "tokens=1,2* delims=:" %%i in ('time /t') do (set hh=%%i& set nn=%%j) md "C:\%yyyy%年%mm%月%dd%日%hh%時%nn%分\" echo>>"C:\%yyyy%年%mm%月%dd%日%hh%時%nn%分\Log.txt"フォルダを作成しました。 pause
>615 MKDIR "C:\%DATE:~-10,4%年%DATE:~-5,2%月%DATE:~-2%日"
MD $$$ FOR %%0 IN ($$$) DO FOR /F "tokens=1-5 delims=/: " %%1 IN ("%%~t0") DO REN $$$ %%1年%%2月%%3日%%4時%%5分
>>615 for /f "tokens=1,2,3* delims=/ " %%i in ('date /t') do (set yyyy=%%i& set mm=%%j& set dd2=%%k)
for /f "tokens=1,2* delims=:" %%i in ('time /t') do (set hh=%%i& set nn=%%j)
for /f "tokens=1,2,3* delims=/ " %%i in ('date /t') do (set yyyy=%%i& set mm=%%j& set dd=%%k)
if not %dd2%==%dd% for /f "tokens=1,2* delims=:" %%i in ('time /t') do (set hh=%%i& set nn=%%j)
>>616 SET DT=%DATE%
MKDIR "C:\%DT:~-10,4%年%DT:~-5,2%月%DT:~-2%日"
621 :
615 :2006/12/29(金) 15:45:58 ID:cLdyRAMk
>>616-620 いろいろコメント頂き感謝してます。・・・が、当方の理解不足のため返事に困ってます。
>>615 は拾ってきたもので、まだ消化不良のネタです。
暫く勉強して、出直します。
質問です。 foo.exe の標準出力をプロンプトウィンドウとテキストファイルの両方に出力したいのですが、どうすればいいでしょうか? ただし、foo.exe は重い処理なので出力されていく様をリアルタイムに確認できるのが条件です。 なので、 foo.exe>log.txt type log.txt ではダメです。どうかお知恵をお貸しください。
適当な tee を拾ってくればいい
624 :
名無し~3.EXE :2007/01/12(金) 01:55:50 ID:fkJWsIgg
最小化?というか、DOS窓を開かないで実行する方法は、ないでしょうか。 start /wait notepad のようにすると、ノートパッドが立ち上がっている間、DOS窓が開き、 タスクバーにも出てしまいます。 バッチファイルじゃなくても可です。 なんとかする方法はないでしょうか?
625 :
名無し~3.EXE :2007/01/12(金) 02:28:53 ID:fkJWsIgg
えっと、ショートカットを作って、最小化で起動すると、ウインドウはでないのですが、 タスクバーに残ってしまいます。
626 :
名無し~3.EXE :2007/01/12(金) 02:40:51 ID:fkJWsIgg
shell = WScript.CreateObject("WScript.Shell"); shell.Run("notepad.exe run.js", 1, true); WScript.Echo("スクリプトを終了します。"); なんか、普通にwshでやった方が早そうですねw
>>624 プロンプトからnotepadを起ち上げて、しかもプロンプトは消したい、ということだろうか?
start notepad
exit
みたいなバッチってことか?
628 :
名無し~3.EXE :2007/01/12(金) 02:51:09 ID:fkJWsIgg
629 :
名無し~3.EXE :2007/01/12(金) 02:52:13 ID:fkJWsIgg
あとついでに質問。 wshを実行ファイル形式にできないでしょうか WSH用コンパイラ+ってのを見つけたのですが、作者のサイトがなくなってました orz ベクターも消えてるし・・・
>>628 cmd /c "notepad.exe"
632 :
名無し~3.EXE :2007/01/12(金) 19:48:57 ID:SSoVDVD9
>>9 たとえばフォルダ内にパッチが幾つもあって
dirでそれらをリストにするかして
それらにコマンドラインをくっつけて一括で実行するにはどうしたらいいの?
種類ごと大雑把だけどこんな感じにリストを吐き出せたけど
dir Q*.exe /b>Qlist.txt
dir Windows2000*.exe /b>Wlist.txt
そっから先わからんちん
echo @echo off > KBlist.bat dir Windows*KB*.exe /b >> KBlist.bat 編集で.exeを.exe -n-z-qにすべて置換 こんなことしか思いつきません・・・
635 :
名無し~3.EXE :2007/01/13(土) 10:03:27 ID:SuZfHdbT
素人ですが教えてください。 あるソフトを起動するbatファイルを作成したのですが、 そのソフトを起動したらbatファイルを勝手に閉じたいのですが コマンドがわかりません。 どなたか教えてください。
637 :
名無し~3.EXE :2007/01/13(土) 12:08:16 ID:SuZfHdbT
635です。 637でうまく行きました。 ありがとう。
638 :
名無し~3.EXE :2007/01/13(土) 23:46:49 ID:BdlKHbf+
詳しい方が多いようなので教えてください。 内容はと言うと、Cドライブに帳票というフォルダがあります。 このフォルダの中には、080101帳票 080102帳票 ・・・・等 毎日作成されるエクセルファイルがたまっています。 そして、そのフォルダの中の一番新しいファイルをAドライブの フロッピーディスクに、帳票という名前に変えてファイルをコピーする BATファイルを作りたいのです。 どうぞ宜しくお願いします。
@echo off for /f %%i in ('dir /o-n /b C:\帳票\*帳票.xls') do ( echo "%%~fi" A:\帳票.xls goto :eof )
echo → copy /y
>>639 ありがとうございます。
@echo off
for /f %%i in ('dir /o-n /b C:\帳票\*帳票.xls') do (
copy /y "%%~fi" A:\帳票.xls
goto :eof
)
>>640 も合わせて ↑ こんな感じなのでしょうか?
試してみたのですが、どうもうまく動きません・・OTL...オバカですんません
そうですか、それは残念。
見捨てないで・・・OTL
@echo off for /f "usebackq" %%i in (`dir /o-n /b "C:\帳票\*帳票.xls"`) do ( copy /y "%%~fi" A:\帳票.xls goto :eof ) :eof でどうだろう
645 :
638 :2007/01/14(日) 01:44:50 ID:DGqWZ2TH
>>644 一瞬コマンドプロンプトの黒い窓が見えるだけで何も起こりません・・・。
私の環境に問題があるのかなぁ・・・・OTL
これからリカバリーディスクぶち込んでみますので、しばらく落ちます
ホント申し訳ないです。すみません。
>>646 >一瞬コマンドプロンプトの黒い窓が見えるだけ
goto :eofの前に一行pauseって入れてみれば。
ってかA:\の中身を確認してみなよ。
fsutil hardlink create 既存のファイル 作成したい新しいファイル で、WindowsXPでもハードリンクが作成できますが、これを 1.既存のファイルの所に指定したディレクトリ以下の全てのファイルを対象とし 2.作成したい新しいファイルを他のディレクトリ内に1.で指定したファイルを全て 同じファイル名でハードリンクを作成したいのですが、どうしたらいいですか? fsutil hardlink create "D:\IE_Temp\Temporary Internet Files\*" "D:\集める" fsutil hardlink create "D:\temp\*" "D:\集める" D:\IE_Temp\Temporary Internet Files\ フォルダの中の全てのファイルを D:\集める\ フォルダの中に同じファイル名でハードリンクを張りたいのです。 D:\temp\ フォルダの中の全てのファイルを D:\集める\ フォルダの中に同じファイル名でハードリンクを張りたいのです。 これを複数のフォルダ登録してbatファイルで処理したいのですが、うまくいきません。 C:\test>fsutil hardlink create "D:\temp\*" "D:\集める" エラー: ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っていま す。 C:\test>fsutil hardlink create "D:\IE_Temp\Temporary Internet Files\*" "D:\集め る" エラー: ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っていま す。 このようになってしまいます。指定の仕方がおかしいんだと思いますが、どうすれば いいのでしょうか? delコマンドとかだと echo Y | del \temp\* とかでOKなのですが・・・
for %i in (D:\TEMP\*) do fsutil hardlink create %i D:\集める\%~ni
>>649 上手くいきませんねぇ・・・
ラストの %~ni
ってなんですか?
for /?
>>651 grepもlessも無いのにコマンドプロンプトのヘルプとか読む気がしないOTL
いや、ごめんね for /? > for.txt してメモ帳で見た。 %~nI - %I をファイル名だけに展開します。 これだけじゃよくわからんよ・・・・
パイプを知っているのにリダイレクトを知らんとな
他OSアレルギーてやつですな 645のその後が気になるがふっとんじゃったんだろか
>>650 BATの中に書くのなら % → %% に。
つーか %~nxi だな。
じゃあbatの中に書くので for %%i in (D:\TEMP\*) do fsutil hardlink create D:\集める\%%~ni %%i って事?
do echo fsutil ・・・ にして実行してみりゃいいじゃん
660 :
645 :2007/01/14(日) 18:16:25 ID:DGqWZ2TH
>>647 645です。
復活に手間取っておりました・・・ノートンノバカ...いや私ですね・・・OTL
アドバイス通りに試してみました。すると、「指定したファイルが
みつかりません」と表示されて、エンターキー連打で終了します。
Aドライブには何も入りません・・・・
いろいろ面倒かけちゃって済みません。 ペコリ
>>660 @echo off
for /f "usebackq" %%i in (`dir /o-n /b "C:\帳票\*帳票.xls"`) do (
copy /y "%%~fdpnxi" A:\帳票.xls
goto :eof
)
:eof
ならどうだろう?(未検証だが)
目当てのフォルダ以外で実行すると失敗するっぽい
原因究明めんどくさいので
>>644 .batをC:\帳票に放り込んでおいて
もう一つ任意のフォルダにバッチファイル作ってcall "
>>644 .bat" で。
663 :
645です :2007/01/14(日) 19:19:05 ID:DGqWZ2TH
>>662 うぉお〜動いたーと思ったのですが、動いたんです確かに。
しかしながら、C:\帳票に入ってる帳票のファイルの数だけ
Aドライブの帳票.xlsを上書きしようとします。一番新しいヤツだけ
コピーできたら完璧なんですが・・・・わがまま言って申し訳ないです。
664 :
名無し~3.EXE :2007/01/14(日) 19:25:59 ID:DGqWZ2TH
うわぁぁ!すみません。
>>644 .batの記述を
見逃していました!! うまく動きました〜!!
完璧です。。うれしいです。。
またなにかお世話になるかも・・・・って少しは勉強します
本当にありがとうございました。。。
>>664 おめでと。
>>644 でも"%%~fi"じゃなくて"C:\帳票\%%i"だとうまく行くから何か悪さしてるかね。
本当にわけがわからなくなってきました。 D:\a以下のファイル及びフォルダをD:\b以下に全コピー、しかしハードリンクでやるので容量は 全く食わない。そういうことをやりたいんですが、、、結局どうしたら? for %i in (D:\a\*) do fsutil hardlink create d:\b\%~nxI %i って事なの?モニュ・・・
サブフォルダが無いなら dir /o-n /b /s C:\帳票\*帳票.xls にすればフルパスになるけど・・・
for %i in (D:\a\*) do fsutil hardlink create d:\b\%~nxi %i これだと1つの階層内のファイルに対してしか出来ないね。 再帰的にその下のフォルダにもかけていきたいんだけど、どうすりゃいいの?モニュ・・・
>>668 こんなんでどう?
もっと簡単にできるかな?
@echo off
setlocal enableextensions enabledelayedexpansion
set SRC=D:\a
set DEST=D:\b
xcopy /t /e /y "%SRC%" "%DEST%"
for /f "delims=" %%I in ('dir /s/b/a-d "%SRC%\*"') do (
set FILE=%%I
set FILE=!FILE:%SRC%=%DEST%!
FSUTIL hardlink create "!FILE!" "%%~I"
)
>>669 い、、、意味がわからんぜよ・・・。
そのスクリプト何してるか全然分からない・・・解説キボンヌ・・・
for /r "%SRC%" %%I in (*) do ( のほうが素直だね。
@echo off : 拡張機能と環境変数の遅延展開を有効に setlocal enableextensions enabledelayedexpansion : フォルダを変数にセット set SRC=D:\a set DEST=D:\b : フォルダ構造だけコピー xcopy /t /e /y "%SRC%" "%DEST%" : サブフォルダも再帰的にfor for /r "%SRC%" %%I in (*) do ( set FILE=%%I : ファイルパスの中のSRCをDESTに置換 set FILE=!FILE:%SRC%=%DEST%! FSUTIL hardlink create "!FILE!" "%%~I" )
>>673 リンクにしたいのはファイルだけでフォルダは普通に作るんでしょ
>>672 ご丁寧にありがとうございます。
Linuxのシェルスクリプトとはだいぶ勝手が違って戸惑っています。
: でコメントにもなるんですね、コピペしても動作します。
変数の中身を参照するにはLinuxだと${SRC}ですが、batファイルだと
"%SRC%"なんですね。
とりあえずこれで、自分が同期したいフォルダに
set SRC=D:\a
set DEST=D:\b
の二行を書き換える事でやりたい事が実現できます。本当にありがとうございます。
しかしソース自体に手を加えるのは正直ちょっと怖かったりもします。
日本語のフォルダ名とか大丈夫かなぁ・・・
なので、もし可能ならで構いませんので、
hardlink.bat SRC DEST
というように引数を2つ与えて目的のフォルダを同期できないでしょうか?
それならソースをいじって書き直す必要がなくなるんですが・・・難しいかな?
DOSのbatがどれほどの事が出来るのか知りませんが、LinuxのCUIよりはるかに
低機能だと聞いたもので・・・
>>674 あーよく読んでなかった、馬鹿は退散しよう
>>673 そのソフトはハードリンクについて調べているときに既に見つけてますが
私がやりたい事は、この作成して頂いたbatファイルをWindowsXP標準の
タスクスケジューラにかけて、3時間に1回実行とか、1日に1回実行とか
そういう風にやりたいんです。これで定期的にバックアップが取れるので。
>>674 その通りです。
>>675 if "%~2"=="" goto :eof
set SRC=%~1
set DEST=%~2
日本語までは知らん。
それとbatからbat呼ぶ時はcallしろよ
それと「 : 」はコメントじゃなくてラベルだ。 コメント書くのは反則技だからちゃんと rem 使った方がいいぞ。 つか、バックアップの意味あるのか?
cp -R -d -l ってやっちゃいたいところだ
> それと「 : 」はコメントじゃなくてラベルだ。 > コメント書くのは反則技だからちゃんと rem 使った方がいいぞ。 えー結構使ってるのに 「 : 」の後に空白入れておけば間違ってジャンプする危険もないし > つか、バックアップの意味あるのか? ハードリンクは同じドライブにしか作れないし実体が壊れたら 「バックアップ」も壊れるしどう考えても意味ありません
>>678 その3行をさっき作って頂いた.batファイルの先頭に記述したら良いという事では
無いのですか?そのファイルを別個.batに保存して、そのファイルからcallで呼び出して
やらないとだめですか?もしそうならファイルが2つになるのは嫌なので
ソースをいじった方が楽になっちゃいますけど、、、1つのファイルで引数ってムリデスカ?
日本語通りました。「んっふっふーw」とか「これはききましたよぅ〜」とか変な日本語の
フォルダ作って実行してみたらきちんといけてますw
Windowsは日本語に強いなぁ・・・
>>679 >つか、バックアップの意味あるのか?
これだけだと意味がないですが、そこはそれ、LinuxのBackupシステムが待ち受けています。
それと連動させれば素晴らしいバックアップシステムが出来上がります。
@echo off
rem 拡張機能と環境変数の遅延展開を有効に
setlocal enableextensions enabledelayedexpansion
rem フォルダを変数にセット
set SRC=D:\a
set DEST=D:\b
rem フォルダ構造だけコピー
xcopy /t /e /y "%SRC%" "%DEST%"
rem サブフォルダも再帰的にfor
for /r "%SRC%" %%I in (*) do (
set FILE=%%I
rem ファイルパスの中のSRCをDESTに置換
set FILE=!FILE:%SRC%=%DEST%!
FSUTIL hardlink create "!FILE!" "%%~I"
)
rem使えってこういうことですかね。
>>680 .batファイルだとこれだけ苦労していますが、確かにLinuxなら
$ cp -Rl /a /b /* -dは要るかな? */
で一発で出来ますね。それをcronで回すだけw。
ヤバイ!本当にLinuxのCUIって素晴らしいんだと今実感した瞬間wwww
DOSのCUIしょぼすwwwww
参考:-dオプションの解説
-d, --no-dereference
シンボリックリンクをコピーする場合、シンボリック リ
ン クが指しているファイルをコピーするのではなく、シ
ンボリックリンクとしてコピーする。また、コピー元 で
の ハードリンクはコピー先でもハードリンクとして保持
される。
>>682 set SRC=D:\a
set DEST=D:\b
の2行を次の3行に痴漢するだけでいいよ
if "%~2"=="" goto :eof
set SRC=%~1
set DEST=%~2
callしるといったのは、たとえば3つコピーしたいなら次のようなbatかけって事。
call 省略するとひとつめしか実行されないからね。
@echo off
call hardlink.bat "D:\aaa" "D:\back\aaa"
call hardlink.bat "D:\bbb" "D:\back\bbb"
call hardlink.bat "D:\ccc" "D:\back\ccc"
つーかCygwinでいいじゃん もはやスレ違いだけど
687 :
名無し~3.EXE :2007/01/15(月) 12:50:47 ID:JZ8tDTCV
コマンドライナーは、cygwin入れるのは必須だと思ってたが・・・
だから標準のコマンドだけでなんとかまかなう技が重宝されるわけで。
もっとも
>>1 をよく見直したら
> wsh(cscript)、cygwin、Resource Kit、Support Tools、その他のフリーソフト等ふくめ
> コマンドラインインタフェースに関するネタならなんでもOK。
スレ違いでもなかったのか
そもそもLinuxなBackupSystemなるものがあるのなら 市販バックアップソフトでも買ってSamba領域へ放り込む けどな。手段と目的が錯綜してるべ。
691 :
名無し~3.EXE :2007/01/21(日) 16:36:33 ID:Fh16rOUX
誘導されてきました WinXPのDOS窓で壁紙の変更したいので regedit /E \\HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper D:\abc.bmp としたのですが、変化ありません やりかた教えてください
レジストリ書き換えてもそのレジストリを誰が読むか考えれ 普通はAPIで壁紙を変更する
>>691 レジストリを変更するだけなら、これで変更できるよ。ただ、画面には反映されない。
画面のプロパティ>デスクトップ には反映される。
REG ADD "HKCU\Control Panel\Desktop" /f /v ConvertedWallpaper /t REG_SZ /d "C:\砂浜.JPG"
レジストリを変更した後、これすれば RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
>>694 レスありがとうございます
うまくいきました
DaemonToolsスレ過疎ってるのでここで質問させてください。 ふとプロンプトでnetstat -anbv打ったら、daemon(ver3.47)の仮想ドライブが「ディスクがありません」と怒られまくりました。 どうやらイメージをマウント→アンマウント後にプロンプトでcpu100%になるような負荷が大きい作業すると起こるみたいです・・・ PC再起動すれば直るんだけど一度でも何かをマウントすると再発します。 原因はなんでしょう?実害は無いし、スレ違い気味ですがよろしくお願いします。
スレ違い承知な馬鹿は死んでいいよ。
すいません。一応netstatのエラーでもあるようなので質問させてもらいました。 コマンドプロンプトの質問はどこですればいいですか?
>>700 コマンド・プロンプトの質問ではないよ。
701 :
700 :2007/01/22(月) 00:48:47 ID:EWkB3kFF
702 :
名無し~3.EXE :2007/01/22(月) 03:01:10 ID:lHhcp0GG
うはwwほんとだ netstat.exeがエラーメッセージ吐きまくりキャンセル押しまくりだわw
>>697 そういうバグっぽいのはここじゃ解決できんよ
デーモン側な気もするし
ちょっときになった俺が着ましたよ。
BAT初挑戦で途中で詰まってしまったので力を借りにきますた FTPで指定したファイルを自動的に取りに行くバッチを拵えてるんだけど getしに行く先のディレクトリが可変の通日で、その中から特定のファイルだけ取得っていう流れ asc cd /data/2007 cd 023 #例えば今日の通日だと023 lcd C:\download prompt mget afilelog023* mget bfilelog023* #ファイル名の023の部分が通日、その後ろは色んな拡張子 毎回エディタで通日だけ置換してやってるんだけど 通日を変数に割り当てて置換箇所を1箇所だけに済ませる方法って無いんですかね?
type makeget.bat echo asc echo cd /data/2007 echo cd %1 echo lcd C:\download echo prompt echo mget afilelog%1* echo mget bfilelog%1* makeget.bat 023 > get023.bat
>>706 即レスサンクス
処理テンプレ作って、%1のパラメータにコマンドラインから直接通日を投げてバッチを作成するバッチ
でいいのかしら。
通日の意味がよくわからんけど、日付に0を付けて三桁にしたいのであれば、 set d= %date% echo 0%d:~-2,2% これでいけると思うが、どうだろう。
>>708 サンクスコ
参考にする
通日は1月1日が001、12月31日が365 月の概念無くした1年の数え方みたいな感じ
ついでにこんなのもいける。通日の代わりになるかも。 set d= %date% set t= %time% echo %d:~-10,4%年%d:~-5,2%月%d:~-2,2%日%t:~-11,2%時%t:~-8,2%分
@echo off setlocal set YYYYMMDD=%DATE% set YYYY=%YYYYMMDD:~,4% set MM=%YYYYMMDD:~4,3% set MM=%MM:/0=% set MM=%MM:/=% set DD=%YYYYMMDD:~7,3% set DD=%DD:/0=% set DD=%DD:/=% set /a YYYY_A1 = YYYY / 4 set /a YYYY_A2 = YYYY_A1 * 4 set /a YYYY_B1 = YYYY / 100 set /a YYYY_B2 = YYYY_B1 * 100 set /a YYYY_C1 = YYYY / 400 set /a YYYY_C2 = YYYY_C1 * 400
>>711 からの続き
set /a URUU = 0
if /i %YYYY_A2% EQU %YYYY% set /a URUU = 1
if /i %YYYY_A2% EQU %YYYY% if /i %YYYY_B2% EQU %YYYY% set /a URUU = 0
if /i %YYYY_A2% EQU %YYYY% if /i %YYYY_B2% EQU %YYYY% if /i %YYYY_C2% EQU %YYYY% set /a URUU = 1
if /i %MM% GEQ 1 set /a TSUJITSU = 0
if /i %MM% GEQ 2 set /a TSUJITSU = TSUJITSU + 31
if /i %MM% GEQ 3 set /a TSUJITSU = TSUJITSU + 28
if /i %MM% GEQ 4 set /a TSUJITSU = TSUJITSU + 31
if /i %MM% GEQ 5 set /a TSUJITSU = TSUJITSU + 30
if /i %MM% GEQ 6 set /a TSUJITSU = TSUJITSU + 31
if /i %MM% GEQ 7 set /a TSUJITSU = TSUJITSU + 30
if /i %MM% GEQ 8 set /a TSUJITSU = TSUJITSU + 31
if /i %MM% GEQ 9 set /a TSUJITSU = TSUJITSU + 30
if /i %MM% GEQ 10 set /a TSUJITSU = TSUJITSU + 31
if /i %MM% GEQ 11 set /a TSUJITSU = TSUJITSU + 30
if /i %MM% GEQ 12 set /a TSUJITSU = TSUJITSU + 31
if /i %URUU% EQU 1 set /a TSUJITSU = TSUJITSU + 1
set /a TSUJITSU = TSUJITSU + %DD%
echo %TSUJITSU%
endlocal
うわ早速バグ発見orz 39c39 < if /i %URUU% EQU 1 set /a TSUJITSU = TSUJITSU + 1 --- > if /i %MM% GEQ 3 if /i %URUU% EQU 1 set /a TSUJITSU = TSUJITSU + 1
無理せずWSHを使う WScript.Echo DatePart("y",Date())
715 :
名無し~3.EXE :2007/01/24(水) 12:35:20 ID:7wyp3Eju
CMD /C D:\XXX.batで 呼び出されたD:\XXX.bat内の先頭行で自身(DOS窓)を最小化させる 方法ありますか?
717 :
名無し~3.EXE :2007/01/24(水) 12:44:36 ID:dHR/g94Y
XPのコマンドプロンプトで 【mkdir konpaira】と書いてkonpairaってディレクトリー 作ったんですけど どこにあるかみつかりません・・・・くだらない質問で本当に悪いのですが 【mkdir konpaira】とかいて作ったディレクトリーはいったいどこに制作されるのかわかりますか?
>>717 explorer.exe /n,%userprofile%
と打ち込む
720 :
名無し~3.EXE :2007/01/24(水) 13:20:03 ID:h1Q75nUe
呆れるほどスペルマミス
723 :
名無し~3.EXE :2007/01/24(水) 14:06:35 ID:h1Q75nUe
>>716 VBSではなくBATファイルなんです。。。
BATファイル内から使用できる、窓を最小化するコマンドは標準ではない。 標準ではないので窓を最小化するスクリプトを作ってBATファイル内から呼んでいる。 BAT内という縛りがなければ、ショートカットやstartとかあるけど。
>>715 START /WAIT /MIN "" CMD /C D:\XXX.BAT
あるいは、CMDOW.EXEを使うとか
なにかリカージョン対策の工夫が必要だけど、 start /min %~fs0 %*
727 :
名無し~3.EXE :2007/01/24(水) 17:02:01 ID:phendHsN
>>726 こんな感じ?
setlocal
if "%リカージョン対策の工夫%"=="" (
set リカージョン対策の工夫=1
start /min %~fs0 %*
exit /b
)
REM 実際のバッチの中身
exit
>>717 ベタベタの初期状態なら多分 C:\Documents and Settings\Owner の下だろ。
つーか「konpaira」にはちょっと萎えたぞw
すこし質問させてください 毎回OSを入れなおす度にファイルの関連付けを変えたり、設定を変えたりするのが非常に煩わしいです。 そこでどなたかファイルの関連付けを一括して変えるBATファイルの組み方をご存知でしたら教えてください。 ソフトウェアでも可ですが、一括して複数の形式を変えられることを前提としてお願いします。
そうすると目的のやつ以外も元に戻っちゃって入ってないソフトとか変になりませんか?
>>732 目的のやつ以外消せばいいだろ。
メモ帳で編集できるの知らないの?
全部書き出さずに目的の物だけ書き出して結合しときゃいいじゃん。
>>730 HKEY_CLASSES_ROOTだけエクスポートしたらいいじゃん。
で、再インスコ後に.regをダブルクリックすりゃOK。
それが嫌ならASSOCコマンドを駆使してくれろ。
PC知識がすくなくてよくわからないので検索と知り合いを駆使して勉強してきます お邪魔してすいませんでした
ちょっと脱線だけど、自分が戻したいと思ってる設定が何なのか?どこまでなのか?というのも悩ましいとこなんだよな。 「OSインスコして一通りのソフト入れて設定終わった段階のクリーンな状態をイメージバックアップしておく」 なんて考えたときに、いったいどの時点まで戻るのが余計な設定がなく、且つ再度度設定する手間が省けるのか迷ったりして。
WindowsXP Professional SP2使っているのですが コントロールパネルのタスクから毎日10時にD:\backup.batファイルを実行するように スケジューリングしています。 そのファイルの内容はこちら copy /Y D:\image\scheduler.tib \\vine\data\backup\ の1行のみです。D:\image\の中に入っているファイルをVineサーバにバックアップ しているのですが、このファイルを単純にタスクに登録していると、10時になると いきなり黒い画面が立ち上がってきてコマンドが実行されたら終了するのですが その黒い画面が立ち上がるのがビックリします。もしフルスクリーンで作業してたら おそらくフォーカス奪われてフルスクリーンが解除されるとかバグるとか そういう不具合がありそうなので、最小化状態で実行させる、もしくは見えない状態で バックグラウンドで実行させる方法は無いでしょうか? ちなみにbackup.batファイルへのショートカットを作成して、そのショートカットの中から 最小化して起動するように設定してタスクにショートカットファイルを指定しても ダメでした。良い手はありませんか?
739 :
名無し~3.EXE :2007/01/28(日) 22:33:19 ID:Vg16WaYG
フォルダの中にある特定の拡張子のファイルをこちらから用意したa.exeに通したいんですが フォルダの中にフォルダがあったりする状況です。 よろしければ教えてください。
for /R %f in (*.doc *.txt) do a.exe %f
自演じゃなくって病気だとおもう。
>>738 RunDLL32.EXE Shell32.DLL,ShellExec_RunDLL C:\backup.bat.lnk
または、 rundll32.exe url.dll,FileProtocolHandler C:\backup.bat.lnk
>>743-744 レスありがとうございます。
そりゃよくわからないですね・・・。
とりあえず自分で解決できました。
start /min cmd /c copy /Y D:\image\scheduler.tib \\vine\data\backup\
っていう1行書いたバッチファイルを使えば成功しました。
こちらの方が簡単そうでしょ?
746 :
名無し~3.EXE :2007/01/29(月) 02:22:52 ID:CHg28K83
747 :
名無し~3.EXE :2007/01/29(月) 02:23:24 ID:CHg28K83
って、えーそんな簡単な方法あるんだw
748 :
名無し~3.EXE :2007/01/29(月) 02:41:28 ID:CHg28K83
wshで一時的に環境変数を設定する方法はありませんでしょうか? バッチファイルで言う、 set HOME=./ みたいなことを指定のですが
749 :
名無し~3.EXE :2007/01/29(月) 02:51:44 ID:CHg28K83
WshShell = WScript.CreateObject("WScript.Shell"); WshEnv = WshShell.Environment("USER"); WshEnv("HOME") = "c:\home"; これでは、全部の環境が変わってしまいます・・・
750 :
名無し~3.EXE :2007/01/29(月) 02:56:08 ID:CHg28K83
あ、 WshEnv = WshShell.Environment("PROCESS"); にすればいいのか・・・
751 :
名無し~3.EXE :2007/01/30(火) 01:41:44 ID:skiU3c8V
超初心者です。 コマンドプロンプトの C:\WINDOWS> のWINDOWSのところを消して、 C:\> にしたいのですが、どうしたらいいのでしょうか? Me使ってます。お願いします。
cd.. と打ち込むとそうなるはず…
753 :
名無し~3.EXE :2007/01/30(火) 01:56:27 ID:skiU3c8V
ありがとうございました。
>>753 あと、OSにもよると思うんだけど、
エクスプローラから、c:¥のアイコンをマウスでcmdの窓に引っ張ってっても
変わるはず。まあ、これじゃ、せっかくコマンド打つ意味はなさそうだけどね
慣れるまでは、それもありかな
あと詳しい使い方は、DOS コマンド あたりでグーグル先生に聞くか、
このスレの他の識者に聞いてくだされ。
ノシ
>>751 ちなみに、2階層登るときは、
cd..\..
まさかとは思うが、
>>751 は「どこの階層にいても C:\> と表示したい」のか?
だったら、set prompt=C:\$g
…んなワケねーかw
鬼才現る
>756 ちょっとワロタ。
昔はカレントドライブだけの表示($N$G相当)がデフォルトだったような。
@echo off "C:\Program Files\ABC.exe" exit これでアプリは起動するのですが、コマンドプロンプトも開いたままになります アプリが起動したらコマンドプロンプトは自動で閉じることは出来ないのでしょうか?
ありきたりじゃつまんないので @echo off ( echo "C:\Program Files\ABC.exe" echo exit )|cmd.exe exit とか?
>>761 閉じることが出来ました。
ありがとうございました。
パス指定にホスト名を使いたいんですが、 例えばユーザ名を使うなら %username% でユーザ名が取り出せますがホスト名を使うならどうしたらいいんですか? hostname コマンドでホスト名が出力されるのは知っているのですが、それを変数として 使うにはどうしたらいいんでしょうか? echo %hostname% %hostname% となって取得できません。 それから、setコマンドで set HOME=%userprofile% とか出来ますが、これは そのbatファイルを終了した時点で消えますよね。 それを、batファイルを終了した後であろうがシステムを再起動した後であろうが 常にずっと有効にしておく(システムのプロパティの環境変数のところに書いたのと同じ) 状態にするにはどういうコマンドを打てばよいのでしょうか? よろしくお願いします。
>>763 for /f "usebackq" %h in (`hostname`) do @set hostname=%h
>>764 おお、凄い凄い!ありがとうございます。
でもこれ再起動とかコマンドプロンプト閉じたりすると切れちゃいますね。
その都度実行って奴ですか。
ええっと、do @set とあるように、setの前に@をつけるとどういう意味があるのでしょうか?
>パス指定にホスト名を使いたいんですが、
%COMPUTERNAME% じゃだめなん?
>常にずっと有効にしておく(システムのプロパティの環境変数のところに書いたのと同じ)
>状態にするにはどういうコマンドを打てばよいのでしょうか?
>>176 >setの前に@をつけるとどういう意味があるのでしょうか?
エコーを無効にする(for文実行時に一々「set 〜」と表示させない)
>>766 ちょおおおおおおーサンクス!ありがとうございます!
%computername% ってあったのかああ! こういう環境変数の一覧みたいなのって
どういうところに載っています?コレが知りたかったんですよ!
setx.exeを拾ってこないといけないんですねぇ・・ふむぅ。。
@set の意味も分かりました。本当にどうもありがとうございます。
set | more
>>768 おお〜、なるほど。こういう風に調べる事ができるんですねぇ。ありがとうございました!
ttp://pc10.2ch.net/test/read.cgi/tech/1148485555/345 から来ました。
フォルダ内にある.exeファイル全てに/q引数を付けて実行するバッチを教えてください。
具体的にはWindowsのHotfixをCDに貯めて、OS再インストール後にバッチからHotfixを自動でインストールさせたいのですが
/q引数をつけないでインストールすると、次々と確認メッセージが出てきて大変なので。
あと、新しいHotfixが出るたびにCDに追加していくのでフォルダ内のファイル数は不定です。
教えてクソ五大要素 1 読まない 2 調べない 3 試さない 4 理解力が足りない 5 人を利用することしか頭にない
そのコピペ久しぶりに見た
>>770 set hoge=D:\hoge
for /f "usebackq" %%A in (`dir/b/s "%hoge%\*.exe"`) do "%%A" /q
SP+メーカーでHotfix専用インストールCD作る手もあり。
775 :
名無し~3.EXE :2007/02/07(水) 18:22:35 ID:HkmhaXR6
どなたかご教授お願いします。 CD又はDVDに入れた「setup.bat」を起動すると同CD内のZIPファイルが デスクトップにコピーされ、尚且つ自動解凍する方法があったら教えて下さい。 お願いしますm(_ _ )m
デスクトップのパスの取得は内部コマンドだけじゃ無理だな。
>>775 copy /Y *.zip
c:
cd %userprofile%\デスクトップ
md files
expand *.zip files
echo finished!! & pause
こんなのでいけるのかしら?動作確認1回もやってないからわからない。
ちなみに当方シロウトです。
ミスった!w copy /Y *.zip %userprofile%\デスクトップ\ c: cd %userprofile%\デスクトップ md files expand *.zip files echo finished!! & pause に修正
だめっぽいなぁ・・・ expandじゃ.zipを解凍出来てない気がする・・ どうすりゃいいんだろ。
素直にCDにunzip.exeも入れておいたほうが楽かと。 あとVistaだとデスクトップは %userprofile%\Desktop\ になる
>>780 unzip.exeって何に含まれているの?私の環境だとそんなコマンドはないと言われるから
ネットから落としてくるフリーソフト?
それから、Vistaの事は全く知らないw 使えるのかなぁVista・・・
782 :
775 :2007/02/08(木) 21:20:11 ID:mVdDQt9f
>>775 WSHならこんな感じで、
デスクトップに展開.VBS ZIPファイル
Set ie=CreateObject("InternetExplorer.Application")
ie.Navigate2 WScript.Arguments.Item(0)
Do While ie.Busy Or ie.ReadyState<>4
WScript.Sleep 100
Loop
Set Shell=ie.Document.Application
Set sFolder=ie.Document.Folder
Set dFolder=Shell.NameSpace(16)
dFolder.CopyHere sFolder.Items()
ie.Quit
784 :
名無し~3.EXE :2007/02/10(土) 20:30:48 ID:3Ev8EayX
Web上からWebサーバー上のバッチファイル動かすのとか出来んかな ちなみにクライアントとWebサーバ間はTelnetの通らないFW挟んでます
>>784 ひんと: Common Gateway Interface
787 :
名無し~3.EXE :2007/02/11(日) 21:45:48 ID:M4xM6Mxy
にわかUNIX プログラマーです。 foreach i ( 1 2 3 .... 15) cp input.{$i} output.{$i} end コマンドを一括して実行するには、 csh ではforeach を使えば簡単ですが、 dos上のbat ファイルでこのようなスクリプトを作りたいのですが、 何か方法はありますか?
for %i in (1 2 3 .... 15) do copy input.%i output.%i
@echo off for /L %%i in (1,1,15) do ( copy input.%%i output.%%i )
790 :
787 :2007/02/11(日) 22:00:43 ID:M4xM6Mxy
>>788 789
ありがとうございます。
早速やってみます。
791 :
名無し~3.EXE :2007/02/18(日) 14:36:27 ID:p11D76E7
すみません。CHKDSKコマンドについて教えてください。 80GBのHDDにCHKDSKを実行してみたところ、 80405293 KB : 全ディスク領域 と表示されます。 WindowsXP上でドライブを右クリックしてプロパティを見てみると、 80,858,566,656バイトと表示されています。 CHKDSKコマンドでは、KB表示なのでバイト表示にする為に、 1024を掛けて見ましたが、 80405293×1024=82,335,020,032となり、 Windows上の表示と一致しません。 もしかして、Win上では1000を掛けるのかと思いましたが、 80405293×1000=80,405,293,000となり、 こちらでも一致しません。 どう計算すると、CHKDSKコマンドの結果が、Win上と一致するように なるのでしょうか。よろしくお願いします。
俺んとこは1024掛けで一致するなぁ
>>791 1024を掛けるのでOK
別の数値を見てるか、ディスクがおかしいんじゃね?
net start service_name や net stop service_name を実行するとWindowsのサービスを起動したり停止したり出来ますよね。 net pause service_name で一時停止も可能です。 しかしサービスのスタートアップの種類が「無効」になっているものについては一切 制御が出来ません。 スタート>ファイル名を指定して実行>services.msc でサービス画面(GUI)が開けますが、そこからならこの「無効」の状態を「自動」もしくは「手動」 に変更できますが、これをコマンドプロンプトから変更する方法はありませんか? そういうコマンドがないかと調べてみたのですが、見つけられません。 もしかしてこの操作はコマンドでは不可能で、GUIで実行するしかないのでしょうか?
sc
sc config service_name start= auto したら「スタートアップの種類」を「自動」に設定する事が出来ました。 どうもありがとうございました。
それで判らなきゃどうしようもないわ
ファイルを一通り揃えないとな
事故解決スマソ ファイルパスの O← これ零だと勘違いしてた模様。オーで通った
>>802 大昔のDOSなら「0」なら,斜め線が入ってたのにね。
いまだに手書きだとゼロに斜線、オーに上線書くクセが抜けません
>>804 Zにも、ちょん「ヽ」って、いれるでしょ?
PCの話題からずれてるけどね。
任意の数与えられた引数をechoする方法を教えてください
echo %*
スマン寝ぼけてたわ
同一バッチ内で、サブルーチンCALL〜RETURNの動作をさせることは可能ですか? GOTOで飛ばしても、元に戻す方法がワカリマセン・・・オワタ\(^o^)/
>>809 2000/XPなら
call /?
9x/Meなら
call %0
でパラメータでもつけて振り分けろ。
811 :
名無し~3.EXE :2007/02/25(日) 21:34:08 ID:FcYHarj1
すみません、DOS初心者です。 質問させてください。 test.txtの内容 -------------------- aaa(111) bbb(222) ccc(333) ddd(444) -------------------- というのを test2.txt -------------------- aaa(111) bbb(222) ccc(333) ddd(444) -------------------- というように並べて出力させたいのです。 aaa(111) bbb(222)←文字列の間にはtabで区切られています。 for文でできそうな感じですが、ド素人なものでよくわかりません(>_<) どなたか教えてください、お願いします!
812 :
811 :2007/02/25(日) 21:35:46 ID:FcYHarj1
すみません、使ってるOSはWindowsXP home editionです
>>811 gawk "{for(i=1;i<=NF;i++)a[n++]=$i} END{for(i=0;i<4;i++)print a[i]}" test.txt > test2.txt
単純にタブを改行に置換した方が早くない甲斐
誤変換した上に微妙に途中で書き込んじまった…callって10個までしか引数渡せないのね
816 :
809 :2007/02/26(月) 04:41:56 ID:TZQkmwZQ
>>810 とんくす。無事に解決しますた。
参考:
メイン処理
メイン処理
CALL :LABEL
メイン処理
メイン処理
・・・
:LABEL
サブ処理
goto :eof
>816 メイン処理の最後にも goto :EOF
テキスト形式でどんどん下に増えていくログファイルで、 新旧2ファイル A.TXT B.TXT があるとします。 FC で比較すると、カブった部分だけは抽出できますが、 増えた分だけ抽出する、うまいやりかた、ないでしょうか。
>>815 >> callって10個までしか引数渡せないのね
shift
>>818 追加部分に全く変更がないことを仮定するなら
Aの行数分+nしてmore
>>819 ---main.bat---
for /f "usebackq" %i in(`call hoge.bat`) call sub.bat %i
---sub.bat---
:loop
echo %1 >>test2.txt
shift
IF %1 GTR "" (goto eof) else goto loop
こんな感じで
>>811 について一行に10個以上データがある場合を考えてたんだけど、できる?
すまんhoge.batじゃない、test.txt
これを試したら10個以上は駄目だったので
>>815 shift自体は知ってるんだけどね、言葉足らずごめん
うあー、そこ以外に間違いが多すぎる…まあ
>>814 で済む話だと思うからどうでもいいっちゃどうでもいいんだ
連投すまん普通に出来た、昨夜はどっか間違えてただけみたいだ… ∧||∧ ( ⌒ ヽ ∪ ノ ∪∪
テキストの中身、例えば abc( ) cde(f g h i) っていう行を、スペース分だけ縮めて abc()cde(fghi) っていう風にってできますか? 教えてエロイ人。
for /f "delims=" %%1 in (file) do for %%2 in (%%1) do echo %%2 shift使うなら set x=%1 if defined x ...
/f抜きのfor文か、盲点だった
>>818 find /c /v "" <a.txt
で行数
830 :
名無し~3.EXE :2007/03/04(日) 13:20:01 ID:iL3fJNBF
txtsetup.sifの終端起動(?)をバッチファイルで処理することは可能ですか?
>>820 トンクス。第一フェーズはクリアできました。
このmoreを使う方法で、+nの開始行だけじゃなく、
終端行も指定できるコマンドはありますか?
>>831 バッチファイルでこんなのとか…
@echo off
rem hoge.bat 飛ばす行数(+n) 終端行番号
rem の形で実行
setlocal enabledelayedexpansion
set count=%1
for /f "usebackq delims=" %%a in (`more +%1 "C:\hoge.txt"`) do (
if !count! LSS %2 (
set string=%%a
echo !string! >>C:\log.txt
set /a count+=1
) else goto :eof
)
)
goto :eof
どうみても空白行カウントしてません。本当にありがとうございました。
@echo off rem usage: hoge.cmd 開始行 終了行 ファイル (for /f "delims=[] tokens=1*" %%0 in ('find /n /v ""') do ( if %%0 gtr %2 goto :eof if %%0 geq %1 echo;%%1 ) )<%3
礼儀を知らん奴だな
すまん、833ありがとう831じゃないが勉強になった
@ECHO OFF rem usage: hoge.cmd 開始行 終了行 ファイル SETLOCAL (FOR /F %%n IN ('FIND /C /V ""') DO SET /A n=%%n-%2)<%3 SORT /+10000 %3 | MORE +%n% | SORT /+10000 | MORE +%1
838 :
831 :2007/03/08(木) 20:41:30 ID:ya3PyY8a
>>832 >>833 >>837 遅くなりましたが、おかげさまで無事に任務完了しました。
お三方ともそれぞれ工夫が入っていて大変勉強になりました。
ありがとーございますっ!
>>838 遅すぎる! 質問したんなら毎日チェックせんか!
>839 まーまー、遅レスでも質問投げてハイ終わりより全然マシだし
いや、俺も本気で言ってるわけじゃあない
自分で作成した.batファイルをパソコン起動から 30秒後に実効させたいのですが(起動直後だと色々なソフトが立ち上がったりしている段階 だから、かなり処理が重くて、実行タイミングをずらしたい) .batファイルの一番上に sleep 30秒 みたいな1行を入れれば解決すると思っていますが (それをスタートアップに突っ込む) sleepコマンドは存在しません。代わりになるコマンドはありませんか? OSはWindows2000 Professional SP4です。 宜しくお願いします。
ping 0 -n 31 > nul
スマン、既出だった。
>>843 このアイディアは面白いですね。でもこれだと正確に30秒数えてるわけじゃないですよね?
pingの感覚は1秒に1回実行しているのですかあれは?
もしそうなら30秒数えてる事になりますけど・・。
それから、 nul なんですね、Windowsの場合は。
Linuxだと /dev/null だから nullの間違いじゃないかと実行してみたら
nullってファイルが出来上がってしまいました。
>>845 俺もnulをとnullを書くことがある。
DOSの頃から使ってるのにいまだになんだよな。
DOSデバイス名は3文字だって思ってりゃ大丈夫なはずなんだがねぇ。
expandコマンドの使い方が分からず悩んでいます。 cab形式で、複数のサブフォルダやファイルを含んだ親フォルダを圧縮後、 expandコマンドで新しいフォルダに解凍すると、サブフォルダが無くなり、 全てのファイルが解凍先のフォルダ内に展開されてしまいます。 解凍後も、解凍前と同じフォルダ構成で展開させるにはどうすれはいいのでしょうか? どなたかお分かりになる方がいらっしゃいましたら、教えて下さい。
無理
852 :
>>850 :2007/03/11(日) 13:41:24 ID:bIr2biXV
expandコマンドではなくextractコマンド使えばOK 入ってなかったらWindowsインストールCD内のSupportToolsインストーラ かMicrosoftから落とせばいい
システムの日付を1日進める事は出来ないでしょうか? C:\>date /? とか C:\>help date とかやってマニュアルを見たりネットで調べたのですが、 Linuxで言うところの # date -s '1days' でシステム日付を1日進める事が出来ます。 このコマンドをfor文の中に埋め込んで、1日ずつずらしながら100回ぐらい特定のコマンドを 打ち続けたいのですが、人力でやると100回同じような作業をしないとならないので ぜひbatファイルのfor文と日付を1日進めるコマンドで自動化したいのですが DOSには1日進めるコマンドは無いのでしょうか? もしあるならば教えてください。よろしくおねがいします。
WindowsME -> Vista へ移行しました。 コマンドプロンプトで以下を実行します。 c:\somewhere>explorer /e,. 制御が戻ってきます。( プロンプトが有効になる ) いつも "explorer /e,." を入力するのは面倒なので、 "explorer /e,." だけを書いた exp.bat を、パスの通った場所に、 置いておきます。 c:\somewhere>exp 実行しても制御が戻ってきません。 Windows9X 系だと、制御が戻ってきます。 どうしたらいいのでしょうか? cmd /c や & など試したのですが、思った通りになりません。
start
start .
830がスルーされてる件
>>860 レスがほしければ、もっと細かく書けば。
あの1行じゃ、なにで困ってなにがしたいのかわからん
862 :
名無し~3.EXE :2007/03/15(木) 14:14:55 ID:Lj7DI4SG
Windowsで実行中のアプリ(EXE)が稼動しているか 定期的(1分ぐらい)で確認し、落ちていたら再度自動起動する バッチはどのように書けばいいのでしょうか?悩んでいます。 ご教授いただければ幸いです。
空ディレクトリだけ削除するコマンド教えろ。
>>862 つ
sleep.exe
tasklist.exe
find か findstr
start
>>865 大事な個人情報データの入った全てのフォルダが見つからなくなってしまいました。
やばいのでちゃんと教えてください。
ていうかその前にどうやったらみえるようになるのか教えろ。
>>866 バカかお前?コマンドの意味ぐらい調べて実行しろよ。
お前のDドライブはクイックフォーマットされてしまったんだよ。
データ復旧がんばれ。最悪復旧できないぜ。
プロセスの優先度(リアルタイム、高、通常以上、通常、通常以下、低)を変更するコマンドって ないですか? ウィルス検索用のサービスのプロセスが「通常」で動いてて、全件検索のスケジュール検索が 始まったりすると非常に操作が遅くなってウザいので、いまは手動でタスクマネージャから 「低」に変えてるんだけど、これを自動化したいのですが。 つーか、遅くてもいいようなバックグラウンドの処理やるのに堂々と「通常」のプロセスで実行して、 フォアグラウンドのユーザーの操作性が悪くなるって、ソフト造ってる人にセンスがないというか 馬鹿ジャネーノと思うんだけどさ。>某有名ウィルス検索ソフト
>>866 l
゙} . . .__
. ; …・ナ“¨´′ . ., . . . .t_
. . ., ._ィ″ . 、/ 、’、
. ., . ./ 、ソ _、、_ ’、
. , ゙_、ゝヤ¨´`¨〜、 .、、。.┬・T¨` `_ ゙`、
. 、, . ._,“ .’_ . . . ./’ ゙’ . ...’、
、, . .′ . .’ /` l . ’
. .i ゙、 . . . ._。.------ . . . ./` . . . .j
i ン´ . . ./´ . . . .| ./` . . .ン′
! ゙_.″ ! , .ソ` . .ツ`
.’-=-‐?′ 、`、 . . ._、‐´ .` .・^
. . . .`^“¨¨´
. _ ゙゜・.
. } 、-、 ゙`・。_ . 、
{ . 、`‐、 ` 、ツ`
. . .; 、´ . ツ` ..__、、、、_、、.
、´ . 、_ . ン‐・¨ ̄ 、、¨ ̄`
. .--------─‐‥・T“¨¨` . / .i
. . . ., . .,` .}
v .I 、’・、 . i
.、・ . ..., . \_ . . .i
. _>~ . ., . `・i . l
..^ . 、’ ゙’
質問の仕方を勉強してから出直せ。
870 :
名無し~3.EXE :2007/03/16(金) 00:48:48 ID:i6fct+GD
age失礼します。 ftp転送をテキストから実行するのですが、 実行を○秒間待ち、失敗した場合はリトライしようと考えています。 ○秒間待つ、というコマンドは調べた限り、ping localhost〜というので できそうなのですが、他に方法はありますでしょうか? また、リトライするにあたりCPUをあまり食わない方法を とりたいと考えています。 FOR〜で回すのと、実行回数を変数にセットしてIF GOTOで回すのは、 どちらがCPU負荷が低いのでしょうか? ご教示ください。
両方作って試してみれば?なにをどうループしたいのかよくわからないけど。 ループ回数多ければコマンド数が少ないほうが軽いと思う。
872 :
名無し~3.EXE :2007/03/16(金) 00:58:54 ID:i6fct+GD
age失礼します。 ftp転送をテキストから実行するのですが、 実行を○秒間待ち、失敗した場合はリトライしようと考えています。 ○秒間待つ、というコマンドは調べた限り、ping localhost〜というので できそうなのですが、他に方法はありますでしょうか? また、リトライするにあたりCPUをあまり食わない方法を とりたいと考えています。 FOR〜で回すのと、実行回数を変数にセットしてIF GOTOで回すのは、 どちらがCPU負荷が低いのでしょうか? ご教示ください。
ん・・連書きになってる。。すいません。
>>871 さん
ありがとうございます。
やろうとしていることは
ftp -s:実行コマンド.txt で、
ファイル転送が問題なく実行されればループを抜け
エラーでファイル転送ができなかった場合は、もう一度ftpを実行しようとしてます。
最終的に3回ほど実行してもエラーが発生した場合は、exitしようとしてます。
とりあえず両方実行してみます。
マジで format 実行した奴いるのか…?
どうみてもネタです。お疲れ様。
今日休んで必死で復旧してます。 少し前のがCDRにバックアップしてあったので何とかなりそうです。 正直参りました。
質問です dirでファイルのサイズは表示できるのですが、 同じようにディレクトリのサイズを表示するにはどうしたらいいのでしょうか
>868 常時CPUを独占するプロセスが動いてるような環境で、 ロクに動かなくてクレーム付ける奴がいたりもするからな。 そういう奴に限って声高な罠。 まぁ、理想的には自身で設定出来りゃいいんだけど。
>>878 WSH使え.cmd ディレクトリ名
@if(0)==(0) ECHO OFF
CScript.exe //NoLogo //E:JScript "%~f0" %1
GOTO :EOF
@end
var fso=new ActiveXObject('Scripting.FileSystemObject');
var folder=fso.GetFolder(WScript.Arguments.Item(0));
WScript.Echo(folder.Size);
>>878 @echo off
setlocal enableextensions enabledelayedexpansion
set s=
for /F "usebackq delims=" %%i in (`dir /n /s /4 /-c %1 ^| findstr /r /x "^[^0-9].*バイト$"`) do set s=%%i
echo %s:~-24,20%
>>868 startで起動する、起動し直すか、
@ECHO OFF
SETLOCAL
MORE +10 "%~f0" >"%~f0.js"
SET DOTNET=%SystemRoot%\Microsoft.NET\Framework
FOR /F "delims=" %%1 IN ('DIR /AD /B /ON "%DOTNET%\v*"') DO IF EXIST "%DOTNET%\%%~1\jsc.exe" SET DOTNET=%DOTNET%\%%~1\jsc.exe
"%DOTNET%" "%~f0.js"
DEL "%~f0.js"
"%~f0.exe"
DEL "%~f0.exe"
GOTO :EOF
import System.Diagnostics;
Process.GetProcessesByName('notepad')[0].PriorityClass=ProcessPriorityClass.Idle;
>>868 OS側から優先度を下げられるといざって時に困るからな。
ウイルスがCPU使いまくってアンチウイルスが動かんとか話にならんから。
884 :
名無し~3.EXE :2007/03/19(月) 23:55:14 ID:5aRr+Po8
port21を即座に開放させるDOSコマンドというか、 バッチを作りたいのですが、お知恵を拝借させてください。。。
shutdown -r
886 :
名無し~3.EXE :2007/03/20(火) 00:09:13 ID:xx1ZwL9C
質問です(*´∇`)ノ osを書き換えるにはどうすればいいのですか?
春休みっていいなぁ。
888 :
名無し~3.EXE :2007/03/20(火) 01:58:07 ID:MaGLsXFC
ポートの開放かぁ・・・DOSコマンドでできるのか?
portを何で塞いでるのかで異なってくるのかな。 何にしろ、ファイアーウォールソフトのチェックを横取りしないといけないので winsocksあたりをフックして、あとは自前でLANドライバを制御しないといけなくなるかも。 またルーター側で塞いでたら、上記作業はまったくの無駄でルーターに設定変更コマンドを投げないといけない。 環境依存しそうだね。
890 :
878 :2007/03/22(木) 11:42:09 ID:QXDhhVnH
コマンドプロンプトから net use を実行すると今現在接続しているネットワークドライブが見えますが、 net use /delete z: とかやるとZ:ドライブを切り離す事が出来ますよね。 それを、 z:やy:等割り当てられていない接続があるんですが (OK \\192.168.30.4\IPC$ Microsoft Windows Network)←こんな感じ これを切断する時はどうすればいいですか? net use /delete * ってやるとコレを含めて全て(y:やz:も)切断されるので、確かに切断は出来ますが y:やz:や切断したくありません。あくまでもコレ1個だけを切断したいです。 で、私なりに考えて net use /delete * -Y: -Z: って実行してみたのですが、エラーが帰ってきました。 どうすればいいんですかねぇ?
net use /d \\192.168.30.4\IPC$
>>892 なるほど、どうもありがとうございました
コマンドが出力した1回の処理結果を、ファイルにもコンソールにも同時に 出力するには、どうしたらいいでしょうか? 現状の苦肉の策 C:\AAA.com > file.txt type file.txt しかしこれだと処理が終わった後にまとめて出てしまい、マズーです。
>>894 teeをそのへんのUNIXライクから抜けば?
Universal Extractorとかにも入ってるね>tee
無事にできました。サンクスです。 書式 C:\AAA.com | tee file.txt
start cmd /s /c "AAA.com>file.txt" tail -f file.txt
tailはどうせ標準じゃないからそれだったらteeのほうが素直だ。 標準のコマンドだけでできるならそれなりに意味あるけど
teeぐらいバッチで作ればよいのに...
つーか
>>899 じゃあ、AAA.com終わっても終わらないじゃん。
>>902 ここでスーパーハカー登場しますた。実際やってみせてくれ。
rmdirってERRORLEVEL 0固定なの?
あ、違う、 rmdirは成功しても失敗捨てもERRORLEVEL変化しないの? が質問です
>>905 @echo off
rmdir %1 2>&1 | findstr ".*" >nul
if errorlevel 1 (echo normal) else echo error: hit!! - findstr errmsg
rmdir "%1" if exist "%1" (略)
rmdir %1 2>&1 | set /p x=
EOF検出困難なので、空行で終了 hoge | tee.cmd 2>hage | huge @echo off setlocal enabledelayedexpansion :loop set /p x= if errorlevel 1 goto :eof echo;!x! echo;!x!>&2 goto :loop
バッチファイルでいろいろ遊んでるけど考え方はRPGツクールと同じなんだな
2kで、標準だと tasklist とか taskkill が用意されてないから 外部ツールを使おうと思ってるんだけど、何かおすすめってあります? できるだけオプション等使用感が標準のに似てるのが良いなぁ。
>>912 XPマシンから C:\WINDOWS\system32\の中から(確かココ) tasklist.exe taskkill.exe
等を拾ってくる。
オレはshutdown.exeを拾ってきて使ったりしている
2kの\Program Files\Support Toolsに kill.exe tlist.exe がないか?
2kのCDの\support\tools\setup.exeを実行すれば
>>914 の通りにインストされるはず
>>909 set /pでパイプはうまく読めんみたい
行単位でなく、割り込み単位に読み取るみたい
>>868 PID=???
Set Application=CreateObject("Excel.Application")
hprcs=Application.ExecuteExcel4Macro("CALL(""kernel32"",""OpenProcess"",""JJJJ"",512,0," & PID & ")")
Application.ExecuteExcel4Macro("CALL(""kernel32"",""SetPriorityClass"",""JJJ""," & hprcs & ",64)")
Application.ExecuteExcel4Macro("CALL(""kernel32"",""CloseHandle"",""JJ""," & hprcs & ")")
>>917 これってCScriptですか?ん?Excelマクロ?
おながい解説plz
PID=WScript.Arguments.Item(0) に変えて、.VBS
バッチファイルで、クリップボードの文字列(ローカルパスだったりURLだったり)を ファイル名とそれ以外の部分に分離して取得したいんだけど、何か良い方法ある? とりあえずmayu作者のcliputilで、全文字列をクリップボードから環境変数1に入れることと ファイル名を環境変数2に入れることはできたんだけど、ファイル名以外の部分がどうにもこうにも。 元の文字列は前述の通り、ローカルパスだったりURLだったりするので引数変数%~dp1使えってのはナシの方向で。
URLのファイル名ってどこだよ。
if文とset文で地道に判定すれば?
遅延展開使って !環境変数1:%環境変数2%=!
PCのセットアップ作業で1PCにつき、複数のプリンタを設定しないといけないので バッチファイルを作ったのですが、どうもうまくいきません。 rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /f d:\work\xxxxx.inf /r "lpt1:" /m "HOGE HOGE3" 上記のようなコマンドを作って実行すると、「ドライバが認証されていないので〜 続行 or 中止」というような メッセージが出るのでいちいちマウスで続行を押さないと進みません。 スイッチに、/Qw という、警告を出さないというスイッチがあるのですが、それを指定すると、 「操作が完了できませんでした」とでてプリンタが登録できません。 解決方法分かる方いませんか? あと、できれば、プリンタのプロパティ ー> 全般 -> 印刷設定の中もバッチで設定で出来ると良いのですが。
>>884 netshコマンドを探し回れば見つかるような気がする
>923 できた! 遅延展開の使い方でちょっとつまずいたけど 分かると面白いね。 さんきゅーです。
>あと、できれば、プリンタのプロパティ ー> 全般 -> 印刷設定の中もバッチで設定で出来ると良いのですが。 /Ssと/Srはどうだろ
batファイルをWindowsのタスクスケジューラで動かしているのですが いちいちDOS窓が立ち上がってきてうっとうしいです。 これを隠してコマンドだけ実行させることは出来ませんか?(スケジューラで)。 完全に隠せなくてもせめて最小化した状態で出来ないでしょうか? 1行だけの.batファイルなら start /min cmd /c mkdir hoge とかでコレが実現できますが、複数行、if文とか組み合わせるとこの方法では出来ません。
タスクj実行ファイル名に、cmd /c start /min c:\hoge.batを登録するとか batファイルへのショートカットを登録するとかではダメなん?
>>927 /Ssと/Sr使ってみたのですが、印刷設定の中(メーカーごとに違う画面のところ)は
うまくできませんでした。
>>928 取り敢えず、sendkeysで対処するようなバッチにしたんですが、すっきりしないんですよね・・・。
ちなみに、Vistaだとちゃんと/Qwスイッチが使えました。
変更箇所を特定してRegWriteとか
オレもやっぱりバッチ実行したときの小窓が気になって 引数で渡したアプリなりバッチなりを窓非表示で実行する 小物ツールをAutoHotkeyで作っちゃったよ。 プログラミング素人だけど30分くらいで出来た。
>>929 ,
>>930 起動時に瞬間コマンドプロンプトが開くから、
wscript.shellでrun bat,0するvbsをwscript.exe起動しようよ
NET USER USER1 /DOMAIN ユーザー名 USER1 フルネーム 田中一郎 ・・・(以下省略)・・・ NET GROUP GROUP1 /DOMAIN USER1 USER2 USER3 ・・・ NET GROUPコマンドで、下記のようにUSER名とフルネームを同時に 取得したいのですがなにか方法はありませんか? USER1 田中一郎 USER2 山田花子 ・・・
>>931 /?を見ると、/qと/Gwはあるけど/Qwはないが?
環境変数に登録されたフォルダの中のファイル名を検索するうまい書き方ありますか? set temp=%path:"=% set temp="%temp:;=";"%" みたいに整形して for /f "delims=;" %%a in ('@echo %temp%') do dir %%a|find "hogehoge" だとフルパス表示できないし、かといってdirに/s付けると余計なところまで検索かけて遅くなるし
とりあえず%temp%は一時ディレクトリ用の環境変数だから 別の名前にした方がいいと思う
あ、確かに。
@echo off set target=foo.txt set dirs=%path:"=% if "%dirs:~-1%" equ ";" (set dirs=%dirs:~0,-1%) set dirs="%dirs:;=" "%" rem dir /w %dirs% rem goto :eof for %%i in (%dirs%) do ( pushd %%~i for /f %%j in ('"dir /b %target% 2>nul"') do echo %%~fj popd )
>>941 指定ファイル名に空白が使われてる場合、バグがあった。
@echo off
set target=*.msi "a b.txt"
set dirs=%path:"=%
if "%dirs:~-1%" equ ";" (set dirs=%dirs:~0,-1%)
set dirs="%dirs:;=" "%"
for %%i in (%dirs%) do (
pushd %%~i
for /f "delims=" %%j in ('"dir /b %target% 2>nul"') do echo %%~fj
popd
)
944 :
941 :2007/04/08(日) 05:57:01 ID:3LVSruKP
>>942 重ね重ねどうもです、レス遅れてすみません
>>944 いえいえ、あなたにはこの程度の対処は出来るんだろうけど
見ている他の人のために訂正しただけですから。
なお、targetが、フォルダだったり相対パス(foo\bar*.txt)だったりする
場合の対処が必要なら、それは宿題です。
>>929 ,
>>943 hoge.js
@if(0==0)new ActiveXObject('WScript.Shell').Run('cmd /c cmd<"' + WScript.ScriptFullName + '"',0);@else
notepad aaaa
exit
:@end
単に起動するだけで非表示バッチ
XPで ・ユーザー選択画面 (「ユーザーの切り替え」 (Windowsキー+L) の状態) ・かつ複数のユーザーがWindowsにログオンしている状態 から、指定したユーザーだけタイマーでログオフさせたいんですが “logoff” コマンド (batファイル) で指定できますか? タイマー実行ソフトや時限シャットダウンソフトでやってみましたが、 どれもユーザー指定ができないので、一人だけ指定してログオフというのは効きませんでした。↓ | 複数ユーザーでログオン | 単独ユーザーでログオン シャットダウン | ○ | ○ ログオフ | × | ○ 複数ユーザーでログオンした状態から指定したユーザーだけタイマーでログオフさせる、 こんなことってできないんでしょうか
よく分からんが、実行するBATをタスク登録するときに実行するアカウントに そのユーザーを指定しとけばいいだけでは?
>>948 お答えありがとうございます
文章解りづらくてすみません
Windows タスク ですよね、ちょっとやってみます
950 :
名無し~3.EXE :2007/04/12(木) 16:15:56 ID:wBWPLIFm
バッチファイル実行時に各行の内容がウィンドウに表示されるのは仕方がないのでしょうか? たとえばメッセージを表示したいときに echo "処理中・・・" と書いて実行すると、 D:\hoge>echo "処理中・・・" "処理中・・・" と2行表示されてしまいます。 また、pauseなどのほかの行もすべて表示されるため、大変見づらいです。 echo等で表示したいメッセージのみ表示されるようにしたいのですが、 何か方法はないものでしょうか? よろしくお願いします。
@echo off
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を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。