初心者〜管理者まで必読!コマンドライン(DOS Pt.6) と入れようとしたら、 「サブジェクトが長過ぎます」 と警告されて、スレがたてられなかったので、上記のように変更しました。
乙
名無し~3.EXEは良くない 名無し~3.COMか名無し~3.BATにするべきだ
rundll32 kernel32.dll,SetSystemPowerState は効かないのはなぜだろ
Win2000 & IME2000 な環境で キーボードのプロパティと MS IME 2000 のプロパティを コマンドラインから呼ぶ方法ってある?
キーボードのプロパティは control keyboard IME2000は知らないがプロパティ開いた時にタスクマネージャ等で 起動プロセス名を確認したらいいんじゃないかな
できたできた。ありがとう。 >8のとおりキーボードのプロパティは control.exe keyboard で、IME2000 は IMEJPUEX.EXE で行けた。 話は変わって、前スレで XP から 2000に TASKKILL, TASKLIST をコピーすれば使える的な 話が出てたけど、XP じゃないと使えませんって メッセージが出て無理だったよ。 バージョン次第なのかもしれないけど一応報告。
すいません for文で` " `(二重引用符)を区切り文字にしたいのですが、 for /f "delims=^"" %%A と書いてもうまくいきません。 他にも一重引用符や逆引用符でくくってみたのですが、結果は同じでした Cueシートを参照したいのでどうしても二重引用符を区切り文字にしたいのですが どうにかならないでしょうか?
どうにかすることも出来るけど、cueシートの操作はwshとかの方がいいよ
13 :
11 :2007/05/04(金) 07:58:10 ID:DU0ceJxS
>>12 wshというものの存在をはじめて知りました…勉強して出直してきます
ただCueシートから参照した文字列を、最終的にCLIアプリケーションに送りたいのですが、
Windows Script Hostというのはそういったことも可能なのでしょうか?
その前で一旦何かに置換しとけば? たとえば、 set xxx=%aaa:"=,%
16 :
11 :2007/05/04(金) 08:37:14 ID:DU0ceJxS
>>14-15 やりかたが悪いのかもしれませんが、置換ではうまくいきませんでしたorz
見識を深めると思って素直にwshを勉強します。
ありがとうございました
17 :
名無し~3.EXE :2007/05/04(金) 16:01:49 ID:SLT3oq8P
教えていただきたいことがあります。 shutdown -s -t 0 をバッチファイルで実行すると、 C:\>shutdown -s -t 0 が、繰り返し表示されるだけでWindowsが終了しません。 次に、 echo a shutdown -s -t 0 echo b を、バッチファイルで実行すると、 C:\>echo a a C:\>shutdown -s -t 0 が繰り返し表示されるのみでWindowsが終了せず、またecho bまで到達して いないように見えます。 shutdown -sをバッチファイルで実行して、Windowsを終了させるにはどうしたら いいのでしょうか。
エスパーな俺がお前のBATファイル名はshutdown.batだと透視した。
20 :
17 :2007/05/04(金) 16:42:26 ID:SLT3oq8P
>>17 思わず後ろを振り返っちまっただよ。
カレントディレクトリの方がPATHのディレクトリ群よりも優先されるということ
ですか?
>20 爆笑。
乙
un信じrable
自問自答自讃でもいいから新ネタでお願いします
ネタ投下 md con.\ ってどういう理屈でそういう結果になるの?
conはMSDOS予約デバイス名。
昔conconバグがブラクラに流用されてWindowsが落とされる問題が頻発した。
conconバグは修正されたが、Windowsには予約デバイス名を含むファイル名の
扱いに今なおバグが潜んでいる。
よって
>>25 の挙動も単なるバグ。
と実行もしていないのに言ってみるテスツ
教えていただきたいことがあります。 WIN2Kでレジストリの内容を読み出して環境変数に値をセットしたいのですが "C:\Documents and Settings"のように値に空白が含まれていると ググって拾ったバッチでは、うまく動きません。 とりあえず REG QUERY サブキー エントリ | SED エントリで抜く > 一時ファイル for /f "delims=," %%f in (一時ファイル) DO SET REG=%%f で目的は果たしたのですが for文のコマンドの中にパイプが組み込めないので バッチが2行になり、なんとなく負けた感じがするので 一時ファイルを作成しないことを前提に 1.REG.EXE 以外は、標準コマンドもしくはマイクロソフト提供ツールを使用 または 2.フリーのツールを使用 上記の条件でバッチでレジストリの内容を環境変数に値をセットする方法ってあるのでしょうか?
昔はパイプ使ってても、実際には一時ファイルが作られていたけど
最近のはさすがにそんなことはないのだろう。
>>27 へのレスは
「わかりません」。
>>27 > for文のコマンドの中にパイプが組み込めないので
パイプを^でエスケープ
>>27 >パイプ
SED使わずにやればいいのに
>?
つwsh
またはwmic.exe(?) ←2000で使えたっけ?
31 :
27 :2007/05/09(水) 18:13:37 ID:bjubhlyI
>>28-30 レスdクス
>>30 >SED使わずにやればいいのに
例えば REG QUERY サブキー "SENDTO" の出力が
-ここから-----------------------
! REG.EXE VERSION 3.0
サブキー
空白 SENDTO タブ REG_SZ タブ C:\Documents and Settings.......
-ここまで-----------------------
と出てくるので C:\Documents and Settings....... を
SEDを使わずに取り込む方法のご教示をお願いします。
for /f "tokens=1-2*" %%1 in ( ) do if %%1=SENDTO set reg=%%3 かな?
setlocal for /f "skip=4 tokens=3 delims= " %%I in ('reg query 完全キー名 /v 値名') do set reg%%I echo %reg% endlocal
2行目 set reg=%%I に修正して。 それとdelims=の後には空白ではなくTabが入ってる。
>>35 なるほど。でもファイルパスって前提があるのでは?
そういうこと言ったら、キー名に空白が入ってたらアウトってのも言える。
キー名じゃなくてキーの値の名前だったorz
>>36 > ファイルパスって前提
そういやそうだった…orz
35は忘れてくれ
文句だけ言って修正方法を示してなかった。 for /f "skip=4 tokens=2* delims= " %%I in ('reg query 完全キー名 /v "値名"') do set reg=%%J
40 :
27 :2007/05/09(水) 20:21:29 ID:bjubhlyI
>>32-39 レスdクス
>>32 >for /f "tokens=1-2*" %%1 in ( ) do if %%1=SENDTO set reg=%%3
は
for /f "tokens=1-2*" %%1 in ( ) do if %%1==SENDTO set reg=%%3
ですよね
全部の方法で出来ました。
ご教示ありがとうございました。
schtasksでタスクを登録するときに、「タスクの実行時にスリープを解除する」をONにするにはどうしたらいいですか。
>>41 jt.exeを使用して、プロパティにSystemRequired=1を指定する。
http://www.windows-world.jp/ms_support/-/18422-2.html -- Sample.txt ----------------
!SD Sample.job
/CTJ StartDate = Today StartTime = NOW Disabled = 0 Type = Daily TypeArguments = 1
/SJ SystemRequired=1 ApplicationName = Notepad.exe WorkingDirectory = C:\ Comment = "サンプル ジョブ" Creator = "名無し~3.EXE" Priority = Normal MaxRunTime = 86400000 DeleteWhenDone = 1
/SC (コンピュータ名)\(アカウント名) (パスワード)
/SAJ Sample.job
/PJ
------------------------------
>jt @sample.txt
>jt /lj %systemroot%\tasks\sample.job /pj
>42 どうもありがとうございます。 やってみます。
環境変数を展開させないようにすることってできるんでしょうか? (例えば mkdir %USERNAME% とやると %USERNAME% というフォルダが作成される etc)
コマンドプロンプトとバッチファイルで異なる ^を適当に入れてコマンドプロンプトでは変数名を一致させないようにする mkdir %^USERNAME% とか バッチファイルでは%を%%でエスケープする mkdir %%USERNAME%%
46 :
名無し~3.EXE :2007/05/14(月) 01:15:57 ID:6p7JJnAY
FOR文のセットでコマンドを指定するとき、そのコマンドの引数に全角文字(日本語)は指定できないのでしょうか? バッチファイル内で、たとえば、 dir /B "C:\ほげ\*" と記述して実行したときは問題なく「C:\ほげ」内を一覧表示してくれるのですが、 その中のファイルに対して操作したいときに for /F "skip=2" %%A IN ('dir /B "C:\ほげ\*"') do ( echo %%Aとかいろんな処理 ) とすると、「ファイルが見つかりません」と表示されます。 セットの部分だけを(dir /B "C:\hoge\*"')と書き換えると 「C:\hoge」内に対して問題なく処理できるので、 この引数以外の部分については特に問題ないと思います。 どなたかアドバイスよろしくお願いします。
47 :
46 :2007/05/14(月) 01:20:12 ID:6p7JJnAY
ちなみに、引数の部分のみ変数に入れてもダメでした。 set FILEPATH=C:\ほげ\* for /F "skip=2" %%A IN ('dir /B "C:\ほげ\*"') do ..... でも「ファイルが見つかりません」と出ます。 どうしようorz。
ほげを省略せずに具体的な値を出せばどうかな? おそらく、そのパスの中にスペースが入ってるとかでは?"delims="
49 :
46 :2007/05/14(月) 01:56:09 ID:6p7JJnAY
即レスありがとうございます。
>>48 delims=を指定しないとスペースで結果が勝手に区切られてしまうのは見落としていました。
どうもありがとうございました。
ですが、あれからいろいろためしてみましたが未だに解決しておりませんorz。
実際にFILEPATHに入れた値ですが、「D:\bkuptest\ほげ\bkup_ほげ_\」です。
for /F "skip=2 delims=" %%A IN ('dir /B /O:-N "%FILEPATH%"') do (
echo %%A
)
と書いて実行したところ、「ファイルが見つかりません。」といわれて中の処理は実行されません。
また、その直前の行に「dir /B /O:-N "%FILEPATH%"」をそのままコピーして追加したところ、
この追加したdirは問題なく実行されました。
そのままコピーしてもFOR文のセットに指定するとダメなんて・・・orz。
どなたかアドバイスありましたらよろしくお願いします。
50 :
46 :2007/05/14(月) 01:57:05 ID:6p7JJnAY
書き忘れましたが、 set FILEPATH=D:\bkuptest\ほげ\bkup_ほげ_\ を直前に記述しています。 よろしくお願いします。
D:ドライブが無いので、Z:ドライブに変更して実行してみたが set FILEPATH=Z:\bkuptest\ほげ\bkup_ほげ_\ for /f "delims=" %%A in ('dir /B /O:-N "%FILEPATH%"') do ( echo %%A ) これでちゃんと表示されたよ。(WindowsXP)
Windows2000だと、forのコマンド解析のバグなのか一部の日本語を使うとおかしくなるね。 日本語1文字(2バイト)につき1バイトずつ減るようだ。 set FILEPATH=Z:\bkuptest\ほげ\bkup_ほげ_\ dir /B /O:-N "%FILEPATH%>tmp.txt for /f "delims=" %%A in ('type tmp.txt"') do ( echo %%A ) とするしかないのかも。
この場合、4バイト減るので後ろにダミー文字4文字をくっ付ければ通る。 for /f "delims=" %%A in ('dir /B /O:-N "%FILEPATH%"1234') do ( トリッキーだが、 for /f "delims=" %%A in ('dir /B /O:-N "%FILEPATH%"^&::::::::::::::::::::::::::::') do ( とでもすれば汎用で通るようになる。
FORの問題なら遅延展開にすれば回避できるかも ただしIN ('コマンド')はサブシェルで実行されるので IN ('cmd /v:on /c dir /b "!filepath!"') みたいに
あとパイプを使う方法もありかな dir ... | for ... in ('more') でもパイプはいろいろ難しいことがあるから使わずに済めば それに越したことはない
そうだ所詮サブシェルで実行されるので%%で遅延展開すれば済むね IN ('dir /b "%%filepath%%"') みたいに
57 :
46 :2007/05/14(月) 12:39:32 ID:6p7JJnAY
>>51-56 Windows2000だったのでご指摘の問題があったようです。
%%FILEPATH%%としたところ問題なく動きました。
どうもありがとうございました。
58 :
名無し~3.EXE :2007/05/14(月) 21:03:27 ID:eTP8kcfM
こんばんわ。 hogehoge20070514hogehoge.dmpのような日付入りファイル名が 毎日作られるフォルダで、最新のファイルから3ヶ月より古いファイルを 削除するバッチファイル作成するのですが 頭の中でアルゴリズムができてるのですがいまいち実現までいきません・・ for /f "skip=93" %%F in ('dir /b /o-n') do del %%F で約3ヶ月分以降を消すっていうのでは依頼者が納得しないそうです。 ディレクトリの中で最終更新日が一番新しい物を見つけてそれをsetで変数に 入れる方法を教えてくれませんか? そのあとは自分でいろいろ考えてみます。
>>58 依頼者とか言うからには、君ソフトウェア設計者なんだろ?
じゃあそれらしくちゃんとした質問しろよ。
・前提条件として、外部プログラム(GNU等フリーソフト)を使っても構わないのか
またはJava/VBスクリプトの使用は?
・対象OSは?
・それと標準BATコマンドのみだとしても、アルゴリズムも全然できてないじゃん。
出来てたら終わってるはず。
素直なアルゴリズムの例を一つ示してやるから後は自分で調べろ。
step1: 今日の日付を求める
step2: 今日の日付をある基準日を0日とする通算日付に変換する(一般化するとユリウス日)
step3: 3ヶ月前が何日分前か求める
step4: step2からstep3を引いてターゲット日として保存する
step3: 以下をファイルの存在する限り繰り返す
step4: ファイル名から日付を取り出す
step5: 日付を通算日付に変換する
step6: ターゲット日と比較する(ループ中なので遅延環境変数展開を必要とする)
step7 より小さい日付なら削除する
日付変換サブルーチン
・日付を、年、月、日に分解する
・各月の日数 31,28,31,30,31,30,31,31,30,31,30,31
・4で割り切れる年はうるう年 2月は29日
・100で割り切れる年はうるう年ではない
・2000で割り切れる年はうるう年
・オプションで、特殊日付をサポートする(-1月とか13月とか35日とかも受け付ける)
・日数を返す
これを素直に実現してもいいし(メンテが楽)、一意の変換式としてもある。
・4で割り切れる年はうるう年 ・100で割り切れる年はうるう年でない ・400で割り切れる年はうるう年 ・2000で割り切れる年はうるう年ではない の間違い
すまそ ・2000で割り切れる年はうるう年ではない は間違いのようだ。記憶違いだったみたい。
質問の直接の回答だが、 %%~tI : %%Iのファイルの最終更新日
キミ、マジで天才
>>58 のはファイル名に入ってる日時を基準にしたいのか、ただ単に例として挙げただけで
ファイル名全然関係なくて更新日時だけ相手にしてりゃいいのか、ようわからんわ。
サブルーチンだけ作ってみた。バグがあるかもしれんが。(WindowsXP) @echo off rem パラメタ %1: YYYYMMDD または YYYY/MM/DD 日付 rem パラメタ %2: -d -m 差分区分(-d:日数 -m:月数) rem パラメタ %3: 差分数 rem 返り値 %YYYYMMDD%, %days% 計算後の文字列日付と通算日数 rem rem 西暦2000月3月1日を基点に日数計算 rem 1年は3月から始まり2月で終わることとする rem -------------------------------------------------- rem 3 4 5 6 7 8 9 10 11 12 01 02月 月号 rem 0 1 2 3 4 5 6 7 8 9 10 11月 新月号 rem 31 30 31 30 31 31 30 31 30 31 31 28 rem 0 31 61 92 122 153 184 214 245 275 306 337 年頭からの通算日 rem -------------------------------------------------- setlocal EnableDelayedExpansion set days_table=312831303130313130313031 set YYYYMMDD=%1 set YYYYMMDD=%YYYYMMDD:/=% set YY=%YYYYMMDD:~0,4% set MM=%YYYYMMDD:~4,2% set DD=%YYYYMMDD:~6% if "%MM:~0,1%"=="0" set MM=%MM:~1% if "%DD:~0,1%"=="0" set DD=%DD:~1%
if "%2" equ "-d" ( call :ADtoTD %YY% %MM% %DD% set /a days = !days! + %3 call :TDtoAD !days! goto :end ) if "%2" neq "-m" ( call :ADtoTD %YY% %MM% %DD% goto :end ) set /a Y1 = %3 / 12 set /a Y2 = %3 %% 12 set /a YY += Y1 set /a MM += Y2 if %MM% LEQ 0 set /a YY -= 1, MM += 12 if %MM% GTR 12 set /a YY += 1, MM -= 12 set /a mon = (MM - 1) * 2 set max=!days_table:~%mon%,2! if %MM%==2 ( set /a mod4 = %YY% %% 4 set /a mod100 = %YY% %% 100 if !mod4! neq 0 goto xxx if !mod100! equ 0 goto xxx set /a max += 1 )
:xxx if %DD% GTR %max% set DD=%max% set MM=0%MM% set MM=%MM:~-2% set DD=0%DD% set DD=%DD:~-2% set YYYYMMDD=%YY%%MM%%DD% call :ADtoTD %YY% %MM% %DD% :end endlocal & set YYYYMMDD=%YYYYMMDD% & set days=%days% echo %YYYYMMDD% goto :eof
rem ----------------------------- rem 西暦を通算日に変換する rem ----------------------------- :ADtoTD set totaldays_table= 00 31 61 92122153184214245275306337 set /a YY = YY - 2000 if %MM% LEQ 2 set /a YY -= 1 set /a MM = (MM + 9) %% 12 set /a days = YY * 365 + (YY / 4) - (YY / 400) set /a mon = MM * 3 set /a days += !totaldays_table:~%mon%,3! + %DD% - 1 endlocal & set days=%days% goto :eof
rem ----------------------------- rem 通算日を西暦に変換する rem ----------------------------- :TDtoAD set days=%1 set /a d1 = days / 146097 set /a a1 = days %% 146097 set /a d2 = a1 / 36524 set /a a2 = a1 %% 36524 if d2 equ 4 set /a d2 -= 1, a2 += 36524 set /a d3 = a2 / 1461 set /a a3 = a2 %% 1461 set /a d4 = a3 / 365 set /a a4 = a3 %% 365 if d4 equ 4 set /a d4 -= 1, a4 += 365 set /a d5 = a4 / 153 set /a a5 = a4 %% 153 set /a d6 = a5 / 61 set /a a6 = a5 %% 61 set /a d7 = a6 / 31 set /a a7 = a6 %% 31 set /a YY = 400*d1 + 100*d2 + 4*d3 + d4 + 2000 set /a MM = 5*d5 + 2*d6 + d7 + 3 set /a DD = a7 + 1 if %MM% GTR 12 set /a MM -= 12 , YY += 1 set MM=0%MM% set MM=%MM:~-2% set DD=0%DD% set DD=%DD:~-2% endlocal & set YYYYMMDD=%YY%%MM%%DD% goto :eof
補足
>>59 のアルゴリムは少し考えが足りなかったので、サブルーチン側で差分日まで
算出し、その日付を返すようにした。 環境変数 %YYYYMMDD%
使い方 BAT名を仮にgetdate.batとすると
2ヶ月前の日付を求める場合
getdate 20070515 -m -2
63日後の日付を求める場合
getdate 20070515 -d 63
自演?
wsh使ったほうが簡単なのにご苦労さん
ちゃんと月数で日にちまで補正してくれるね。 20080331 -m -1 = 20080229 20080331 -m -13 = 20070228
>>72 >・前提条件として、外部プログラム(GNU等フリーソフト)を使っても構わないのか
> またはJava/VBスクリプトの使用は?
と聞いてるので、そこら辺はちゃんと分かっていて、敢てBATのみで作成したのでは?
あるフォルダの中にあるファイルの名前全てに環境変数を設定したいと思い、自分なりに調べて 記述してみました。多分間違っていると思うので間違っている箇所を指摘していただけませんか? rem フォルダ名:abc フォルダの中のファイル名:aaa.jpg bbb.jpg ccc.jpg rem フォルダの絶対パス:c:\abc rem bat名:aaa.bat @echo off set list= for %%I in (c:\b\*) do call set list=%%list%%;%%~nI echo %list% pause rem 実行結果「;aaa;bbb;ccc」 %list%がaaa、bbb、cccという文字列全てを指すという状況を作りたいです。 (違うフォルダ内のファイル名と比較して同名の物があればリネームというのをやってみたいので。) よろしければどなたか間違いを指摘していただけませんか?
すみません for %%I in (c:\abc\*) do call set list=%%list%%;%%~nI でした
77 :
27 :2007/05/18(金) 17:26:22 ID:QurTryuC
ネタ投稿!
教えていただきたいことがあります。
SREP / 標準入力ファイルをコマンドに渡して実行
ttp://dmz.xrea.jp/dahlia/soft/index_s.html#SREP このソフトは、DOS・95・98で動いていて重宝していたのですが、WIN2K以降で動きません。
ECHO:DIR *.* | SREP -BX を実行すると DIR *.* の動作をします。
:SETTEMP
SET TEMPBAT=%RANDOM%
IF
ECHO:DIR *.* >
78 :
27 :2007/05/18(金) 17:38:32 ID:QurTryuC
途中で書き込みしてしまいました。
ネタ投稿!
教えていただきたいことがあります。
SREP / 標準入力ファイルをコマンドに渡して実行
ttp://dmz.xrea.jp/dahlia/soft/index_s.html#SREP このソフトは、DOS・95・98で動いていて重宝していたのですが、WIN2K以降で動きません。
ECHO:DIR *.* | SREP -BX を実行すると DIR *.* の動作をします。
:SETTEMP
SET TEMPCMD=%RANDOM%.CMD
IF EXIST %TMP%\%TEMP.CMD% GO TO :SETTEMP
ECHO:DIR *.* > %TMP%\%TEMP.CMD%
%TMP%\%TEMP.CMD%
でやっていますが
これを一時ファイルを作成しないで1行で実行する方法ってあるのでしょうか?
ECHO:DIR *.* の部分はいろんなパターンがあります。
80 :
27 :2007/05/18(金) 19:54:01 ID:QurTryuC
>>79 レスdクス
行数が長くなって内容を省いていたので命題そのものを説明します。
A.CSV
あああ,111,222,....................................
いいい,222,333,....................................
あああ,111,333,....................................
ううう,333,444,....................................
というCSVファイルから
あああ.CSV
111,222,....................................
111,222,....................................
いいい.CSV
222,333,....................................
ううう.CSV
333,444,....................................
のように元CSVファイルの一列目の名前でファイル名を作り、二列目以降のデータを内容にするバッチを
SEDとUNIQとSORTとSREPを組み合わせて作っていましたが(ECHO:DIR *.*に当たる部分)
WIN2KでSREPが使えないための代替手段を探しています。
>>80 set x=DIR *.*
%x%
または
echo DIR *.*|cmd.exe
これでできそうな気がするが、「>」とか含まれてるとダメぽ for /f "tokens=1* delims=," %%A in ('type a.csv') do echo>>%%A.csv %%B
それ以前にこの順で書くとダメぽ do echo>>%%A.csv %%B
84 :
名無し~3.EXE :2007/05/19(土) 12:44:30 ID:wGTZ/mM4
Windows2000でUserグループのアカウントでログインしているときに shutdown.exe -s -t 0で電源を切ることは可能なのでしょうか? ぐぐってみたところ、WindowsXPについているshutdown.exeはWindows2000でも利用可能なようなのですが、 Windows2000で試してみたところ、権限がないと言われてしまいます。 事情により、Administratorsに入れるわけには行かないのですが、 このような場合でもコマンドで電源を切ることは可能でしょうか? どなたかご存知の方アドバイスお願いします。
runas.exe ショートカット詳細設定別の資格情報で実行する タスクスケジューラ
>>87 制限ユーザーにAdminのユーザー名とパスワード知られたら意味ないじゃん。
あるフォルダの中の複数のファイルの更新日が30日以上前のものは 削除するというバッチファイルを作ることは可能でしょうか? もしよろしければヒントをいただけませんか?
ヒント:過去ログ
92 :
名無し~3.EXE :2007/05/22(火) 23:57:15 ID:DXps0jfC
age失礼します。 FOR /F %A IN (A.txt) DO FINDSTR %A B.txt のようにAから取った文字列をB内で拾おうとしてます。 Aに書かれている1行には半角スペースが含まれてます。 その半角スペースも含めて1行をマッチング(完全一致ではない)させたいのですが、 実行してみた結果、半角スペース前の文字列だけでもマッチングしてしまい 取りたくない行を拾ってきてしまいます。 半角スペースを含む1行をマッチングさせるには どのようにしたらよいのでしょうか?
findstr /? そのものズバリの例が示されているわけだが
うむ。findstrだけでじゅうぶん。for要らない。 つーかここにいるとfor病になってしまうのも頷けるが。。。
>ここにいるとfor病になってしまう あー、あるある
>>94 そうなんですか。。ありがとうございます。
何かとFOR使ってしまうところがあって。。
まあ、forの方の対処も覚えといて損はないよ。 "delims=" findstrの方は、/cかな
みなさん丁寧かつ迅速なレス、本当にありがとうございます。
>>98 delimsで指定無しにすれば
デフォのスペースやタブを無効化できるということでしょうか?
しかしこんな処理でforぶん回すのは実用的には愚の骨頂といっておこう。
>>100 言ってませんでしたが
A.txtには、一応複数行あるんです><
各行の文字列を使用するんです。
つ findstr /? つーかfindstr /l /g:A.txt B.txt
>>102 ありがとうございます。
できた・・・。
普通に考えて find や findstr みたいなテキスト検索系が 複数行に対応していないわけがないと思わんのか。
はあ?
>>105 「はあ?」とは思わんよ。
解決した後に何の実にもならない文句だけ言う奴って...とは思ったけどね。
findは複数文字列サポートしてないだろ
はあ?
はぁ。
はっぁー
どっひゃー
113 :
名無し~3.EXE :2007/06/15(金) 00:15:35 ID:vhmYsLiT
質問です。 \hoge\ab\cd\e.txt \hoge\fg\hi\j.csv \hoge\kl\mn\o.exe と結構多目にディレクトリが複数あるときに ファイルを1つ上位に移動して、最下層のディレクトリを削除する バッチファイルって作成可能でしょうか? (e.txtを\hoge\ab直下に移動して、 cdディレクトリを削除するような処理です。) ren \hoge\*\*\*.* \hoge\*\ rmdir \hoge\*\* が出来ない様なので困ってます。
おまいらの大好物キタ━(゚∀゚)━ !!
>>113 具体的な書き方は私にも分かりませんが
\hoge\ab\cd\e.txt ファイルのフルパスを取得
cd フルパス (これで \hoge\ab\cd\がカレントディレクトリになる)
move *.* ..\ (1個上に移動させる)
cd (とりあえずホームディレクトリにでも移動する。だってそこに居たままじゃディレクトリ削除できないもん)
rmdir /s /q フルパス (これで最下層のディレクトリが削除できたはず)
フルパスの取得は batファイルの引数に直接 e.txt等のファイルを一々指定してあげる事が出来るなら
%~dp0 で取得できるけど、多分引数で一々指定するのはダメなんだろうなぁ・・・。
ダメなら bat実行したディレクトリから下のディレクトリに向かって
1.もしディレクトリが存在するならその中に入る
2.入った先にもディレクトリが存在するならさらにその下に入る
のように再帰処理で行くしかないんじゃないかなぁ。。。大変そう。
と、ココまで書いて具体的なbatファイルを動作確認せずにココにダイレクトに書いてみる事にするw
再帰処理は無理なんで、引数で指定するタイプでいきまっ
使い方は
バッチファイル名.bat C:\hoge\ab\cd\e.txt
のように引数としてファイル名を与えてやって下さい。
そしたら
C:\hoge\ab\ に e.txtを含む全てのcd\の中のファイルを1個上のab\直下に移動し、
C:\hoge\ab\cd\ のcd\の中身が空になってれば削除します。
いや、動作確認して無いから動作するかどうか分からないけどね・・・。
次のレスで貼り付けます。
こんな感じかな。XPで。あんまりディレクトリが一杯あるとどうなるのか判らない。 メッセージは表示しないようになってるが、移動と削除のecho表示するように 変更した方がよいかも。 @echo off setlocal EnableDelayedExpansion if "%~1" equ "" (call :sub .) else call :sub "%~1" goto :eof :sub %1 pushd %1 set x=0 for /f "tokens=*" %%I in ('dir /ad /b /on .') do ( call :sub "%%I" set x=1 if !y! equ 0 move /y "%%I\*.*" . >>nul & rd "%%I" ) popd endlocal & set y=%x% goto :eof
@echo off REM このプログラムは引数を1個指定する必要がある為チェック if %1=="" ( echo 引数がありません。引数を1つ指定してください。 pause goto EOF ) cd %~dp1 REM このmoveの書き方自信無い move /Y *.* ..\ REM この判定の仕方自信無い if exist %~dp1* ( echo なぜかファイルが残っているのでディレクトリを削除できません。 goto EOF ) else ( cd rmdir /S /Q %~dp1 ) REM 自信が無いと書いたところでバグが発生しそう。 pause
for /f "delims=" %%i in ('dir /b/s/ad') do move %%i\* %%i\.. for /f "delims=" %%i in ('dir /b/s/ad') do rd %%i ファイルがねぇぞ( ゚Д゚)ゴルァ!! とか、 ディレクトリが空じゃねぇぞ( ゚Д゚)ゴルァ!!とか どばーっとエラーでるけど、目的は達せられる。
>>118 途中の階層のディレクトリの中にファイルが存在してたらそのファイルまで移動されちゃうぞ
忘れ物だよ つ 要件定義フェーズ
>>119 それでいいんじゃないの?
>>113 にはどこにも最下層のファイルだけ移動とは書いていないけど…
要するに
>>113 は救いようもない程におバカだったってことだね
ディレクトリが空だって判定するスマートな方法ってどうやるの? 泥臭い・強引な方法ばかり思いつくんだが…
DIR /B "C:\hoge" | FIND /V "" > NUL で ERRORLEVEL=1 なら空。 ってのは強引?
読みやすさ優先ならfor /r と set /a ってなところだろうけどねぇ
for /rって何だっけ?って思わずヘルプ(for /?)見ちゃったよ
cmd.exeって激しく使いにくいんだけど替わりになるフリーソフトって何かない?
つ【ActivePerl】
つeshell cygwin+screen+ck代わりぐらいにと stand aloneで自己完結。Cygwin無くても機能。日本語可。 xtermぐらいの表現力。screen程度には使える。ansi-colo r理解。 bash,zsh,csh,tcsh,elisp...色々な要素ぱくっている。 lispは意味不明。超人lisperになるべし。 ソース書換て自分仕様にフルカズタマイズして NTemacs,Meadow上で暮らそうとか思ったんだけ。 挫折気味...
すまん大嘘こいてた。 ansi-termはde ansi-termとかゆうマクロでフックしてたら しい。.emacsに埋め込んでた... ansi-termはcygwinが必要。 んで素のesheelは違うバッファで起動したら同じプロ セス呼んでる('A` きっとどこかには誰か書いてるだろう便利lisp があれば割と逝けると思うんだけど。 どこかないかな... deは独だったか。きっとどこかにあると思う。
標準でeshell -tすると意図どうりだったorz... これを好きなキーに振れば大体同じ感じで使えるかな...
どうせ単なるコマンドシェルだし、TABでの補完さえ出来ればそんなに気にならんけどなぁ
>TABでの補完 してる場合って、実際をTABしたい場合はどうしてるんですか? かくいう漏れはCompletionCharにCtrl+FをアサインしてるCMD使い。
>>133 TABはどんなとき入力してます?
俺はここ数年TABの入力の必要性を感じたことがないけど
あるとしたら正規表現中に\t入れるぐらいだわな
実Tabって使ったことないな。
Tabはタブーだからね
darega umaikoto ieto
Tabが欲しいときはテキストエディタでBATファイルを作成するね 大体そういうものが必要な場合は複雑な場合が多いし、 何度もやり直す必要も出てくるので、コマンドライン直打ちじゃやってられん
140 :
名無し~3.EXE :2007/06/26(火) 16:01:39 ID:k8sDAltM
for /l %%A in(0, 1, 31) do echo %%A で10未満の表示を00と二桁にしたいのですが、どうやったら良いのですか?
setlocal EnableDelayedExpansion for /l %%A in (0, 1, 31) do set a=0%%A& echo !a:~-2!
tabはシステム環境変数に入れとくよ
>>142 それだと使いづらいよ
for /f やfindstrなんかで使うのに遅延環境変数を使わないけなくなる
TABを使いたい時だけcmd /f:offを実行して使い終わったらexit つかTABが必要なら別キーにアサインするのがオススメ
その別のキーの文字を入力したくなったらどうするのさ?
>>144 別のキーにアサインってどうやるの
まさかわざわざそのために常駐ソフトなんか入れないよね?
>>140 ではありませんが
>>141 でやりたいことはできたのですが
以下の構文ではうまくいかなかった理由を教えてください
やりたかったこと:10未満を00と二桁にするしてリネームする
結果:hoge_01はできるが、hoge_02〜09(になってほしいファイル)がhoge_2〜9にリネームされる
rem ここから
setlocal enabledelayedexpansion
set count=0
for /f "usebackq delims=" %%A in (`dir "%~dp1" /a-d /b`) do (
set /a count+=1
if [!count!] lss [10] (set track=0!count!) else set track=!count!
ren "%~dp1%%A" "hoge_!track!%~x1"
)
endlocal
rem ここまで
やりたかったこと:9以下を00と二桁にするしてリネームする
結果:hoge_01〜09はできるが、hoge_10(になってほしいファイル)以降も010などにリネームされる
rem ここから
setlocal enabledelayedexpansion
set count=0
for /f "usebackq delims=" %%A in (`dir "%~dp1" /a-d /b`) do (
set /a count+=1
if [!count!] leq [9] (set track=0!count!) else set track=!count!
ren "%~dp1%%A" "hoge_!track!%~x1"
)
endlocal
rem ここまで
>>147 [数字]だと文字列の比較になるので。
[]を取っ払えば数字としての比較になる。
>>148 そうだったんですか!
if構文のときはいつもこの書き方でったので
これが問題だとはまったく思い至りませんでした
ありがとうございました!
ついでに、同じディレクトリでのリネームは危険。 リネーム後のファイルがあらためて検索対象になることがある。 どういう場合にそうなるのかは宿題。
曲芸みたいなことまでして0パディングするぐらいなら、 素直にWSHで作って欲しいわ 見づらくて仕方がない
はあ?
失礼します。 教えてほしいことがあるのですが、runas /user:owner /savecred cmd と実行すると、以降PCを再起動しても資格情報をがっちり掴んで廃棄してくれません。 /savecredオプションで保存された資格情報を削除するには、どのようにすればいいでしょうか? windows xp pro sp2 cmd.exeのdos窓から実行しました。
別の資格情報で上書きとか繰り返してレジストリ監視してりゃ、どこがキーなのかわかるんでないの?
>>155 ありがとうございます。レジストリを直接編集するということですね。
コマンド自体便利だと思ったので、できればコマンドから実行できればよかったのですが。
パスワード変更をかねてキーをさがしてみます。ありがとうございました。
>>156 いや、キーさえ分かればreg.exeでどうにでもなるんでないの?
と言いたかったんだ
>>157 こんなコマンドあったんですね。あとはキーがわかればコマンドから操作できそうです。
わざわざご指摘ありがとうございました。
159 :
113 :2007/06/28(木) 23:03:15 ID:bHfzd9Lz
色々教えていただいてありがとうございます。 \hoge\ のディレクトリでcd,hi,mn等のディレクトリのファイルだけ移動して削除したかったのです。 説明不足ですいません。 一応こんな感じで動きました。 でも、フォルダ名とか長いと駄目な場合もあるようですね。 dir /xもつけた方がいいんでしょうか? for /f "delims=" %%i in ('dir /b/ad') do ( for /f "delims=" %%j in ('dir /b/ad "%%i"') do move "%%i\%%j\*" "%%i\%%j\.." for /f "delims=" %%j in ('dir /b/ad "%%i"') do rd "%%i\%%j" )
160 :
113 :2007/06/28(木) 23:11:14 ID:bHfzd9Lz
むむ /b/xは一緒に出来ないようですね
161 :
113 :2007/06/28(木) 23:56:29 ID:bHfzd9Lz
一応これで何とかなりそうです。 ありがとうございました for /f "delims=" %%I in ('dir /b/ad/on') do ( cd "%%I" for /f "delims=" %%J in ('dir /b/ad ') do move "%%J\*" "%%J\.." for /f "delims=" %%J in ('dir /b/ad ') do rd "%%J" cd .. )
162 :
名無し~3.EXE :2007/07/04(水) 01:42:29 ID:abxJ+p1r
環境変数に現在のディレクトリを設定するにはどうすればよいのでしょう? set hoge=%0 としてもうまくいかないorz
pushd
164 :
名無し~3.EXE :2007/07/04(水) 02:06:31 ID:abxJ+p1r
>>163 すみません、よければもう少しヒントを頂けないでしょうか?
現在のディレクトリってのがカレントディレクトリを指してるのなら (通常はそういう意味のはずなんだけどね) %cd% 実行しているBATファイルのパスを指してるのなら %~dp0
166 :
名無し~3.EXE :2007/07/04(水) 02:35:21 ID:abxJ+p1r
>>165 ありがとうございます。
%~dp0でいけました。
ほんと、私の質問がわかりにくくてすみません・・・。
ちなみに、こういう定数の一覧ってどこかにまとめてあるのでしょうか?
手元のプロンプト辞典にはこういうの載ってなくて・・・。
set /? call /? そして毎度おなじみ for /?
>>167 おぉ!すばらしい!!
感動しました。
そしていろいろあって奥が深いのですね。
ありがとうございました。
定数?
あんなもので感動できる幸せな人生(はあと
捻くれた物の見方をしてれば大人になった気分♥
C:\System Volume Information\ の中の_restor<GUID>なんちゃら・・って言う名前のフォルダの中に降りて その中からsnapshotフォルダに降りて RP1 〜 RP*(いくつか)まである中から 最新の更新日のフォルダに降りて、その中から_REGISTER_MACHINE_SYSTEM っていうファイルをC:\WINDOWS\system32\config\ の中に SYSTEM と言う名前 でコピーするっていう処理をbatで実行したいのですが(もちろん普通にWindows上から 実行するとメモリが掴んでいるので不可能ですが、1CD起動のXPから実行します) C:\System Volume Information\までは固定なので簡単に移動できるのですが マシンによって_restor<GUID>の値が可変なのでパスを直うち出来ません。 <GUID>を取得する方法もよく分からないので dir /A コマンドの出力結果を見て、そのフォルダに移動すると言うような処理は 出来ませんか? その後 snapshot\配下の複数のフォルダに対して最新のフォルダがどれかを 求める処理は SAISIN=最初のフォルダ ループ(全部のフォルダを参照するまで) {
途中で書き込んでしまいました。続きです。 SAISIN=最初のフォルダ ループ(全部のフォルダを参照するまで) { if(%SAISIN%の更新日 < 次のフォルダの更新日) { SAISIN=次のフォルダ名 } }ループ終了 こんな感じのアルゴリズムで求めて、その最新のフォルダに降りて_REGISTER_MACHINE_SYSTEM ファイルを取ってくる処理を実行したいのですが・・・ 一応自分で調べた限り フォルダの更新日は %~z1 みたいな変数で参照できるみたいです。 実現するのはBatだと厳しいですかね?
@echo off set target_drive=%systemdrive% set latest= pushd %target_drive%\System Volume Information for /f "delims=" %%I in ('dir /b/ad/od _restore*') do ( pushd %%~fI for /f %%J in ('dir /b/ad/od rp*') do set latest=%%~fJ rem for /f %%J in ('dir /b/ad/o-d rp*') do set oldest=%%~fJ popd ) popd if "%latest%" neq "" (echo %latest%) else echo *** not found ***
cd /d "C:\System Volume Infomation\_restor*\snapshot" for /f %a in ('dir /ad /b /od rp*') do set SAISIN=%a cd "%SAISIN%" copy _REGISTER_MACHINE_SYSTEM C:\WINDOWS\system32\config\SYSTEM
176 :
173 :2007/07/06(金) 19:34:36 ID:gFjF/2om
>>174 おおお、レスありがとうございます。
貴方のおかげで目的が実現できました。感謝します。
Batファイルを編集していて気づいたのですが、貴方のアルゴリズムだと
C:\System Volume Information\_restore*
ってフォルダが複数あった場合に(今回は1個なので対した処理量の違いは無い)
最後以外のフォルダの中の最新のフォルダまで探索しにいくと思うので
無駄な処理が入っていますよね。forの二重ループでやっているからだと思うんですが
1回forでループして、ループ抜けた後でもう一回forのループで_restore*\snapshot\以下の
RPの最新を探す方が効率がいいですよねぇ?
>>175 うわ、みじかっ
っていうか cdコマンドで _restore* で入れるんですかっ!
もし_restore*で複数のフォルダが該当した場合はどうなるのだろうかと
RPがたくさんあるフォルダ内で実行したところ、どうやら最初に見つかったフォルダに
入るみたいですね。かなり簡潔ですねぇ・・・。
で、ネットで調べてもどうしても分からなかったのでお聞きしたいのですが
(for /f)の /f ってどういうオプションなのでしょうか? for /? して見てもよく分からず。
for /L だと for /L %%I in (初期値,増分,条件) と書ける事は知っているのですが・・・。
# C言語やJava言語のforとは位置が違いますよね。混乱します・・・。
@echo offを外せばデバッグできるはず %1が未定義だと、 if == "" ( と展開される。 if "%~1" == ""
>>178 if "%1" == "" でも動作するのですが
"%と1"の間に ~を挟むと何が違うのでしょうか?
%1にもし"c:\Program Files"とかが入っていたらこのif文はエラーになる。 if ""c:\Program Files"" == ""
↑
念のため、これは
>>179 のように書くとこういう弊害があるということで、
>>178 はそういう場合の対処も兼ねている。
簡単に言うと、~は%1が""で括られていなければそのまま、括られていれば""を外す。 call /? 読むなり echo %~1 試すなりすれば分かることだと思うが。
%1→"%1" %2→"%2" %~f1→"%~f1" %~f2→"%~f2" %~z1→"%~z1" %~z2→"%~z2" 最終行に「:EOF」を追加 これでどうだ?
うへ、ミスった × %1→"%1" ○ %1→"%~1" × %2→"%2" ○ %2→"%~2"
goto :eofはラベルを作成しなくても飛べる便利機能。 goto /?でも読めば書いてある。
なるほど・・・分かりました! "%~1" って 書かないと ""変数の中身"" ってダブルクォーテーションが普通の2倍 くっついてしまって構文的におかしいわけですか・・・だから余分なダブルクォーテーションを 削除しているわけですね。なるほどです。非常に勉強になります。 すみません、質問ばかりで申し訳ないのですが リモートのFTPサーバが生きているかどうかで処理を分けるようなことは出来ませんか? pingを実行して、帰ってきた %errorlevel%を見て処理を分けるというのは出来るんですが これだと pingはルータで蹴る設定だけど、FTPサーバは繋がると言う状況の時や pingは通るけどFTPサーバが落ちているとか言う時に困るんです。 @echo off ftp -s:ftpcmd.txt (ftpcmd.txtファイルにFTPログイン〜何もせず切断〜終了まで書いとく) if %errorlevel% ( で処理分けをしようとしてみたのですが、FTP接続に成功しようが失敗しようが 0(真)が帰ってくる(そりゃftp接続は失敗したけどftpコマンドそのものは成功しているんだから 0が帰ってくるわな・・・) ので、判定の材料にはならないんですよ。 皆さんならどうやって判定しますか?
>>186 泥臭いけど、結果をファイルにリダイレクトしといて、そのファイルにfindstrするとか。
ftp -n -s:ftp_open_check.txt | find "220" >nul rem ftp -n -s:ftp_open_check.txt | find "Connected to" >nul if %errorlevel% equ 0 echo ** open success **
修正 ftp -n -s:ftp_open_check.txt 2&>1 | find "220" >nul
なんというか・・・素晴らしいというか凄いというか、いやはや・・・。
>>187 そのせんでfindstrでやっても出来そうでした。
>>188-189 "2&>1" ←これの意味を教えて頂けませんか?
修正前のでも動作しましたので・・・。
しかしftp -nなんてあったんですね。 ftp /? してもヘルプ出ないので
ftp -s しか知りませんでした。
で、その出力結果をfindにパイプで渡すからファイルも出来ないと。
素晴らしすぎる
さらに2>&1の間違いで、標準エラー出力を標準出力にリダイレクトする (要するに、両方の出力をマージしていっしょくたに標準出力に吐き出す) ftp -? -nは自動ログインをしない。ユーザー名とパスワードの入力不要。 open ftp-addres close bye でOK
>>191 2>&1 って書けば 2(標準エラー) 1(標準出力)を結合して吐き出すわけですね。
で、吐き出したデータは使うんですか?どうせfindはそんなの見てないようだし
findの出力はnulの彼方にだし。
ftp -? で見て見ました。色々あるんですねぇ。全然知りませんでした。
でもとりあえず、 FTPサーバ生存確認と言いましたが、細かく言うと
FTPサーバが生存していて、かつログインに成功した時ファイルをアップロード
見たいな事をやりたいんで、ログイン処理まで書いて logged in, といった
文字列をfindにかませて判定した方がより正確な判定が出来るので
ログインまでやりますw。
皆さんはこういう情報はどうやって勉強しているのですか?
私は
http://www.ne.jp/asahi/hishidama/home/tech/windows/bat.html ココで多くを学びました。
ネットで調べてもあまりBatって細かく解説しているサイトが無くて
やはり本格的にやる為には書籍が必要なんですかね。
ヘルプだけで結構わかるもんだよ。 set /? if /? for /? call /? goto /? cmd /? setlocal /? echo /?
>>193 ヘルプだけで分かるって・・・・
すごいなぁ・・・・ハッカーですかw。
本当にどうもありがとうございました。これで今回の目的は全部達成できました・・・。
コマンドシェルの概要だとかリダイレクタとかは、Windows Helpを見ないと分からないようだ。 コマンドヘルプ(/?)と両方のヘルプを見比べればいいと思う。 (XPの場合) startボタン − ヘルプとサポート − ツール を使ってコンピュータ情報を表示し問題を診断する − コマンド シェルの概要 コマンドシェルからヘルプを起動したい場合 hh MS-ITS:G:\WINDOWS\Help\ntcmds.chm::/ntcmds_o.htm hh MS-ITS:G:\WINDOWS\Help\ntcmds.chm::/redirection.htm など。 またはヘルプサポートセンターで見たい場合 start helpctr /url ms-its:ntcmds.chm::/ntcmds_shelloverview.htm など。
>>195 うわー残念。Windowsを徹底的にチューニングして無駄な物、要らない物を削除
しまくっているのでヘルプファイルとか全部既に消してあるから開けない・・・・。
>>185 判ってはいるが、それが無いと何となく気持ち悪いので俺はいつも付けてる。
>>196 あほですか?
質問スレよく見るんでお前さんのような奴時々見かけるけど、
わけもわからず適当にファイル削除する奴を見ると毎度ながら反吐が出そうになる。
PCと関係ないスレで「自分でぐぐって調べろ」と言われて 「PCの調子が悪くて・・・」と取り繕ってるのと同じ(要はウソ)
>>197 goto :eof と
goto eof の違いは判ってんのか?
>>198 DiskX Toolsっていうクリーニングソフトがあって、その中の削除項目に
Windowsのヘルプファイルってあるんですよ。
8年間パソコンを使い続けてきて、そんなヘルプファイルなんか見たこともないし
これから先も見る事は無かろう、役に立たないフリーセルやソリティア、マインスイーパ
等のデータと同価値のファイルだろうと思って消してしまってます。
あほですみません。
>>199 なるほど、、、確かにそういう風にも取られるんですね。コレは失礼しました。
>>200 その二つに違いなんかあるのか・・・・・ と言うか goto : ってコロンつけないと移動できないんじゃ・・
exit /b 使ってる。必要なら終了コード付けられるし。
これだからヘルプを読まない人種は
ヘルプなんか読む奴は初心者
ヘルプを読まない奴は中二病
ヘルプを歌うのはジョンレノン
ヘルプにはパラメー、ラメー(自粛
echo ヘルプネタはもういいよ。 pause > nul goto :eof
209 :
名無し~3.EXE :2007/07/09(月) 17:53:53 ID:avOS7hXh
コマンドラインでネットワークの有効/無効を行いたいのですがどのようにすれば良いのでしょうか。 GUIだと「スタート→設定→ネットワークと(ry→ローカルエリア接続」の作業です。 無線LANがスタンバイする際に問題起こすのでスタンバイ入る前にネットワークから切断し 復帰後また接続すると言うようにしたいのです。 スタンバイ入ったり復帰するイベントはツールで取得できるのでその際に実行させれば行けるかなと。
211 :
名無し~3.EXE :2007/07/09(月) 18:37:10 ID:avOS7hXh
ipconfigでは出来ないと思いますが…
IPを/releaseすればいけるかなと予想したんだが、、、
>>209 無理。windows Server 2003なら
netsh interface set interface "ローカル エリア接続" disabled
ただし、WSHでコントロールパネルの「ネットワーク接続」から「{ローカルエリア接続」
を「無効にする」を選択するようなスクリプトを組めば可能。
>>209 最新ドライバを確認するか、そのPCのスレで質問すれば
スタンバイの問題が解決するかも
>>215 exe自作してbatから呼べばいいんじゃね?
webサーフィンしてから拾ってきた。自己責任でどうぞ。 Const ssfCONTROLS = 3 Const sConPaneName = "ネットワーク接続" Const sConnectionName = "ローカル エリア接続" Const sDisableVerb = "無効にする(&B)" Const sEnableVerb = "有効にする(&A)" set shellApp = createobject("shell.application") set oControlPanel = shellApp.Namespace(ssfCONTROLS) set oNetConnections = nothing for each folderitem in oControlPanel.items if folderitem.name = sConPaneName then set oNetConnections = folderitem.getfolder: exit for end if next if oNetConnections is nothing then wscript.quit end if set oLanConnection = nothing for each folderitem in oNetConnections.items if lcase(folderitem.name) = lcase(sConnectionName) then set oLanConnection = folderitem: exit for end if next if oLanConnection is nothing then wscript.quit end if for each verb in oLanConnection.verbs if verb.name = sDisableVerb then verb.Doit WScript.Sleep 2000 end if next
batプログラムだと ユーザに Yes か No か 名前、性別等の入力をさせて その入力結果に応じて処理をするという事は出来ないんですかね? こういう処理はWSHですか?。 それとコマンドラインインタフェースが無いアプリケーションをコマンドラインで (batでもWSHでもいいので)GUI操作させる事は出来ませんか? 例:FileZillaと言うFTPクライアントを立ち上げ、立ち上がった後即座に ミラーリングアップロードを開始させ、ミラーリングアップロードが終わったら FileZillaを正常終了させる。 等。AutoHotKeyとかUWSCとかそれ関連のアプリはあるみたいなんですが batかWSHで実行できないかなぁと思いまして。
set n=default set /p n=input: echo %n%
221 :
209 :2007/07/10(火) 18:57:52 ID:Pg7+75wk
>>213-217 サンクスです。
>217を少し改造して
WScript.exe hoehoe.vbs on/off
とか何とかして実行するように登録しうまくいきました。
Linux 等のシェルで、長いコマンドを一行で入力するとき、'\' で改行できますよね。 $ java -Dfoo=bar \ -classpath lib\hoge.jar \ fuga これと同じようなことを、Windows のコマンドプロンプトや bat ファイルで出来ますか? コマンドプロンプトでは出来なくとも(できればうれしいけど) bat ファイルの中では実現したいです。
できません
環境変数に分割していくしかないな
@echo off echo very ^ long ^ command
WSHについての質問です。 MsgBox ("サーバ接続に失敗しました",vbYesNoCancel) と書いて実行すると Sub プロシージャを呼び出すときに、かっこを使うことはできません。 と怒られます。 マニュアルを調べてみると MsgBox(prompt[, buttons][, title][, helpfile, context]) とかかれてあります。 promptが"サーバ接続に失敗しました" で、 , buttonsが vbYesNoCancelで、残りは全て 省略可能で ) で閉じる。 構文間違ってないように思うのですがなぜエラーになるんでしょうか?
>>227 「Sub プロシージャを呼び出すときに、かっこを使うことはできません。」
でググレカス
set /pだと誤入力の危険があるので、それを回避するために、 バッチファイルからHTAを起動してプルダウンメニューとボタンを表示し、 選択された項目に応じてバッチファイルの動作を変えられたらいいなぁと 考えましたが、これは実現可能でしょうか? もし可能なら、サンプルを載せていただけると助かります。 また、不可能な場合、何か代替案があるといいのですが・・・。
htaからbat実行すりゃいいんじゃないの
choice.exe
batからhta実行すりゃいいんじゃないの
質問です。SUBSTコマンドで割り当てた仮想ドライブに、 別のボリュームラベルを表示させることはできませんか? C:SYSTEM D:DATA と2つのドライブがあるとします。 subst E: D:\1 subst F: D:\2 subst G: D:\3 とすると、マイコンピュータを開くと C: SYSTEM D: DATA E: DATA F: DATA G: DATA となってしまい、見にくくなってしまいます。対処法ありましたらお願いします。
234 :
名無し~3.EXE :2007/07/22(日) 22:33:17 ID:1kQ2Scg2
237 :
名無し~3.EXE :2007/07/23(月) 22:30:33 ID:ptbQjJRK
Win98環境でバッチを作成してます。 日付をリダイレクトして、ファイルに書き込みたいのですが、 Win98の場合、dateを実行すると、新しい日付を指定してくださいと 表示され、バッチ内で実行すると、その部分で処理が止ってしまいます。 Windows98環境ではDateやTimeコマンドの結果を、どのようにして ファイルにリダイレクトすれば良いのでしょうか。
%date% %time%
NT系なら /T オプションがあるけど98にはない。 俺も昔同じ事やろうとして結局Perl使ったもの。
応答ファイル作ってみては? エンターを標準入力する date < enter.txt
わざわざファイルを作らなくても echo.|date
>>243 いやーそれも考えたけど
Win98じゃあecho.が別の結果になりそうな予感がしたので止めたわけよ
DOS5の頃から、echo. は改行。ピリオドの代わりに / : , なども可。
まあどうやってもwin98じゃあfor /fもset等での編集もできないので 外部コマンド(BATUTYとか)を使うのが良い
>>235 目的はスクリーンショット取得の効率化です
現在はプリントスクリーンを押下してペイントに貼り付け名前をつけて保存をしています
スクリプトを起動するだけで現在の画面をbmpファイルにしようと目論んでいます
ペイントの起動からファイルの保存(ファイル名は連番で空きのあるもの)までは実現しています
あとはクリップボードに画像を送る方法が足りません
社内PCにフリーソフトのインストールは禁止なのでWindows標準のソフトやスクリプトで実現したいです
よろしくお願いします
ペイントなら、メニュー操作でできるじゃん。 編集(Alt+E)−すべて選択−コピー (送信するキーで言えば、Ctrl+A、Ctrl+C) でどう?
勘違い、忘れて
うぜぇなあ。 社内でのスクリプトも禁止にしてくれればいいのに。
> 社内PCにフリーソフトのインストールは禁止 こういう会社は遠からず衰退するなw
逆にインストールし放題だったらそっちの方がよっぽど問題。
アンインストール〜♪ アンインストール〜♪
254 :
名無し~3.EXE :2007/07/24(火) 16:51:41 ID:1kH5Q7z7
temp.txtというファイルから 東京都と埼玉県という文字列があるか無いかを、 kekka.txtに書いていくバッチを作りたいのですが、 以下のようにすると、東京都までの検索は出来ますが、 埼玉県の検索で、無限ループのような実行になってしまいます。 環境は、Windows98のMS-DOSプロンプトです。 回避策をご教授頂けないでしょうか。 よろしくお願いします。 find "東京都" < temp.txt IF ERRORLEVEL 1 GOTO NG "temp.txt" IF ERRORLEVEL 0 GOTO OK "temp.txt" :NG @echo 東京都 なし >> kekka.txt GOTO END :OK @echo 東京都 あり >> kekka.txt GOTO END :END find "埼玉県" < temp.txt IF ERRORLEVEL 1 GOTO NG "temp.txt" IF ERRORLEVEL 0 GOTO OK "temp.txt" :NG @echo 埼玉県 なし >> kekka.txt GOTO END :OK @echo 埼玉県 あり >> kekka.txt GOTO END :END
255 :
254 :2007/07/24(火) 17:07:37 ID:1kH5Q7z7
すみません 自己解決しました
スレ違だけどWin98のショボいコマンド使うぐらいだったら、良い機会だからVBSでも使いなよ Set objFSO=CreateObject("Scripting.FileSystemObject") Set objTxIn=objFSO.OpenTextFile(".\temp.txt",1) Do Until objTxIn.AtEndOfStream buf=objTxIn.ReadAll Loop objTxIn.Close ArrResult=Array(0,0) if instr(1,buf,"東京都")>0 then ArrResult(0)=1 if instr(1,buf,"埼玉県")>0 then ArrResult(1)=1 strResult=Cstr(ArrResult(0)) & Cstr(ArrResult(1)) Select Case strResult Case "11" Call WriteResult("東京都あり"&vbcrlf&"埼玉県あり") Case "10" Call WriteResult("東京都あり") Case "01" Call WriteResult("埼玉県あり") Case Else WScript.Echo "ないよ" End Select Sub WriteResult(strWord) Set objTxOut=objFSO.OpenTextFile(".\kekka.txt",2,True) objTxOut.WriteLine(strWord) objTxOut.Close End Sub
257 :
名無し~3.EXE :2007/07/24(火) 22:06:42 ID:cEJUopRP
質問させてください。Windows98のバッチファイルで、 ネットワークドライブの情報と、使用しているプリンタ名の情報を 取得する事は出来ますでしょうか?
EnumNetworkDrives EnumPrinterConnections
259 :
257 :2007/07/24(火) 22:49:55 ID:cEJUopRP
vbsを今から勉強している余裕が無いんです… バッチじゃ無理ですかね
@echo off start /w regedit /e c:\aaaa.txt HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers type c:\aaaa.txt del c:\aaaa.txt
261 :
257 :2007/07/25(水) 00:09:05 ID:3jXjVge/
>>260 バッチでレジストリのデータ取得できるんですか!
今環境無いんですが、明日試して見ます。
ありがとうございます!
バッチファイルのマニュアルって無いでしょうか? MSDNを探したけど見つかりませんでした for /?やwindowsのヘルプでコマンド名で検索すればそのコマンドについての説明はでてくるのですが 網羅的なものや文法以外の事(例えば変数の扱いについてなど基本的なルール)が書かれている 文書が欲しいです
ネットで検索すればある程度は出てくると思うけど、古い9x時代の頃の情報が多くて 最近のしっかりしたサイトは知らないなぁ。@ITくらいか。 お金を出しても良いなら下手にWebで探すより書籍を買っちゃった方が早いかもね。 自分も1冊買ったけど、買って良かったと思ってる。 あと自分の場合 craftlaunch 使ってるので CMD.EXE /C %arg /? > %arg.TXT みたいな コマンド作っちゃって、一発でコマンド名.txtが出来るようにしてる。 ちなみに変数はPATH /?かCALL /?で一通りのことは分かると思うよ。
オレが買ったのも>263の奴だ。結構良いと思うよ。
とりあえずヘルプを読むといい。 仕様は全てヘルプに書かれている。 (ある特定コマンドについてはwin2000ではコマンドヘルプの方が詳しいものも一部ある。 またどう使うか応用はサイトめぐりか本でも買え) まあ、ヘルプファイルを不要として削除しちゃってるバカもいるけど。 一度は全部読み通してみるといい。
>>264 コマンドヘルプだけでは明らかに情報不足に陥る。
それでは複雑なBATは書けない。
>複雑なBAT この時点で間違ってる 複雑な処理させたければWSHなりにしろ
270 :
257 :2007/07/26(木) 13:22:22 ID:Bs03WwTU
>>260 遅くなりましたが目的の情報を取得することが出来ました。
このコマンドで他の情報も持って来れそうです
ありがとうございました
>>263 260さんの記述でレジストリのデータを読めましたよ
>>269 基本だが、変数として有効な文字とか変数サイズの上限とか全体の総バッファ長とか
& && | || ; , ^ とか、0< 1> 2> 1>&2 2<&1とかWSHの呼び出し方とか
コマンドヘルプじゃわからないよ
wshって素のままのWindowsOS(95からxpまで)で バッチみたいに使えるの?
95は素では無理
cd hoge >> log\normal.log 2>> log\error.log みたいに書いても正常に動作しないのですが、 標準出力と標準エラー出力をそれぞれ別々のファイルに保存する方法を 教えていただけませんか?両方を1つのファイルに保存するなら cd hoge 2>&1 >> ryouhou.log ですよね。
(cd hoge >> log\normal.log) 2>> log\error.log
>>274 どんな現象になるの?
cd hoge >> log\normal.log 2>> log\error.log
これでちゃんと動作したけど?
>>276 cdだと動作するかもしれませんが他のコマンドだとちゃんと動作してないような・・・。
copy /Y とかで試してみると多分動かないかと。。
正しい書き方を知らない物で 正当な書き方をお聞きしたいのですが・・・。
>>275 さんのが正しい書き方なのですかねぇ。
この場合( ) の中が最初に評価されるから 仮になんらかの原因( normal.logファイルへの書き込み
権限が無かったり)で、コマンドの実行自体は成功しているのにnormal.logへ書き込めなかったから
エラーだと判断されて error.logにかかれたりはしないのかなぁ・・・。
いまいちこの辺よく分からない。
copy /y dir hoge で試したけど問題なく動作したよ
>>278 マジですか・・・。 じゃあリダイレクションの問題じゃなくて
私が何か間違えているのかも。Windows版 pdumpfsを動かして検証してみたところ上手く
いかなかった物で・・・。 失礼しました。
>>279 これって相対パス指定してるんだが、カレントディレクトリ配下に間違いなくlogフォルダはあるのか?
無ければ当然の結果だけど
>指定されたパスが見つかりません。
となる
pdumpfs.exe C:\data C:\saki >> log\normal.log 2>> log\error.log こんな感じ。 実際には引数で渡して変数に格納して使っているので %PRG% %MOTO% %SAKI% >> log\normal.log 2>> log\error.log こんな感じ。 それでエラーが起きたときは error.logに書かれるのに 正常に実行できた時は normal.logに何も書かれないからおかしいなぁと思って。
>>280 コード中に
REM logフォルダがない場合は作成する
if not exist log\nul (
mkdir log
)
ってあるのでlogフォルダは確実にあります。
>>282 どこのコマンドを使ってる?
ググってpdumpfs-w32-1.3.zipをゲットして試したら実行しても
標準(エラー)出力に何も出力されないまことに静かなるコマンドだったんだが?
>>283 http://www.monochrome.jp/~katsuwo/software/pdumpfs-for-windows/ これです。
で、私の勘違いだったようで、なんだか
pdumpfs.exe C:\moto C:\saki >> normal.log 2>> error.log
で動作しているようです。なぜ勘違いしたのか未だによく分かりませんがOTL
お手数をお掛け致しました。
しかし1つ気になる事が。
pdumpfs.exe C:\moto C:\saki >> normal.log 2>> error.log
で動作したのですが
(pdumpfs.exe C:\moto C:\saki >> normal.log) 2>> error.log
こういう風に ()で囲った方がいいのでしょうか?どう書くのが慣例なのでしょう?
また、 ( )で囲った方がいいなら、その理由は? 質問の締めくくりとして
ご教示宜しくお願い致します。
誰も締めくくりたいなんて思っちゃいない予感
82C8 82BE 82AD 82BD 82C1 82DC
まったくだな
有効なドライブの一覧を表示するコマンドってないですか
fsutil fsinfo drives
290 :
288 :2007/07/28(土) 18:53:48 ID:a/qCxIPC
どうもありがとう
携帯から失礼します超初心者スレとマルチになってしまいますが、質問させてください WindowsXP home editionを使用してるんですが、msconfig→システム構成ユーティリティから「BOOT.INI」にあるタブの「/SAFEBOOT(F)」にチェックを入れてセーフモードを機動したんです。セーフモードコマンドプロントの画面になり、そこから通常の時に戻れません どうすれば元に戻せますでしょうか?
>>291 感だから駄目かもしれないけど。
cd c:\windows
start
コマンドライン上からmsconfigやexplorerを起動するなり、 notepad c:\boot.iniするなり方法は色々あるはず。
295 :
名無し~3.EXE :2007/07/31(火) 16:20:44 ID:8GY6o1TN
Windows98のMS-DOSプロンプトで質問があります。 cd C:\test dir /B /S > C:\WINDOWS\デスクトップ\test cd C:\test2 dir /B /S > C:\WINDOWS\デスクトップ\test2 ↑のようなバッチでC:\testとC:\test2配下のディレクトリ構成を テキストファイルとして保存したいのですが、 C:\test2というフォルダが存在しない場合、 バッチの実行結果では、dir /B /S > C:\WINDOWS\デスクトップ\testの内容を test2のファイルとして残されてしまいます。 C:\test2というフォルダが存在しない場合、0kbのtest2ファイルとして 残す方法を御教示ください。よろしくお願いします。
0Byteのファイルの作り方がわからん if exist C:\test2\nul echo.>C:\WINDOWS\デスクトップ\test2
>>296 ミスッた
if not exist 〜 ね
if exist "c:\test\nul" dir "c:\test" /b /s > test.txt if exist "c:\test2\nul" dir "c:\test2" /b /s > test2.txt Windows98 の dir って処理先指定できないんだっけ?? できなかったら無理だけど。
あ、0byte のファイル作りたいのか...。 else とか () とか使えたっけ?もう分からん。 使えるなら if exist "c:\test\nul" (dir "c:\test" /b /s > test.txt) else (echo.> test.txt) if exist "c:\test2\nul" (dir "c:\test2" /b /s > test2.txt) else (echo.> test2.txt) 使えないなら >298 に↓を追記。 if not exist "c:\test\nul" echo.> test.txt if not exist "c:\test2\nul" echo.> test2.txt
いや echo.> test.txt だと2bytesになるっしょ。 それと else とか () は使えない。
type nul > po.txt
>301 それ少なくともMS-DOS(3.3/5.0/6.2)/Windows95/98/Me/NT4.0/2000/XPでは正解。 他のOSでは確認してないが。
CreateObject ("Scripting.FileSystemObject").CreateTextFile ".\test2.txt",True
俺は copy nul hoge でやってた
>304 そっちは確かNT系のWindowsのみ可能だったはず。
DOS/9x系なら rem>hoge ってのもある。
0バイトのファイルを作る方法って定期的に出てくるよね。 俺の一番のお気に入りは rem>hoge.txt これを知ったのは20年ぐらい前のfj.os.dosあたりだったと思う。 NTだと .>hoge.txt ってのもある。 エラーが出るけどファイルはちゃんと作られてる。 文字数はこれが最小。 エラーが出ない最小はなんだろう?
cd.>fuga.txt 98/2k/Vistaで確認。
XPではダメですか つД`)・゚・。・゚゚・*:.。..。.:*・゚
>308 その手もあったか。XPでもできたよ。俺は>301の方法が最も無難だと思ってるが。
311 :
名無し~3.EXE :2007/08/06(月) 21:13:46 ID:+YTckNXT
20070805.txt 20070804.txt 20070803.txt 上のようなログファイルがあり、 日付が一番古いファイル(20070803.txt)を バッチで削除したいと思ってます。 dir /B /D > file で、ファイルを古い順に 並べられるのですが、全てのファイル名が入ってしまいます。 先頭の1行目だけにファイルにすれば、FOR文で抜き出して 削除できそうだと思うのですが、何か良い方法が無いでしょうか。 環境は、Windows2000とXPです。よろしくお願いします。
@echo off call :sub del "%f%" goto :EOF :sub for /F "usebackq delims=" %%i in (`dir /B /D`) do ( set f=%%~i goto :EOF )
313 :
311 :2007/08/07(火) 22:19:14 ID:mOWz8I7r
>>312 遅くなってすみません。
目的の動作が出来ました。
ありがとうございました!
for /f "delims=" %%i in ('dir /b/a-d/on') do del %%i && goto :eof これだけでいいんでわ…
質問お願いします。 set temp=おはよう set temp2=こんにちは set temp3=さようなら set temp4=%temp%%temp2%%temp3% echo %temp4% このようなバッチを書くと結果が、 おはようこんにちはさようなら ↑のようになります。これを、 おはよう こんにちは さようなら といった風に表示させたいのですが、 変数の中に改行コードを入れる事は可能でしょうか。 \n等をいれてみたのですが、そのまま表示されてしまいました。 また、もし可能だとしたら、変数には何文字くらい 代入が可能でしょうか。
>>315 >変数の中に改行コードを入れる事は可能でしょうか。
set temp=おはよう
set temp2=こんにちは
set temp3=さようなら
set temp4=%temp%^
%temp2%^
%temp3%
echo !temp4!
>変数には何文字くらい代入が可能でしょうか。
XPの場合、変数1つにつき 8192バイト、
全環境変数の合計は変数名、等号を含めて 65536KBまで。
317 :
315 :2007/08/09(木) 00:40:16 ID:YG2BLxw3
>>316 すみません。
XPで試したのですが、うまく行きません。
>>317 つsetlocal enabledelayedexpansion
319 :
名無し~3.EXE :2007/09/06(木) 22:13:52 ID:p7g9huyD
お世話になります。 コマンドプロンプトでヘルプを読むときに、 dir /? 等と打つと、dirのヘルプを読めますが、 全てのマニュアル内容を表示させることは出来るでしょうか? 出来れば、ひとつのファイルにリダイレクトして、 コマンドプロンプトのヘルプとして保存したいと思います。 使用OSは、XPですが98やNT/2000での表示方法も違うようでしたら ご教授頂ければ幸いでございます。 よろしくお願いします。
(for /f "tokens=1" %a in ('help') do %a /?) >help.txt こんな感じのこと? ファイルが長ったらしいし必要なときに必要なコマンドのヘルプだけ参照した方がいいと思うけど…
>>320 そうです!助かりました。ありがとうございます!
C:\WINDOWS\pchealth\helpctr\binaries\HelpCtr.exe /url ms-its:ntcmds.chm::/ntcmds.htm こっちだろ…
start helpctr /url ms-its:ntcmds.chm::/ntcmds.htm または hh ms-its:ntcmds.chm::/ntcmds.htm
BATの質問です。 条件分岐はどの様にやれば宜しいのでしょうか。 具体的には、 メッセージ: ○○を実行しますか?(Y/N) Yの時はラベルAのコマンド群をNの時はBAT終了。 ご教示、よろしくお願いいたします。
>>325 うまくいきました。
ありがとうございました。
WindowsNT/2000などの別売リソースキットに収録されてる CHOICE.EXE (CHOICE.COMじゃない)が そのままXPでも使える。
choice.exeは無償のものがMSからdownloadできる。
チョイっとね♪
330 :
名無し~3.EXE :2007/09/16(日) 21:54:53 ID:3LXuaGLV
リネームに関することで質問です。 ファイル名のデータをエクセル内から取得することは可能でしょうか? 例えば、B2のセルに「hoge」、C4のセルに「hage」と入っているとして、 そのエクセルファイルをバッチファイルにドラッグ&ドロップすると、 「hogehage.xls」とリネームされるようにしたいのです。 リネーム前のファイル名は不定です。 よろしくお願いします。
>>330 無理な気がする。WSHなら出来るかもしれないが。
エクセルファイルがあるんなら、それをテキストファイルに落として、
テキストファイルからリネームさせれば?
それならバッチでもリダイレクト出来るだろう
Set Application=CreateObject("Excel.Application") MsgBox Application.ExecuteExcel4Macro("'C:\Documents and Settings\My Documents\[Book1.xls]sheet1'!R1C1") みたいに
ファイル名を変更の単純作業を命じられて途方に暮れてるんだろな Excelからリストを含んだVBSかなんかを出力させるようにすりゃ良いんだよ
334 :
名無し~3.EXE :2007/09/17(月) 09:56:58 ID:u5TAhrJD
>>330 エクセルからCVSにでも変換すれば何とかなるんじゃ?
ただ、ファイル名にスペースが含まれる場合などは、きちんと対策しておかないと死ぬと思うので要注意。
hoge.txtをmoveするときに目的フォルダに同名ファイルがあるとします。 そのとき、移動するファイル名に-002とかを付加してmoveすることは出来ますか?
if exist でかくにんしれ
>>336 ありがとう。やってみます。
コマンドライン初心者ですけど、頑張ります!
フィル振り分けソフトってろくなのが無いので、バッチファイルが書けるまで頑張ります!
hoge.exe に -foo -bar オプションを付けて いくつものフォルダ(数百個)に分散した大量のファイル(約50万個)を渡したいんですが バッチファイルでファイル名を書いたtxtを勝手に参照してもらう方法は無いでしょうか。 あるいは他にもっと手っ取り早い方法はないでしょうか。
for /f
質問させてください。 FireFoxとかインストールするときに次へ進むボタンとかあるけど batだけで全部インストール処理できますか?
インストーラにそーいうオプションスイッチがあれば可能。 なければ無理。batでボタン押したりは出来ない。wsh使え。
342 :
340 :2007/09/18(火) 22:17:18 ID:VaDU0MRP
>>341 ありがとうございます。
ちょっと調べましたがwshで作ったコードを保存したら.vbsになりますよね。
ということは全てのwindows環境で実行することができませんよね?
できれば.exeとか.batでありませんでしょうか?
何を言っているんだ
344 :
340 :2007/09/18(火) 22:35:51 ID:VaDU0MRP
>>343 ごめんなさい。.vbsって実行できますよね。
勘違いしてたみたいですね。
ありがとうございました。
このスレのこのマターリ感が好きつーか殺伐とした俺漏れの仕事の疲れを癒してくれる。 Pt.2かPt.3の頃から進化しないつーか深化しないと言えばそれまでだけど。 けして悪口じゃなくて本心です。
>>344 >>.vbsって実行できますよね。
できませんよ。
347 :
340 :2007/09/19(水) 09:45:46 ID:+9iiRmg+
>>346 あ、やっぱできませんでしたか。
じゃあやっぱ.batみたいな普通の環境で実行できるやつがいいな。。
wsh以外でインストーラーのボタンを押せるもの何かありますか?
なんでWSHが実行できないの?禁止されてる環境なのか?
>>348 Windows 3.1 とか、Win95(with out IE)とか
そういやWin95のOSR2でもWSHを使える環境と使えない環境を見た覚えがある。
そんな昔のOSは使ってないと思うよ。 普通はvbsは実行できるはず。
95は場合によっては現役だったりするかもしれないけど FireFoxってWin3.1で動くの?
FireFoxはNT4.0ならサポートしてるな。
FTPのコマンドに関する質問です。 会社と家で同じファイルの同期をとり続けるためにFTPのコマンドを使おうとしています。 (やりとりに使うサーバはさくらのレンタルサーバです) 家ではうまく接続でき、問題なくダウンロード、アップロードできるのですが、 会社ではダウンロード、アップロードがうまくいきません。 ブラウザではプロキシの設定をしているので、プロキシの設定が必要なのかと思い、 Windows標準のFTPクライアントでは不可能っぽいので諦めていたのですが、 FFFTPでは導入してすぐにダウンロードできているのでよく原因がわかりません。 詳しい方ご教授お願いします。
>>354 ・FTPコマンド実行時、どの段階でうまく行かなくなるのか
実際に入力しているコマンドとそれによる標準出力を列記
(FTPサーバ名やユーザ名等、個人情報はマスク)
・うまく行かない時に表示されるメッセージと挙動の詳細
まずは、以上について説明して下さい。
「うまくいかない」だけでは回答しようがないのです。
>>355 すみません……。
今家で正確なエラーメッセージの確認はできないです。月曜に確認してきます。
ただ接続はうまくいっていて、
getとputの段階でプロンプトが落ちる、という症状でした。
ログは取っていたのでそこまでわかったのですが、エラー内容までは覚えていません。
今言えるのはここまでです。失礼しました。
月曜は休みだぞ
うちの会社は出勤日だ
452
360 :
名無し~3.EXE :2007/09/23(日) 14:14:04 ID:r/hHw6Mr
こんにちわ。 renコマンドで、サブフォルダの中のファイルも一括で処理することはできますか? ものによっては/sというスイッチをつける物もあるようですが、renではできませんよね?
そうですね。
>>356 会社だとファイヤーウォールの内側なので
FTPのデータ転送コネクション確立のための外部からの接続要求は
ファイアーウォールによって弾かれ接続できない。
従って、内側から接続要求を出す必要がある。
このためにはPASV(パッシブ)モードにして内部から接続要求を出す必要がある。
が、windowsのftpサブコマンドにはpassiveが無いので
(2000までには無かった。たぶんXPやVistaにも無かろうと思う)
もっと高機能なftpクライアントが必要。
なお、ftpコマンドでダメでもExplorerやInternet ExplorerではPASVモードを サポートしてるのでアクセス可能
>>360 拡張子をlog→txtにするなら
FOR /F "DELIMS=" %A IN ('DIR "E:\hoge hoge\*.log"/B /S /A-D') DO REN "%A" "*.txt"
こんな感じかな
365 :
名無し~3.EXE :2007/09/24(月) 06:50:04 ID:AiJMwWuW
>>364 できました!コマンドラインも奥深いわ。めっちゃありがとう。
>>362 今日会社でその結論にたどり着きました。
諦めてFFFTPでやりとりしようと思います。
家では自動化できるだけマシと思いつつ……。
FFFTPでも簡単なことならコマンドラインで指定できるけどね。 ncftpを使ったほうがいいかも。
ファイル名にAとBが含まれているのを選択してmoveしたいのですが、どうしたらいいのでしょうか? *A*B*と*B*A*と書く方法しか知らないので、ご教授をお願いします。
この勢いで次バージョンあたりでキャラクタコンソールのみのインストールオプションも付けてほしい。
>>368 AとBはそれぞれ一個ずつなのか?それとも重複してもいいのか?例 aaabbaaa.txt
また、aとbは文字通りの一文字なのか?それともwordなのか?
まあ、forとfindstrを組み合わせて(必要ならパイプでデータ受け渡し)、正規表現でヒットさせろよ
>>372 ありがとうございます。重複してもいいです。
具体的にはファイル名に「福田康夫」と「国会」の2つを順不同で含むファイルをC:\福田康夫\国会へ移動したいのです。
名前が100人分、案件が各20件で計2000の振り分け条件で振り分けたいのですが、フリーソフトを使うとCPU使用率が100%に張り付くので
パッチ処理にトライしている次第です。
ご教授の方法でトライします。結果を報告できるようがんばります。
ほんの一例 dir/b | findstr 福田康夫 | findstr 国会 >tmp.txt for /f "delims=" %%I in ('type tmp.txt') do move "%%~I" c:\福田康夫\国会 del tmp.txt
375 :
373 :2007/09/30(日) 05:04:24 ID:/1yS/Qr0
>>374 今、酔っぱらっていますが、すっげー感激。
明日、素面になったらやってみます。
マジ、感激してます。ありがとう御座います。
HDD内のデーターに、操作するとCRC冗長エラー、を出すファイルがあったので そのドライブに対して、CHKDSK ドライブ: /R をかけたら 昨夜から10時間以上やって29%しか進みせん タスクマネージャー/プロセスでchkdsk.exeが仕事をしている様子も全然なし。(0%) 1時間前には6%だったので完全には死んではいないと思うのですが…。 (6%で長時間停止->動き出す->29%でまた停止) これはもうドライブが死亡間近と考えて新しい外付けにデータを退避させることも考えているのですが、 現在やっているCHKDSK と コマンドプロンプトを中断させるのは危険でしょうか?
いつ中断してもいいよ
hosyu
今日初めて知ったこと C:\>set /a 7*7 49 C:\>_ 変数名書かなければ、計算出来たのか。
C:\>set /a x=7*7 49
バッチの中だと出ないのー
変数名書こうと書くまいと プロンプトからなら答えが出るし バッチからだと出ない
383 :
名無し~3.EXE :2007/11/07(水) 14:38:44 ID:TznxkJFx
質問させてください。 ドライブレターの変更ってどうやったらよいでしょうか? ハードディスクのレターがAになってるので、Cに変えようと思ったのですが、 コマンドがわからず・・・
カレントディレクトリを変更したいのか、 システム的にドライブレターを変更したいのか、 どっち? カレントディレクトリの変更ならこのスレ的だろうけど、 システム的にドライブレターを変更したいならここじゃないと思うよ
>>383 HDDがAってどんな環境だ。
PC-9821にWin98でも入れてんのなら、基本的に再インストールしかないと思うよ。
システムの入ったドライブは簡単には移動できないから。
Aドライブがハードディスクなら十中八九PC-9821だろ。
387 :
名無し~3.EXE :2007/11/07(水) 18:10:09 ID:TznxkJFx
そうす。 9821す。 HDDをCにしたいって事です。 でもドライブレター変更て、コマンドではできなかったでしたっけ? なんか、駄目くさい気がしてきました・・・
>>387 インスコ時、ATオプションをつけるとHDDがCになったような希ガス。
外部コマンドのSUBSTでやりくりするとか。
うろ覚えなのでゲイツにでも聞いてくれ。
XPなら、コマンドでドライブレターの変更はできるが それでもシステム、ブート、ページングのボリュームのドライブレターは変更できないよ
物持ち良いな、98かぁ
>>388 ちょっとその方法試してみます。
なんかダメポい気もするので、駄目だったらおとなしくAで使っときます(^^
HDDをCにするとA,Bが当然FDDになるんだけど 1FDDの場合間違ってBにアクセスするとブラックスクリーンになるんだよね〜 害はないけど。
2003のコマンドプロンプトで入力途中ついTabキー押したら ファイル名が補完されて驚いたよ なんだいLinuxに負けず劣らず便利じゃねぇか ついでに dir の代わりに ls で ディレクトリ内容も表示してくれるといいなぁ
doskey ls=dir
>>393 doskey ls=dir /w $*
>>393 powershell入れたらいいと思うよ
>>394-396 ありがとー
lsでディレクトリが表示されるのは非常に快適だ
わかっちゃいるんだがつい手がlsと打ってしまうからね
Powershellってのもなかなか良さそうだ
今度時間のある時に入れてみよう
399 :
名無し~3.EXE :2007/11/29(木) 20:34:39 ID:9IgcnDtW
エクセルのファイルを右クリックすると印刷というメニューがでて それを選択すると印刷ができますが、 同様の挙動をDOSコマンドから得ることはできまつか?
rundll32.exe MSHTML.DLL,PrintHTML エクセルのファイル
スクリプト使わずにバッチファイルでできんのか?
バッチファイルってバッチスクリプトを記述したファイルだと思ってたんだけど違うんですね
「バッチスクリプト」って単語を20年パソコン使ってきて初めて聞いた
ヘルプには以下のようにある。 >バッチ プログラムまたはスクリプトとも呼ばれるバッチ ファイルを使用すると、 >簡単にルーチン作業または繰り返し作業を行うことができます。 >バッチ ファイルとは、純粋なテキスト ファイルで、1 つ以上のコマンドが含まれており、 >ファイル名拡張子として .bat または .cmd が付いています。 >コマンド プロンプトでそのファイル名を入力すると、Cmd.exe によって >ファイルに記述されている順番でコマンドが実行されます。 >バッチ ファイルには、任意のコマンドを記述できます。for、goto、if などの特定のコマンドを使用すると、 >バッチ ファイル内のコマンドを条件に応じて実行できます。 >たとえば、if コマンドでは、条件の結果に基づいてコマンドが実行されます。 >そのほかのコマンドを使って、入出力を制御したり、ほかのバッチ ファイルを呼び出すこともできます。 >ほとんどのアプリケーションが返す標準エラー コードは、エラーが発生していない場合は 0、 >エラーが発生した場合は 1 (またはそれ以上の値) です。 >特定のエラー コードの意味を調べるには、アプリケーションのヘルプ ドキュメントを参照してください。
確かにあまり使わないけど、解説本等では目にするよ。 「バッチスクリプト」って。 そもそもスクリプトじゃ何のスクリプトか分からんだろ。
利用可能なコマンド一覧を表示するコマンド無いですか?
ん?helpじゃいかんのか? それともパスの通ってるところにある全実行ファイルってこと?
某むゎかふぃーのサポート(しかも法人相手の有償サポ)は 「ウィルスが検知された時にバッチプログラムを実行する機能」が 正常にバッチを実行しない旨、問い合わせをしたら 「EXEファイルしかサポートしてません」とホザきやがったよ。
WindowsはEXEファイルしか実行できないんだからそれで十分だろ
てゆーか 「ウィルスが検知された時にバッチプログラムを実行する機能」 と銘打ってるんなら、ダメだろw動かなきゃ
413 :
名無し~3.EXE :2007/12/11(火) 18:01:11 ID:m8423oGD
Windows XPで
cmd.exeを実行したときのコンソールウィンドウの編集モードを
デフォルトで簡易編集モードに設定する方法はないのでしょうか?
ショートカットや、同じ名称のウィンドウなら個別で設定できるのですが
そうじゃなく常に簡易編集モードにする方法が知りたいです。
参考(役に立たなかった説明)
http://support.microsoft.com/kb/282301/ja WinXP ではコマンド プロンプトの簡易編集モードが既定で無効
レジストリに設定しておけばいい [HKEY_CURRENT_USER\Console] "QuickEdit"=dword:00000001
415 :
名無し~3.EXE :2007/12/11(火) 21:40:52 ID:m8423oGD
>>414 お!すばらしいです。
既にカスタマイズしたパラメータも下のキーにあるので
これで上書きすればよいですね
E:\WORK\hoge>dir /b /o:n hoga.txt hoge.txt ho'''''ge.txt hogee.txt ho-----gee.txt hogo.txt なにやら不思議なソート結果に…何これ?
417 :
名無し~3.EXE :2007/12/15(土) 20:32:48 ID:J3SQ8eGY
こんにちは、質問させてください。 DOSコマンドでアプリケーションを終了したいのですが、 TASKKILLコマンドを使用して、 taskkill/im realplay.exe/f/t とやっても、「'taskkill'は内部コマンドまたは外部コマンド、操作可能な・・・」 といったメッセージが返ってきます。 コマンドの問題箇所、もしくは他のコマンドがありましたら、 教えてくださいませ、よろしくおねがいいたします。
taskkill /?
OSは?2000とかならtaskkillはないよ サポート ツールにkillがある
XP Homeにもない。
421 :
名無し~3.EXE :2007/12/15(土) 21:21:03 ID:Uqxi5nec
OSはXP HOMEです・・・ サポートツールってMICROSOFTのサイトですか?
exitをSysExにして送信すればよい
tskill/?
425 :
名無し~3.EXE :2007/12/15(土) 23:11:01 ID:L+mv8qPX
>>422 なるほど、こんなのあるんですね、ありがとうございました!!
2000 Support Toolsのkill.exeやtlist.exはMSからダウンロードできない?
出来る
429 :
名無し~3.EXE :2007/12/26(水) 00:33:00 ID:rbjdjGQz
\aaaa\bbbb\ ↓ \aaaa\bbbb のような最後の\だけ取ることってどうやれば出来ますか?
if %var:~-1% equ \ set var=%var:~0,-1% だけどルート(C:\)の場合とかあるから、無条件にとるのは止めたほうがいいぞ。 どっちかというと逆に必ず\で終わるようにするロジックに変えたほうがいい。 if %var:~-1% neq \ (set var=%var%\)
しかし誘導厨とはウザいものだな
向こうのスレとの住みわけ範囲がよく分からない 何話したいんだろうな、向こうは forとifのオプションの話しか出来ないような気も
んなこたぁ無い 住み分けとかじゃなく、単に捉え方の差だと思う 本来、両方で存在してても全く問題ないと思うんだが
うん、まぁ住民の大半が被ってるとは思うんだけど 外部コマンドに頼る、又は実用的なものはココ 文法的なこと、ロジカルな問題がアッチ、ってとらえ方であってる?
いや。 別に誘導する必要はまったく無い。 区分けも不要。 質問は各個撃破でおk
436 :
名無し~3.EXE :2007/12/27(木) 11:03:08 ID:X9+WkMgT
ごみ箱にファイルがあるかないかを聞きたいのですが XPで隠しファイルを表示にしてもrecycleフォルダがありません。 レジストリから取得でもなんでもいいのですが どうやったらいいのでしょうか。
438 :
名無し~3.EXE :2007/12/27(木) 15:19:09 ID:X9+WkMgT
>>437 ありがとうございます。
batファイルというかバッチコマンドだけというのは
無理そうですね・・・。
つぎ誘導されてきたらそのまま誘導し返そうか
やめとけ。荒れるだけ
基地害が誘導してきたものはそのまま誘導し返してok
みんな、スルー力を高めようぜ
向こうってどのスレ?好奇心で覗きにいきたんだけど。
どっちのスレで何聞いてもいいと思うんだが。 状況知らない人に説明すると、向こうのスレには基地外が 一人いて(こっちも見てるはず?)なんでもかんでも、こっちに 誘導しようとしている。
447 :
名無し~3.EXE :2008/01/18(金) 23:20:48 ID:j9d+PS7f
「ブリーフケース」を作ろうとしてレジストリで .bfc という拡張子のところの ShellNewのCommandが %SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\syncui.dll,Briefcase_Create %2!d! %1 であることから、次のようなコマンド C:\WINDOWS\system32\rundll32.exe C:\WINDOWS\system32\syncui.dll,Briefcase_Create "D:\Tmp" ブリーフケース" をコマンドプロンプトから入れてみましたが、メッセージなどは出ませんでしたが、 ブリーフケースは作成されませんでした。このコマンドラインをどのように修正すれ ばいいでしょう?よろしくお願いします。
↑なんかデスクトップにブリーフケースが出来たよ
449 :
名無し~3.EXE :2008/01/19(土) 08:24:46 ID:/uF4QVUs
>>448 やってみてくださり、ありがとうございました。いまわたしも気がつきました。
確かにデスクトップにできてました。なんで D:\Tmp にできないのか・・・・・、
どこをどう直せばいいのでしょう??
C:\WINDOWS\system32\rundll32.exe C:\WINDOWS\system32\syncui.dll,Briefcase_Create 1 C:\Documents and Settings\user\デスクトップ\新規ブリーフケース
451 :
名無し~3.EXE :2008/01/19(土) 09:54:47 ID:/uF4QVUs
>>450 おお、この 1 が必要だったんですね!わかりました。ありがとうございました!!
パンツ入れかよ
>452 今の人はブリーフケース知らんかもな。 確かWin98辺りまではあったよ。そういう機能が。
95〜Vistaまで、すべて入ってるような気がするが・・・・
俺は存在自体忘れてたがな
名前は知ってるけど使い方は知らん
いつのまにかにclipなんてコマンドが加わってるんだね
Win98以前は初期状態のデスクトップにブリーフケースが置かれていたんだよ。 2000になって置かれなくなった。 今でも新規作成から作ることはできるけど、98以降は影が薄くなったのは確か。
昔、おじいさんがゲイツかなんかに 「わしは何年もつかっとるが未だにブリーフケースの使い道がワカランのじゃ」 みたいに言うジョークがあったな 探してみたけど見つからない、コピペじゃないのかな
Vista で、Linux の su や sudo に当たるコマンドはありますか? コマンドプロンプトで操作している時に、一時的に管理者としてコマンドを実行したいのですが…
>>459 Vistaでも相変わらず作れるしな。誰も使わないのに。
>463 ありがとうございます。 でもこのコマンド、びみょ〜に使い勝手悪いなぁ… 利用して、自分好みにバッチ組んでみます。
465 :
名無し~3.EXE :2008/01/28(月) 18:20:29 ID:a60OcUKA
--- rem @echo off rem Filename: inFiles.bat rem ドラッグandドロップで 特定ファイルのディレクトリ-リストを 取得する 目論見. DIR /N %~DP1%~NX1 >%~DP1dir-%~NX1.txt --- これを 作業中フォルダに持ち込み 使用してます. ドロップファイルなしでも 思惑通り 作業中フォルダ(バッチ本体があるので) フォルダ全部のリストを取れる ショートカット"inFiles.LIK"を作成し 作業中フォルダに持ち込み ドロップファイルなしで 使うと バッチ本体がある場所のディレクトリを バッチ本体がある場所に 作成する. 当然といえば 当然で "そういう仕様だ" と言われれば それまでなんですが ショートカット使用でも バッチ本体を置いた時 と同様の 動作をする方法って ありますか?
>>465 何がしたいのか、よくわからないんだけど、
具体的に、どんな場面で便利になるの?
>これを 作業中フォルダに持ち込み 使用してます. >ドロップファイルなしでも 思惑通り 作業中フォルダ(バッチ本体があるので) >フォルダ全部のリストを取れる そんなはずないけど >ショートカット"inFiles.LIK"を作成し 作業中フォルダに持ち込み >ドロップファイルなしで 使うと バッチ本体がある場所のディレクトリを >バッチ本体がある場所に 作成する. そんなはずないけど なので >ショートカット使用でも >バッチ本体を置いた時 と同様の 動作をする方法って ありますか? 意味ない
468 :
名無し~3.EXE :2008/01/28(月) 19:01:55 ID:a60OcUKA
>>466 >具体的に、どんな場面で便利になるの?
ん......ン 別段 便利には なりませんねw
でも 実行ファイルの ショートカットが 本体と違う挙動を するのって 気になりません?
エラーを悪用してるから 大きなことは 云えませんがw
>でも 実行ファイルの ショートカットが 本体と違う挙動を するのって 気になりません? そんなはずないけど
98の質問してよかですか? スクリプトを起動するバッチファイルがあります。 スクリプトはjavascriptで作ってあり、標準入力を扱いたいので、インタプリタはcscriptを使っております。 こんな、奴でつ ---------- hoge.bat start ---------- @echo off cscript %Windir%\hogehoge.js //Nologo %1 %2 %3 %4 ---------- hoge.bat end ----------- で、ですね。 これに標準入力からデータ渡すとなぜかインタプリタがwscriptに変わってしまいます。 こんな感じ。 c:>c:\windows\hoge.bat <input.txt (このあと、hogehoge.jsがwscript経由で起動する) 原因をご存知の方いらっしゃるでしょうか。 ちなみに、この現象はwindows98の時のみ起き、windowsXPでは起こりません。
ショートカットの作業フォルダに%0
470です。 なんか、色々違ってました。スマン ---------- hoge.bat start ---------- @echo off cscript //Nologo %Windir%\hogehoge.js %1 %2 %3 %4 ---------- hoge.bat end ----------- こうだ。 そして、wscriptが起動すんじゃなくて パラメタが渡っていないようだ。 c:>c:\windows\hoge.bat /a /b <input.txt '/a' '/b'がhogehoge.jsに届いていない。 バッチファイルの中でechoすると渡ってる風なんだけどなぁ。
command /c c:\windows\hoge.bat /a /b <input.txt
475 :
名無し~3.EXE :2008/01/30(水) 16:21:48 ID:KYI6wfbS
スレ違いかも知れませんが、コマンドプロンプトで無線LANの再設定?について詳しい方いませんか?
>>475 ipconfig /renew とかの話?
無線パラメータの設定をコマンドラインでできるアダプタなんてあるのか?
477 :
名無し~3.EXE :2008/01/30(水) 20:01:10 ID:KYI6wfbS
>>476 詳しくないんで何ともなんですけど、先月無線LANでPCを使用していた時ブレーカーが落ちて、ルーターの電源が切れて無線LANが使えなくなったんです。
それで色々試せど復帰しなくて、プロバイダーのサポセンに電話したんですけど長々と待たされて、繋がると私が色々試した事を2〜3回再度させられて、結局コマンドプロンプトで一度通信をリセットする?プログラムを指示してもらって復帰したんです。
でも先週また同じトラブルがあって、またサポセンに電話するのも億劫で・・・と言う感じです。
長文すみません。
質問です コマンドプロンプトのrename(ren)で aaa123.txt bbb123.txt ccc123.txt の三つのファイルを 123を変えないまま xxx123.txt yyy123.txt zzz123.txt 一度で変更するにはどう打てばいいでしょうか?
ren aaa123.txt xxx123.txt|ren bbb123.txt yyy123.txt|ren ccc123.txt zzz123.txt
481 :
名無し~3.EXE :2008/01/31(木) 10:58:16 ID:Zu1cJ4hG
>>474 遅レスすまそ。
command /c で出来た。アリガトン
command.comが関係しとるとは思わなんだ。
NT系列では必要の無い操作だから
wowの仕様が微妙に違うんだな。
勉強になったよ。
9xなら JS2COM 使えば?
485 :
名無し~3.EXE :2008/02/07(木) 01:18:24 ID:JJWunJvn
1つの親フォルダの中に数百個のファイルと、 それと同名のフォルダの組が並列に入っています。 これらのファイルを、その同名のフォルダに移動するには どうしたらよいでしょうか? aaa.txt bbb.txt ccc.txt ..... aaa.folder bbb.folder ccc.folder..... がありaaa.txtをaaa.folderの中へ bbb.txtをbbb.folderの中へという感じで全て移動したいんです。 あと関係ないんですけど mklink /Dとmklink /Jは何が違うんですか?
for/?
バッチファイルを作ってそれに対象のファイルをD&Dすることで作業を半自動化しています。 でっすが困ったことにバッチファイルの中に%1を記述して、そこにD&Dしたファイルへの 絶対パスを格納しようとしてもその中に全角スペースがあると正常に動作しないのです。例えば C:\temp\aabbcc.txt みたいなファイルをD&Dする分には問題ないのですが C:\temp\aa bb cc.txt みたいなファイルをD&DするとC:\temp\aaまでが第一引数 そのあとのbbとcc.txtはそれぞれ第二、第三引数として扱われてしまうのです。 コマンドプロンプトに直接記述したときは間に全角スペースがあっても全体で一つのパスとして 扱われますし、バッチファイル内の記述するときに引数を""で囲んでも解決しませんでした。 どうすればよろしいでしょうか?
うそだろ、そんなわけない
ごめん、ほんとだ。ドロップハンドラの障害だから、 VBSFileのドロップハンドラをbatfileに指定してやればいいよ。
>>489 自分もそう思いたいところなんですが・・・
@echo off
echo %1
echo %~1
echo "%1"
pause
試しに上記の内容の.batファイルを作ってそこに前述の
C:\temp\aa bb cc.txtをD&Dしてみたところ、表示結果が
C:\temp\aa
C:\temp\aa
"C:\temp\aa"
続行するには何かキーを押してください . . .
でした、友人にもお願いして試してみてもらったところ同じ状況みたいです@XP SP2
>>490 入れ違いになってしまいましたが、ありがとうございます。
これは一種のバグ・・・でいいんでしょうか?
問題は自分がVBSのことが全くわからないことですね orz
>問題は自分がVBSのことが全くわからないことですね orz VBSはかんけーねー VBSFileのドロップハンドラを借用するだけ あるいは、回避策 c:\tempをc:\temp folderにすれば?
ドロップハンドラはかんけーねーみたい cmd.exeの引数分離の障害仕様だね
>>493-494 どうもありがとうございます。ドロップパンドラはググっても理解できません
でしたが、これで踏ん切りがついたので回避策を使うことにします。
仕様か、なんて全てを包み込むような包容力のある言葉なんd(ry
Vistaのコマンドプロンプトに以前のようにファイルをドロップしたいのですが ウラワザとかありませんか?
>>497 具体的にどのセキュリティ強化が原因で使えなくなってるかわかりますか?
「指が滑った時」対策だったら泣ける。
てかそんなこと出来たのか。
無線LANをつかっているのですがしょっちゅう回線が切れるので困ってます。
ネットワークの修復をするとつながるようになるので、
>>217 を参考に以下の修復バッチファイルを作ったのですが、
これをファイル出力させずに行うことはできますか?
---IP_recovery.bat-----------------------
ping 192.168.11.1 -n 1 > C:\b.txt
for /f "SKIP=3" %%A in (C:\b.txt) do if %%A NEQ Destination (echo %%A) else (
shut
ping localhost -n 5
connect
ping localhost -n 15
ipconfig /release
ipconfig /renew
arp -d *
nbtstat -R
nbtstat -RR
ipconfig /flushdns
ipconfig /registerdns)
del C:\b.txt
--------------------------------------
回線が切れている時のb.txt--------------- Pinging 192.168.11.1 with 32 bytes of data: Destination host unreachable. Ping statistics for 192.168.11.1: Packets: Sent = 5, Received = 0, Lost = 5 (100% loss), --------------------------------------
XPならErrorLevelで。
for /f "SKIP=3" %%A in ('ping 192.168.11.1 -n 1 ') do if %%A NEQ Destination (echo %%A) else (
504 :
500 :2008/03/02(日) 01:54:27 ID:W3Xs2/Nf
>>502-503 思ったように動かすことができました。
ありがとうございます。
情報を元にネットで調べて、上2行を以下に変えたら動作がすっきりしました。
ping 192.168.11.1 -n 1 | find "Destination host unreachable"
IF ERRORLEVEL 1 GOTO eine
IF ERRORLEVEL 0 GOTO Nutteloos
505 :
名無し~3.EXE :2008/03/03(月) 22:32:53 ID:uMn3e7q3
質問があります。 set n=1 set a%n%=5 とするとa1という変数に5を代入できますよね? でもif文でa%n%と値を比較しようとすると上手くいきません ifで比較する前に set /a hikaku=a%n% とやって if %hikaku%==5 echo sex これは通るのですが 何か馬鹿っぽいですが他によい方法はありませんか? /iオプションを試してみてもうまくいきません…
つ 遅延環境変数
できました。感動です 理屈はよくわからないですが大括弧小括弧みたいなイメージでいいんですか とりあえずバッチでオセロ作るのを目標にがんばっています
つ遅延展開
>>507 > 大括弧小括弧みたいなイメージ
全然違う。
即時展開される変数は、バッチファイルを読み込んだ時点で置換されてるので
実行時は変数ではなく定数になっている。
ん〜 たとえばA%n%という抽象的な変数に 具体的にn=1,2,3… と繰り返し値を与えて A1,A2,A3…という変数は作れるし それぞれに値もセットできます。遅延設定なしで。 なのでバッチを読み込んだ時点で云々というのは腑に落ちないんですが。
1行実行するごとにバッチファイルを読み込みなおしてるんだよ。 だから自己書き換え型のbatも作れる。
遅延展開を使わずに if A%n%==6 echo six てできるか?
513 :
名無し~3.EXE :2008/03/04(火) 10:52:48 ID:oHAbhod6
しへいのいんさつははんざいですよ
普通に印刷できちゃったんだけど
>>513 すばらしい。新種のソーシャルウイルスだな
できるのとやってはいけないのは別・・・ コピー機やオフセット印刷機はプロテクトがあって出来ないらしいけど。
518 :
名無し~3.EXE :2008/03/08(土) 13:02:22 ID:t1Hf5Bsj
コマンドプロンプトで押したキーをそのまま取得する方法はないですよね? PAUSEで押したキーを変数にセットするような。
set /p AAA=なんか入力
通りすがりです。 set にオプションあったのかあ。勉強になりました。
すいません set /p オプションは当然ながら使い倒しているわけですが 毎回エンター押さないといけないじゃないですか? PAUSEはエンター押さなくても先に進むから PAUSEで(なくても良いが)押したキーを取得する方法があるのかなってことです でもなさげですね
choice.exeを使え
>>517 線画で肖像とかがあったりすると誤認することがあるらしいな
524 :
名無し~3.EXE :2008/03/12(水) 20:36:34 ID:ea+zIKS9
すごく初歩的な質問なのですが set wao=wa o if %wao%==%wao% echo wao って設定するとスペースが邪魔をしてエラーになりますが この手のエラーを出さないための方針としては 何が一番良いんでしょうか。 スペースを""ではさむと回避できるのですが 根本的な解決になっていないような気がして…
>>513 何が起きるの?
プリンタないから確認できん。
set wao=wa^ o if "%wao%"=="%wao%" echo wao
>527 ありがとうございます… これでまた頑張れます
setlocal enabledelayedexpansion set wao=wa o if !wao!==!wao! echo wao
パイプで渡された文字列を環境変数にSETするバッチを書くことって可能? ECHO HOGE | XSET.BAT で%XSET%にHOGEが入るような。 もしくはそういう補助ツールってあります?ぐぐっても見つからんかった。 結構よくやる処理なので、手軽に使えるようにコマンド化できればな、と。
for /f %%x in ('more') do set xset=%%x
>531 ありがとう。 試しにCMD.EXEからECHO HOGE | XSET.BATをやってみたところ SET XSET=HOGEは実行されるけど、バッチから戻ってくるときに %XSET%の内容が消去(初期化?)されちゃってるみたいで ECHO %XSET%しても%XSET%と表示される。 単にSET=HOGEとだけ書いたバッチをCMD.EXE上から実行した場合は 戻ってきても保持されてるんだけど。 なんでだ?? よう分からん…。
パイプの前後はそれぞれ子プロセスで実行される
for /f %%x in ('ECHO HOGE') do set xset=%%x
>533 つまりバッチで>530を実現するのは無理ってことですか? >534 530が出来ればバッチの中でそれやらなくても良いのにな ってのがスタートだったので。
>もしくはそういう補助ツールってあります?ぐぐっても見つからんかった。 それは子プロセスで実行される
すいません、行き詰ってしまったので助けてください。ワイルドカードを使って 指定ディレクトリ以下から条件に合致したファイル名を選び出し、それを 環境変数にセットするという方法まではわかりました。 例) for /f "delims=" %%A in ('dir /b "C:\temp\test AAC PID * DELAY *ms.aac"') do ( set aac_audio_source="C:\temp\%%A" ) これを一歩進めて、ディレクトリから選び出したファイル名の中のさらに 一部分の文字列だけを選び出して環境変数にセットしたいのです。 具体的には上記の例のうち二番目のワイルドカード、msの直前にくる文字列です。 この部分はDGIndexという動画関係ソフトによって出力されたファイルのうち、音声のファイルが 映像に対してどれだけの遅延をしているかを示しているものなのですが 当然DGIndexの処理が完了するまでこの値はわかりません。 (それなりに時間がかかるのでバッチの最初の段階で処理させ、その後上記のディレクトリ検索を行う) 実際に出力されたファイルの当該箇所には三桁以下の半角英数が書かれています、加えて その数字の前には"-"(マイナス半角)がついているケースとそうでないケースがあります。 例) -254 112 ただし半角二桁の数字は見たことがあるのですが、半角一桁や逆に半角四桁以上 が実際にファイルに書き加えられることがあるのかは未確認のためわかりません。 こうのような操作はバッチファイルで完結することは可能でしょうか?
書き忘れましたが・・・もしDGIndexに"test"という名前のファイルを入力した場合 それによって出力されるのが上で例に挙げたファイル名の"test AAC PID * DELAY *ms.aac"です。 つまり"AAC PID * DELAY *ms.aac"の部分がDGIndexによって元のファイル名に追加される 部分であり、ここはワイルドカードで代替している箇所を除けば固定です。
set/?
>>538 "delims="とは区切りなしで「test AAC PID * DELAY *ms.aac」全部を%Aに入れることを意味する。
バラバラで入れたければ区切り文字を設定してトークンで必要なものだけ取り出す。
for /? をちゃんと読むべし。
すいません、非常-に遅くなりましたが
>>537-538 です。
>>539-540 目を通してみたのですが、delims=で扱えるのは単一の文字だけですよね。
文字列が扱えるのであればDELAY とms.aacを指定してtoken=2とかに
してやればよさそうですが、なにぶんファイル名が変動するのでそうもいかないようです。
じゃぁsetの方で制御しようと考えた場合、DELAY とms.aacの間の文字数が
固定であれば%PATH:~-10%のような後ろから文字数をカウントしていって
抜き出し、さらにもう一度その抜き出した文字列を%PATH:~0,4%のように頭から
カウントして抜きだせばいいのですが、前述のようにこの抜き出したい文字列は
場合によって多少文字数が変動します。
理想を言えば、「"DELAY "と"ms.aac"の間に挟まれた文字列」という条件で
抜き出せるのが一番いいのですけれども・・・
>>541 1文字ずつ切り出して比較すりゃいいじゃん。
要点を2行くらいで言えない?
"test AAC PID * DELAY *ms.aac"(testと*は変動)から *(-を含む数字,桁数変動)を抜き出して環境変数にsetしたい。
>539な気がする。
*内にmが無いならスペースとmを区切り文字にして4番と6番をゲットすればいい。
testが空白やmを含まないとは限らないと思うよ。 >537で"test AAC PID * DELAY *ms.aac"は既に %aac_audio_source%に取得できてるわけだから set aac_audio_source=%aac_audio_source:*DELAY =% set aac_audio_source=%aac_audio_source:ms.aac=% とかやって削ること考えた方が良いんじゃないかな。 これもtestがDELAY を含んでたらアウトだけど。
こういうのはWSH使って正規表現で一発でやりゃいいのによ。
これにて一件落着
いろいろとレスありがとうございます、要点としては
>>544 >>547 の通りです。
>>547 氏の方法は良さそうですね。testの部分は実際の運用では録画の
番組名になるのでWin上でファイル名に使える文字は何でも入る可能性が
ありますが、DELAYが番組名に使われることはまず無いので問題ないんでしょう。
自分も*に入るのが4文字以下だと仮定して
set aac_audio_source=%aac_audio_source:~-14%
としたあと"tokens=2 delims=m "という方法も考えましたが
>>547 の方が明らかにスマートでした
>>548-549 もうバッチで一千行以上書いてしまったので今更後には引けないというw
>もうバッチで一千行以上書いてしまったので今更後には引けないというw 逆だな。バッチで一千行以上も書くようなら、やめたほうがいいな。
俺もWSHなりで書き直した方がいいと思うぞ。千行が百行になったりしてな。 …さすがにそれはないか? 数百にはなりそうだが。
>544で2行でまとめられる内容を>537-538に渡って延々と 書き続けてるくらいだからバッチでも数百行にできるんじゃねーの?w
情報小出しにされるより一千倍マシ
具体的に何がしたいか?を書けば話題に飢えたこのスレの住人なら自分で作りそうな。
>具体的に何がしたいか?を書けば って何千行にもなりそうな
可愛い女の子とセクースしたいが自分じゃ無理だ
bashでゆうとこの、`cmd 〜〜` に値するコマンド若しくは表記のしかたはありますか? 例 bash # rm -f `cat /var/tmp/delete_files.txt` --> delete_filesに記載されているfileをまとめて削除。 いや、別にこれは例えでなんで特に意味がありませんが、 やりたいことは、二つ目の(``に囲まれた)cmdの戻り値を、一つ目のコマンドに引数として渡したいです。
そのうち900行はコメントだったりして
>558 for /? 過去ログに山ほど例が載ってる。
561 :
名無し~3.EXE :2008/03/24(月) 04:01:30 ID:P1cfgm/y
>>560 ありがとうございます。一応希望のことはできました。
戻り値が一つでも、FORループ使わないといけないんですね。
話は変わりますが、cmd.exeで、Unixのシグナル `kill 〜`に相当するcmdは、
’taskkill’以外には無いんでしょうか?
ググってみたり、msnってみたりしたんですが、「Win32APIはシグナルを提供してない」
みたいな記述を見つけたんですが・・・。
それでも、サービスに登録されているbackgrundなサーバーアプリを
net stop 〜 で終了シグナルを送ってるんで、できそうなんですが・・。
1つ答えると、また別の質問をする、厨の典型的パターンだな 情報小出しにするなよ。WMIでも使っとけ。
563 :
名無し~3.EXE :2008/03/24(月) 14:21:07 ID:WUdOBBSC
XP-Homeで起動コマンドを利用したいのですがうまく動作しません。 以下のどちらもやりましたがまったく何も起こりませんでした。 Homeでは利用出来ないコマンドなんでしょうか? start ×××.exe start "C:\Program Files\×××\×××.exe"
564 :
名無し~3.EXE :2008/03/24(月) 14:53:08 ID:WUdOBBSC
書き忘れてましたので追加します。 EXEファイルのあるフォルダ内にバッチファイルを置いてクリックすると起動します。 でもデスクトップに置いてクリックするとダメなようです。 一つだけでなく複数のEXEファイルを起動したいのですが、どのように書けば良いのでしょうか?
>>563 start /?
特に、""で囲った1つ目が何を意味することになるか良く考えること。
>563 前者は、カレントディレクトリかパスの通ったディレクトリに×××.exeが無いと動かない。 後者はタイトルと認識されてしまうので start "" "C:\〜\×××.exe" と書いた方が良さげ。
start/?
568 :
563 :2008/03/24(月) 18:27:25 ID:GUB5eIlQ
>>565-567 うまく起動しました。
本当にありがとうございました。
やっぱこっちで聞いたのは正解でした。m(_ _)m
>568 それ、向こうの普通の住人に軽く失礼だよ。
>>569 あそこのスレ覗いてみたら、酷いからw
まあ言われて当然だけどな
で、そのスレとはどこ?
あそこはリアル精神障害者の粘着がいて なんでもかんでもここに誘導しようとするのな
>>571 スレっていうか板だけどな。
ム板バッチファイルスレ。
好きでキチガイの相手してるワケじゃないんだがなぁ…。 バッチ以外の話は一切誘導しないのに、バッチの話が始まると 必ず、パソコンの使い方はWin板のコマンドスレへ、と誘導する。
>>561 net stopが裏でやっていることとUnixシグナルの仕組みは別物。
XP SP2 の call で exe も何でも実行できるのは仕様ですか? 2000でも同じかな…
577 :
名無し~3.EXE :2008/03/28(金) 20:48:29 ID:+6KAMnBD
exe は実行できるが、何でも実行できるわけないだろ
579 :
名無し~3.EXE :2008/03/29(土) 02:13:39 ID:DDcV0gzf
「何でも」にも限度はあると思うが、 ”関連付け”されたファイルなら、それこそ「何でも」実行できる。 たとえば、txt ファイルはメモ帳や他のエディタに関連付けされてるから、 下記のコードも問題なく実行できる。 ------------ call unko.txt ------------ さらに、↓でもOK。 ------------ unko.txt ------------
それは xxxで実行できるものはほぼcall xxxで実行できる
call って start みたいなものなんだなって思ったんですが、 むしろ cmd /c と等価と考えればいいのかな。 start は cmd /k ですか。
そういう妄想は無意味だ 所詮にてるところもあればちがうところもある
まあそうなんですが、そう考えると分かりやすいので… 明らかに違うのは、 cmd /c だと当然のように cmd.exe がもう一つ 実行されることですね。これは環境変数に影響しますね。 ほかにも違いはあるのかな。
call notepad.exe cmd/c notepad.exe だけみれば call≒start cmd/c≒start/w になるし意味ないだろ?
なるほど。そういう動きしますね。
確かに「等価」なんて書くのは乱暴でした。
hoge.cmd がある環境と hoge.exe がある環境があって、
これを呼び出すバッチを両方の環境で共通にしたいと
思っていたのですが、call dir とか何気なく実行して
みたら思いがけず結果がでてきて
>>576 を書きました。
幸いexeはコンソールアプリケーションだったのでcallで
バッチもexeも実行できそうなんですが、そうでなかったら
やっぱり切り分けする必要がありそうですね。
いろいろ知識が増えました。ありがとうございます。
ちょっと先生方にお力を (↓サンプル) FOR %i IN (*.txt) DO @echo %i で.txtをひらい出そうとすると test.txt testtest.txt test.txttest ← test.txttxt ← test.txtAAAAAA ← 余分なものもひらってしまいます *.txt*やってるわけじゃないのにコマンドプロンプトはどういう理屈で上のものをひらうでしょうか .txtで終わってるテキストだけ正しく抽出するにはどうやったら 出来たら上のFORをベースに改良する方法でお願いします 現在FORで組んでしまってるので根本的に別方法はまずいので
FOR %i IN (*.txt) DO @if %~xi==.txt echo %i
>>586 今気づいたけど dir も同じよくわからん仕様
dir *.txt → 586の全部
dir *.txtt → 該当無し
dir *.txttxt → test.txttxt
dir *.tx → 該当無し
拡張子が3文字の時に限り後に何が付いていても全部表示する謎仕様。
さらに、*.txt* だと名前順だが、 *.txt だとベースは名前順だがtxt以降に
文字があるファイルはエントリ順になる超謎仕様。
さすがMS。
謎なものか dir /x してみ
>>587-589 出来ました
こういう仕様になってるのには何か深い理由がありそうですね。
こういう事情を知らずに各種ソフトの.iniファイルを別のものに一時交換するときに
.iniAAAAA とかを多用しているので困っていました
どうもありがとうございました
591 :
590 :2008/04/04(金) 19:43:54 ID:c0lFiKIy
わあああ、ちょっと実験したら今まで信じてきたやつも全部アウトか
*.txtAAAとかあればそれも全部混ざってコピーされてしまう
なんで気がつかなかったんだろう。反省しろよ俺
無知は恐ろしいと実感反省した4月4日をMyコマンド記念日としよう
par1よりこれも全部アウト
「888 名前:名無し~3.EXE 投稿日:02/01/20(日) 13:05
>>884 @echo off
for %%i in (*.txt) do type %%i >> new.txt
これをバッチファイルとして保存してダブルクリックしろ。
全てのテキストファイルが連結されて、
new.txtというファイルが作られる。
889 名前:名無し~3.EXE 投稿日:02/01/20(日) 13:21
それだけなら copy *.txt new.txt でいいでしょ。」
たぶん中上級者の方々には既知の話だったんでしょうね
スレ汚しスマソ
8.3名の生成機能、もういい加減デフォルトOffにすべきだよなぁ。。。 つーか10年くらい前でもよかった。
DOS時代に「名前8文字」「拡張子3文字」だったのを未だに引きずってるんだなあ。
重複行の削除を外部ソフトを入れずにやる方法をネットで検索したらこんなのがありました --------------------------------------uniq.bat echo off set prev= if not exist "%1" goto error for /f "tokens=* delims=" %%L in ( %1 ) do call :sub %%L goto exit :sub if not "%prev%"=="%*" set prev=%*&&echo %* goto :EOF :error echo. echo 表示したいファイル名を指定してください。 echo [例] uniq.bat file.txt echo. :exit 空白改行等には対応してないとのこと これは画面上に表示するだけなのでファイルに出力するために echo %* の後に>>new.txtとかつけてもエラーが出ます newファイルに出力するためにはどうしたらいいでしょうか? 検索したサイトはなぜかサイトを開くたびにスクリプト警報が出まくるので 2chブラウザでもリンクさせないようにしましたのでご了解ください www.fpcu.jp/dosvcmd/bbs/log/unixdoswindows/3−0062.html
補足しますと newファイル出力だけが必要で、画面表示は必要ないということです &&echo %*を&&(echo %*)>>new.txtとかに変えても全部エラーでした
uniq.bat >new.txt
uniq.bat file.txt>new.txt でしょ。 ところで、画面への出力とファイルへの出力を同時にやる方法は無いのかな? 内部で交互に出力しなきゃダメ?
>uniq.bat file.txt>new.txt >でしょ。 はて、なんか違ってるのかな? >ところで、画面への出力とファイルへの出力を同時にやる方法は無いのかな? あるけど?
>>598 > はて、なんか違ってるのかな?
> あるけど?
無知蒙昧の煽り厨かよ。
役立つ情報を書けないんなら書くなヴォケ!
602 :
名無し~3.EXE :2008/04/06(日) 18:49:15 ID:ejmUfes1
アフィニティマスクで1を指定して設定した場合シングルコアで作動しますが これをデュアルコアで作動するように戻すには数値は何を入れれば良いのでしょうか?
603 :
名無し~3.EXE :2008/04/06(日) 18:52:10 ID:ejmUfes1
すいません書き忘れてました クアッドコアの数値もお願いします
>>601 >>uniq.bat file.txt>new.txt
>>でしょ。
>はて、なんか違ってるのかな?
のほうは?
>>604 単なる煽りなのか?
:error 以降の出力を得たいだけだったら別にfile.txtは要らんけどな。
そんな池沼レスする気だったの?
最近2chで増えつつある、出し惜しみ厨の典型だな
出し惜しみどころか最初から知らないような気がしてきたよ。 やりたいことはmencoderの画面出力をそのままログファイルにも残したいってことなんだけど。 stdoutをそのままファイルにリダイレクトしてしまうとエンコード中の進行度が見れない。
ぷっ
>>607 tee.exe T 字型二股ソケット でググれば、たぶんできると思う。
が、俺はやったこと無いが興味はあるので、成功したら、やりかたと結果を書いてくれ
>>609 ありがとう。
あんまり使ってないけどcygwinは入れてたんだった。数種類のコマンドしか使ったこと無かったから
存在を知らんかったorz
tee.exe あったよw
>>609 mencoder 色々オプション | tee -a log.txt
これで画面出力と同じものをファイルにゲットできた。
厳密にはちょっと違うけど、それは元々わかってた問題だからOK。
どこかの口だけさんと違って感謝!
teeでなくてもできるけどw
もうこっちのやりたいことは終わったからレス不要
614 :
名無し~3.EXE :2008/04/06(日) 22:12:32 ID:MGkgFDSO
615 :
名無し~3.EXE :2008/04/06(日) 22:17:42 ID:MGkgFDSO
すいませんよそ聞きます 失礼しました
cygwin使わずにできんのか
動画をバッチ処理したいのですが 解像度かアスペクト比で処理を分岐させたい場合 どのように書けばよいでしょうか?
if
619 :
617 :2008/04/12(土) 22:10:27 ID:8rjR8tpP
>>618 もう少し具体的な回答をお願いします。
例えば解像度が1280x720の場合
echo LanczosResize(428,320)>> %avsfile%
解像度が960x720の場合
echo LanczosResize(480,270)>> %avsfile%
と処理を分岐させたい時
どのように書けばよいでしょうか?
具体的にって言われても動画の解像度なんて映画館によってまちまちだろ?
動画の解像度情報とかバッチファイル中でどうやって取得する気かと小一時間(ry いやもしそういったツールがあるなら俺も是非欲しいが
クリップボードの解像度情報とかバッチファイル中でどうやって取得する気かと小一時間(ry いやもしそういったツールがあるなら俺も是非欲しいが
クリップボードに解像度情報が入ってれば cliputilなり何なりを経由してforででも 行解析すれば取得は可能じゃない? 真空波動研は使ってないからコマンドラインから 操作できるか知らないけど。
625 :
617 :2008/04/12(土) 23:09:06 ID:8rjR8tpP
>>624 真空波動研はコマンドラインから使えるのですが
行解析はどのように行えばよいでしょうか?
クリップボードには
[cap20071129090938.avi]
1920x1080 24Bit Motion JPEG(MJPG) 29.97fps 53943f 124553.95kb/s
PCM 48.00kHz 16Bit 2ch 1536.00kb/s
[RIFF(AVI2.0)] 00:29:59.898 (1799.898sec) / 28,368,765,952Bytes
真空波動研SuperLite 080308 / DLL 080308
のようなデータが送られるので
1920/1080が1.7より大きいか小さいかで分岐処理を書きたいのですが
どのように書けばよいでしょうか?
面倒くせーからクリップボードの内容をテキストに出力して そこから必要行を抜き出して分岐判断させれ
627 :
617 :2008/04/13(日) 00:16:33 ID:pAruhQL3
>>626 625のように2行目に
1920x1080 24Bit Motion JPEG(MJPG) 29.97fps 53943f 124553.95kb/s
と書かれたテキストファイルから1920/1080の計算結果を得るには
どのように書けばよいのでしょうか?
for /? find /? findstr /? if /? set /? 辺りかな?
629 :
617 :2008/04/13(日) 01:30:00 ID:pAruhQL3
>>628 ttp://www.tsg.ne.jp/GANA/S/cliputil/ にあるクリップボードのテキストをDOSで扱うためのツールを使って
for /f "skip=1 tokens=1,2 delims=x " %%A in ('C:\Plugin\cliputil.exe -paste') do
で1920と1080を取り出せそうなのですが
ここから先がわかりません。
どのように書けばよいでしょうか?
typeでテキストを表示したアドレスをlynxにぶち込むにはどういう方法がありますか?
631 :
617 :2008/04/13(日) 18:25:52 ID:pAruhQL3
もうあきらめてPerlで処理しました。 perlに頼ると負けた気分になるけど 今日中には終わらせたかったので。
そういえば標準で数値計算に浮動小数点数使えるコマンドってあったっけ
>>631 つか、バッチでどうしてもやらざるを得ない理由がなければ、
Perlのほうが断然便利だよ。
バッチは、OSのVersionによって解釈の意味が変わったり、
コマンド直打ちとバッチ内で記述する書式が違っていたりと、
とにかくクセがありすぎる。
パズルを組み立てて楽しむ程度の心の余裕がないとムリ。
即効性と実用度で言えばPerlが断然勝利。
さいごに、参考にPerlで解決した方法を書いてもらえれば、
スレ的に有益になるだろう。
連番数字を作るとき数字なら開始終わりSETPが使えるので(1.1.100)とかで 簡単に作れますよね、これを アルファベットで連文字作りたいときはどうやったらいいでしょう aaaaaa〜zzzzz シロートがリファレンス読んで何とか2文字バージョンまでは作ったけど FOR %i IN (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) DO @(FOR %j IN (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) DO @echo %i%j) 1)6文字バジョーンはどうやったらいいでしょうか? 2)それと実際に使うとは全出力ではなくbaaaaa〜czzzzzまで出力とかしたいので フレキシブルな出力変更可能なやり方で 1)2)を満たすもの。でも2)が困難だったら1)だけでも どなたかお願いします
635 :
631 :2008/04/14(月) 01:48:28 ID:OkNafE+v
>>633 じゃぁ解決した方法だけをば
バッチ処理でfileリストと真空波動研の結果リストをファイルに保存
perlに処理を移して626さんのとおりの処理をさせて
エンコバッチファイルをperlに書き出させてそれをcall
以上です。
コマンドラインから、net use コマンドを使うことなく(ドライブ文字を割り当てないで) ファイルをコピーしたいのですが、可能でしょうか? エクスプローラからの操作であれば、\\10. 1. 2. 30\ のように入力してUSER/PASSWORDを 入力すれば、ドライブレターを使うことなくファイルがコピーできますが、この操作がしたいのです。
net use で必ずドライブに割り当てないといけないわけじゃないよ。 net use \\host\path PASSWORD /user:USERNAME copy ほげほげ net use \\host\path /delete とか。
638 :
636 :2008/04/22(火) 11:46:48 ID:fvGqunE0
>>637 即レスありがとうございます。
ドライブ名無しで試してエラーが出たので、net use はダメかと思っていたのですが、
レス通りだとできました。自分で試した構文が間違っていたようです。ありがとうございました!
Ctrl+Cキーで中断したバッチ処理を再開するにはどうしたらいいのでしょうか? また、中断されている処理があるかどうか確認する事は出来ますか? よろしくお願いします。
バッチ ジョブを終了しますか (Y/N)?
Y
YES! YES! YES!
How many files (0-15) ?
644 :
639 :2008/04/24(木) 08:29:44 ID:OFIsBZW/
>>640-642 ありがとうございます。 教えて頂いた通りに「Y」を押すことで無事終了することが出来ました !
いあ…すみません 中断してたのはバッチじゃなかったです…
もう少し調べてくるっス
ちょ
byteをMBに変換するために変数で割り算やってます 試しにこんな感じで事前の予備実験してみて上手くいったので (わざと割り切れない数字でやってみた例) @echo off for /L %%k in (10485763,1048575,104857513) do ( set /a NN=%%k/1048576 echo=約!NN!MB ) Pause 上と同じ set /a NN=%%k/1048576 を使って、コレをやってみたら 全然だめなんです。「32ビットなんたら」が出たり エラーが出ないときは計算結果が間違ってたり @echo off for /F "tokens=1-3 delims= " %%i in ('fsutil volume diskfree c:') do ( set /a NN=%%k/1048576 echo=%%i%%j約!NN!MB ) Pause エラーメッセ−ジ"数値は 32 ビットで表記される数値です" をGoogleで検索してもヒット無しで得られる情報ゼロ
32 ビットで表記される数値とは、-2,147,483,648 から +2,147,483,647 までの値の符号付き整数を表します。
>>646 for ... ( ... )
って書き方は有効なのかな?
ああ、ごめんなさい、偉そうな書き方したけど間違った理解をしてました。 ( ) のブロック内での変数の扱われ方ですね。 if 1==1 ( set xxx=hoge echo %xxx% ) のようなとき、%xxx%はブロックに入る前の値しか参照できないようですね。 で646をよくみたら… ほんとにそれ動いたのって感じですね…
>>650 すんません、理解しました。。。
set hoge=aaa && echo %hoge%
みたいなのが思った通りに動いてくれなかったのもこれなんだなぁ
652 :
646 :2008/04/26(土) 12:00:02 ID:dIylg/Sf
>>647 どうも。直し方が分からないし変な横槍入ってめんどくさいので割り算は諦めて
バイト値の下6桁を削って簡易表示でやることにしました
約!NN:~0,-7!MB
でわみなさんgood-by
if文の中にechoを入れたいのですが、そのecho文中に () があるとそれをifの グループ化機能と誤認して構文エラーになってしまいます。 echo文全体を () や '' で括ったり、( と ) の前にそれぞれ^を加えてもダメでした。 何か手はありませんか?
シングルで囲むとどーなるか
>>654 ありがとうございます、( ) がechoの文中で完結してる場合は必要ないけれども
複数のコマンドにまたがるようにして ( ) が使われてる場合 ^ が必要みたいですね。
ところでif文中のechoは表示できる文字数に制限があるみたいで(半角英数120文字程度?)
そのechoの内容をファイルにリダイレクトしようとしても途中までしか書き込めませんでした。
今回に限って言えば、if文からgotoで抜け出し、そっちにechoを書いて
リダイレクトする判断は結果としては正しかったようです ^ ^;
>>657 > ところでif文中のechoは表示できる文字数に制限があるみたいで(半角英数120文字程度?)
@echo off
if 1==1 (
echo aaa
echo bbb
echo (ccc^)
echo ddd
) else (
echo eee
)
if 1==1 (
echo fff
echo 12345678911234567892…中略300文字…1234567890
echo 12345678911234567892…中略300文字…1234567890> tmp.txt
)
全く問題なし。
batの引数について質問です。 ---test.bat--- if "%1"=="" goto Error set var=%1 echo %var% perl aaa.pl %1 goto End :Error echo 引数を入れて下さい... :End echo 終了します... ---終わり--- の内容な.batを書いたんですが、これを > test.bat 01 02 として実行させると、perl aaa.pl には "01"のみ引数として渡されます。(ここまではわかります。) で、実はこの aaa.pl に複数の引数(場合によっては10個以上)を渡したいです。(しかも実行するごとに引数の内容が変わります) そこで、 > test.bat "01 02" として実行させると、’02""=="" の使い方が誤っています。’と怒られます。 > test.bat "01 aa bb" とすると、’aa の使い方が・・・’とやはり怒られて、実行できません。 これは、if "%1"=="" の部分で、%1が展開されて if ""01 02""=="" goto・・・ と、構文エラーになってしまうためかと思われます。 そこで、if %1=="" としてやると、一応ifの部分はパス出来ますが、perl aaa.pl "01 02"となってしまい、 aaa.pl側からは一つの引数として扱われます。(perl側からは、複数の引数として渡したい) さらにこの場合だと、 > test.bat と引数なしで実行した場合は ’goto の使い方が誤っています。’ と言われてしまいます。 今度もやはり if %1=="" が、 if =="" goto・・・ と展開されてしまい、構文エラーになってしまいます。
660 :
659 :2008/05/10(土) 00:42:27 ID:jOW3pjRB
長くなってしまいましたが、まとめますと、 > test.bat "01 02 AA BB CC ・・・" (引数の数は可変。10個以上の場合もあり) と、コマンドラインから実行して、 perl aaa.pl 01 02 AA BB CC ・・・ (.batの引数からダブルクオートを省いたものをそのまま.plに渡す) とゆうことがしたいです。 さらに > test.bat と、引数なしで実行されてしまった場合は、:Errorのブロックを実行して警告を出力させたいです。 もうひとつついでに言いますと、 goto Errorで飛んだ先の :Errorブロックのみを実行させたいんですが、 上のスクリプトだと、その下の:Endブロックも実行されてしまい、 引数を入れて下さい... 終了します... と出力されてしまいます。 :Endの前に exit を書き足すと、コマンドプロンプト自体が終了してしまいます。これもどうにかしたいです。
perlが使えるなら、全部perlで処理したほうが効率的では? バッチは、代替がない環境で仕方なく使うものだと俺は理解しているが
>>661 ええ、実は目的の動作はPerlだけですでに出来上がってるんですが、ふとbatでやってみようと思って、
昨日一日かけて色々ググッてみたり、いくつかスクリプト書いたりしたんですが、
どうしても出来なくて、ヒジョーにクヤシイ!!って思った次第です。
で、こちらの達人方にご指導いただければと思いまして・・。
%* goto :eof
664 :
660 :2008/05/10(土) 01:56:15 ID:jOW3pjRB
>>663 うおおお!!できました。
引数が100個あってもちゃんと渡せます。
感動しました。ありがとうございます。
フォルダの中を消すには、どうするとよいですか? rd /s だと、フォルダごと消える。 複数あるのでバッチ処理したいが、何かよい方法は無いですか?
rd /s フォルダ\* でどですか
rd /s /q フォルダ md フォルダ まぁタイムスタンプが変わってしまうけどな
cd フォルダ rd /s .
バッチファイルでプログラムに00 01 02 03 ・・・といった連番になっている引数をわたしたい。 普通にfor文でやると頭に0がつかないので複数のfor文を組み合わせて実行しています。 ただ桁数が増えるとforと変数が多くなってわかりにくくなってしまします。 もうすこしいい方法はないでしょうか?
for /l
@echo off setlocal enabledelayedexpansion set args= set temp= for /L %%i in (0, 1, 12) do ( set temp=00000000%%i set args=!args! !temp:~-4! ) echo args=%args% pause
temp はまずかった
for /L %%i in (0, 1, 9) do for /L %%j in (0, 1, 9) do (
>>671 ありがとうございます。できました。
setと環境変数の勉強がたりなかったようなので勉強しなおそうと思います。
質問です。お願いします。 作成した下のbatファイルをdos窓からコマンド入力して 正常動作は確認できたんですが windows xp で ファイル右クリックから呼び出すように (SendToに置いて呼び出す)するとif文が一切判断されず そこで終了してしまいます。 実行時のDOSの種類が違うんでしょうか? -- :start コマンド処理 %1 shift IF "%1"=="" GOTO :eof goto start --
%1 を %~1 にするとかじゃね? どうでもいいけど、コマンドの大文字小文字は 統一したほうがいいよ
>>675 for %%1 IN (%*) DO コマンド処理 %%1
shift したら %1 は無くなるだろ。
>>676 質問者じゃないけど、この2つの違いって何ですか?
680 :
675 :2008/05/18(日) 19:43:39 ID:TvxyqS1+
>>677 の方法で処理できました。
if を大文字にしていたのは 試行錯誤の残骸で
shift の位置は確かに適切ではないですね
ありがとうございました >> all
IF "%1"=="" GOTO :eof goto start ↓ set x=%1 IF not defined x GOTO :eof goto start
>>679 %~1は二重引用符「"」を取ったもの。
%1に「"abc"」という文字列が入っていた場合、
if "%1"=="" goto :eof → if ""abc""=="" goto :eof
""=="" なので常に goto :eof を実行。
ちがうよ if ""abc""=="" goto :eof を if ""abc""=="" echo true ってやってみな たぶん if ""a c""=="" goto :eof でエラーになってるんだろ バッチファイルの関連付けを cmd /k "%1" %* に変えて実行結果を確認しろ
スンマソン バッチでIPアドレスの設定は可能でしょうか? あとディスク使用量を出すコマンドはあるでしょうか? よろしくです
>>684 netsh interface ip set address name="ローカル エリア接続" source=static addr=192.168.1.1 mask=255.255.255.0
netsh interface ip set address name="ローカル エリア接続" gateway=192.168.1.254 gwmetric=0
netsh interface ip set dns name="ローカル エリア接続" source=static addr=192.168.1.253 register=PRIMARY
fsutil volume diskfree c: 空きとドライブの全容量が出るからそこから逆算すれば。
dir /s c:\
688 :
名無し~3.EXE :2008/05/25(日) 14:35:32 ID:o3W/fKZ/
Accessのローカルのクライアントマシンに存在するmdbファイルを世代管理を使ってサーバーにバックアップを取る仕組みを考えております。 世代管理は例えば今日からで言えば20080525.mdb 〜 20080601.mdbまで一週間分保持するものとし6/2になれば5/25日のバックアップファイルは消され一番古いものが5/26日となります。 また同一日付でこのバッチが起動された場合は同じ日付のバックアップの保存先のmdbファイルが新しい方の日付で更新される仕組みを考えております。 これをどうしてもコマンドプロンプトのbatファイルにて作成したいのですが、ベテランの方ご教授していただけますか? 以前このような世代管理を行っていた方はいたのですが、現状その方に聞ける事情ではなくインターネットで調べてもうまいような検索結果がヒットしません。 どなたかご教授の程お願い致します。
>>688 日付をつけるとややこしくなりそうだし、どうせ消すのなら
backup_mon.bat
copy xxxx.mdb backup_mon.mdb
みたいなのを1週間分つくって、
タスクマネージャで起動かけるとかじゃだめ?
これだと古いのは勝手に消えるし。
690 :
689 :2008/05/25(日) 15:03:40 ID:QPVRGIlk
× タスクマネージャ ○ タスクスケジューラ orz
TXTファイルから各行の最後尾文字列だけ抽出するバッチファイル 1,2332,311133,444,555,66666,1行目成功 1,2,1111,33333333333333333,2行目成功 22444222,1111,333,444,5,6,7,3行目成功 以下略 最後尾が何番目のトークンかは不定 最後尾の前に並ぶ文字列に規則性無し 上のTXTファイルから 1行目成功 2行目成功 3行目成功 以下略 と取り出すもの ○行成功というは仮に書いてるだけでこの文字列にも規則性は無し 検索したらniftyのフォーラムで同様の質問している人がいたが解答に出会えないまま このバッチファイルは考え方としてどんなものがあるでしょうか? アイデアだけでも歓迎 ヒントをくれたらバッチファイルはしこしこ組みまする
一般的な方法じゃないけど、 各行の後ろの何文字かを取り出して、 ,をスペースに変換して、 一番最後のワードを結果とするのはどうですかね。
for /f "delims=" %%L in (hoge.txt) do ( for %%I in (%%L) do set str=%%I call echo %%str%% )
今更Windows2000なのですが、画面の解像度とかカラーモードをバッチで設定することは可能ですか?
コマンド1個だけじゃ無理だろうね。 いろいろ手順を踏めばできないこともないが、 適当な外部ツールを起動させるだけのバッチを作ったほうが手間的に得
698 :
695 :2008/05/26(月) 14:11:14 ID:2uqHEmAT
即答ありがとうございます。
>>697 のツールを試してみることにします。
コマンドプロンプトにおける、\"の挙動ってどうなっているのでしょうか? "s/'//g" | more という引数を渡すと "s/'//g" のみが引数として渡り 結果がページ毎に止まって出力されます。しかし "s/'/\"/g" | more という引数を渡すと "s/'/\"/g" と "|" と "more" の3つが引数として渡ってしまいます。 後者2つをそれぞれパイプ、moreとして扱って貰うにはどうしたら良いのでしょうか?
ちなみに、いくつかのコマンドで試しましたが どれもやはり | more が引数として取られてしまいました。 >gawk "BEGIN{ for(i in ARGV) print ARGV[i]; }" "s/'/\"/g" | more gawk s/'/"/g | more >perl -e "print join' ',@ARGV" "s/'/\"/g" | more s/'/"/g | more >ruby -e "p ARGV" "s/'/\"/g" | more ["s/'/\"/g", "|", "more"]
^
エスケープは ^ でしたっけ。しかしそうすると今度は >perl -e "print join',',@ARGV" "s/'/^"/g" | more s/'/^/g | more | more までが全て1つの引数として扱われてしまいました。
括弧は?
cmdを起動する時に、詳細設定の環境変数を弄らずに path %path%;c:\bin やdoskey等を打ち込んだ状態にしたいのですが、どうすればできますか?
cmd起動用のバッチでも書け
cmd /k "path %path%;c:\bin & doskey"
\042 \x22
>703 こういうことでしょうか? >( perl -e "print join',',@ARGV" "s/'/^"/g" ) | more More? More? More? More? >( perl -e "print join',',@ARGV" "s/'/\"/g" ) | more More? More? More? More? More? が終わりません…。 >707 >perl -e "print @ARGV" "\x22"\042"" | more \x22\042 すみません、よく分からないです…。 どなたか、ダブルクォートを引数として渡して パイプ以降はちゃんとパイプとして認識されるような書き方を知らないでしょうか…。
バイナリファイルの先頭1MBだけコピーしたいのですが、 この用途に適したコマンドまたはツールはないでしょうか。 ファイルのハッシュを計算する際、フルにスキャンすると時間がかかるので、 個体認識さえできればよい、という前提で探していますが、 CUIツールは見つからず、ヘルプいただけると助かります。
call :hoge > hoge more hoge del hoge goto :eof :hoge perl -e "print join',',@ARGV" "s/'/^"/g"
712 :
名無し~3.EXE :2008/05/29(木) 02:05:00 ID:EjL5v9Ji
ちょっと長くなりますがschtasksについて質問させてください。 テキストファイルをリモートサーバ上にコピーするバッチcollect.batと、 それをschtasksを使ってAdmin権限で実行するプレバッチについて。 配布して実行した結果、プレバッチ内のschtasks処理がされずに 失敗したものがほとんどで、成功したものは配布対象の1割程度 でした。バッチを作成した環境やテスト環境では成功していました。 プレバッチでは set LOGFILE=D:\LOG\collect.log echo [%TIME:~0,8% start] >> %LOGFILE% schtasks /create /u:administrator /p:**** /tn collect /tr D:\collect.bat /sc once /start %TIME:~0,5% >>%LOGFILE% schtasks /run /tn collect >> %LOGFILE% echo [%TIME:~0,8% end] >> %LOGFILE% こんな感じにしていますが、なぜかschtasksコマンドの結果が collect.logには何も残っていません。 プレバッチの実行はこのログからも確実にされていることが 分かっています。 Task Schedulerサービスは実行されていますが、サービス未起動 でもschtasksが返すメッセージが残るはずなので不思議です。 成功した環境と失敗した環境との違いも、今の所はわかりません。 環境はWindowsXP Pro SP2です。 schtasksが正常に実行されないのはなぜでしょうか?
>>712 schtasksのエラーのメッセージは標準エラー出力に出るんじゃね?
schtasks 〜 >> %LOGFILE% 2>&1
>>713 ありがとうございます。おかげさまで、かなり高速で処理できました。
まさかWindows環境で、あの便利なDDが使えるとは・・・
/of にHDDのデバイス名を割り当てたら死んでしまうので、
バッチで作る際は、その点だけ要注意ですね。
>711 う〜ん、バッチファイルの話では無いのでこちらで聞いていたのですが …とりあえず、色々考えてみます。ありがとうございました。
\ ただの文字 " 開始引用符は終了引用符までのすべての文字をただの文字として扱う ^ 引用符中でなければ次の文字が持っている機能をエスケープする したがって s/'/^"/g となる。プログラムに "s/'/"/g" を渡したいのなら ^"s/'/^"/g^" となる。 ただしプログラム側が " に対して特別な処理をしていてcmd.exeが渡した引数と異なる値 になるかもしれない。 VC++ 2003ではs/'/^"/gはプログラム側でGetCommandLine()するとs/'/"/gだったが、 argv[1]はs/'//gになった。 s/'/^"""/g|moreはGetCommandLine()ではs/'/"""/gとなりargv[1]はs/'/"/gになった。 コンパイラやプログラム側の処理でどうなるかはわからないが、たぶん正解は s/'/^"""/g|more
引数に空白とタブルクォートが両方入るならどうなる?
このプログラム argecho.c をコンパイルして試してみた。 #include <stdio.h> #include <string.h> #include <windows.h> int main(int argc,char **argv) { char *p; int i; p = GetCommandLine(); if ( p == NULL ) { exit(1); } printf("GetCommandLine=[%s]\n",p); for ( i = 0 ; i < argc ; i++ ) { printf("argv[%d]=[%s]\n",i,argv[i]); } return 0; } >argecho s/" "'/\^"/g arg2 |more GetCommandLine=[argecho s/" "'/\"/g arg2 ] argv[0]=[argecho] argv[1]=[s/ '/"/g] argv[2]=[arg2] >argecho \^"s/" "'/\^"/g\^" arg2 |more GetCommandLine=[argecho \"s/" "'/\"/g\" arg2 ] argv[0]=[argecho] argv[1]=["s/ '/"/g"] argv[2]=[arg2] (VC++ 2003の)ランタイムルーチンがコマンドラインをargv[]に分解するときに \ は " をエスケープする意味があるのでこうなった。 フリーのコンパイラ(Visual C++ 2005 Express Edition, Borland C++ Compiler 5.5など)をインストールして追試してみてくれ。
721 :
名無し~3.EXE :2008/05/31(土) 22:11:49 ID:Uj21DRlS
以前、似たような試験をしてみたところ、 Visual C++ 2005 Express Edition と MinGW の gcc は同じ結果で Borland c++ 5.5 だけ結果が違ってた。 Windows では、コマンドラインを解釈するのはランタイムライブラリ。 コナパイラが変われば解釈も変わる。 同じ Visual C++ でも将来のバージョンで変わるかもしれない。 コンパイラに依存するような書き方をするのは不安だよね。 危ない橋をわたるより、もっと確実な方法を取ったほうがいいよ。
んじゃ、batの結果 @echo off echo %%*=[%*] echo %%0=[%0] echo %%1=[%1] echo %%2=[%2] Vistaのcmd.exe C:\>arg s/" "'/\^"/g arg2 |more %*=[s/" "'/\"/g arg2] %0=[arg] %1=[s/" "'/\"/g arg2] %2=[] C:\>arg \^"s/" "'/\^"/g\^" arg2 |more %*=[\"s/" "'/\"/g\" arg2] %0=[arg] %1=[\"s/"] %2=["'/\"/g\" arg2]
ついでにVistaのcommand.com (dosonly) とても素直です。 C:\>ARG s/" "'/\^"/g arg2 |more %*=[*] %0=[ARG] %1=[s/"] %2=["'/\^"/g] %3=[arg2] C:\>ARG \^"s/" "'/\^"/g\^" arg2 |more %*=[*] %0=[ARG] %1=[\^"s/"] %2=["'/\^"/g\^"] %3=[arg2] C:\>VER MS-DOS Version 5.00.500
色々ありがとうございました。 >718-723 の説明で完全に理解しました。 私の勘違いはどうやらいくつかあったようで ・\をcmdが処理していると思っていた (cmd的にはただの文字であり、アプリ側で処理していた) ・引用符は空白の入った引数を括るためのものだと思っていた (空白に限らず、"以外全ての文字をただの文字として扱わせるものだった) ・引用符は1つの引数全体を括るものだと思っていた (引数の途中から途中を括ることができる) ・引用符中であろうと ^ はエスケープとして機能するハズだと思っていた (引用符は空白を括るだけでなく ^ すらも文字列化してしまう) >702 は""の中に ^ があった為、エスケープされず 次の"で引用符としての効果が終了、 /gの後が2つめの引用符の開始になってしまったのですね。
725 :
名無し~3.EXE :2008/06/01(日) 11:12:36 ID:dypgy/G+
>723 >ついでにVistaのcommand.com (dosonly) >とても素直です。 ナイーブなまんま。 日本に来て英語喋り続けるんだYO!
すんません すごい低俗な質問なんですが ren(rename)がうまくいきませぬ たとえばデスクトップにあるテストって名前のフォルダの名称を変更する場合 C:\Documents and Settings\****\デスクトップ>ren テスト テスト1 こういうやり方をしてうまくいかないのは やっぱりがおかしいんでしょうか○....rz
いえきっと やっぱり頭がおかしいんだといいたかった・・・(´・ω・`)
>>726 普通にできるが?
「テスト」内のファイルを使用中にリネームしようとしてるんじゃないの?
>>728 いえ開いてなんていないですが・・
これであってるんですか
同見ても無反応・・・
すません途中送信してしまたorz
>>728 いえ開いてなんていないですが・・
これであってるんですか
同見ても無反応・・・
で、renってファイルがデスクトップに作成されちまいやす
>>730 まさか「デスクトップ>ren テスト テスト1」を打ってる?
デスクトップにcdして、それから「ren テスト テスト1」だぞ
732 :
名無し~3.EXE :2008/06/02(月) 00:04:46 ID:D3dgcEjP
C:\Documents and Settings\****\デスクトップ>  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↑これは「プロンプト」と言って、入力しなくていい。 ren テスト テスト1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↑あなたが入力するのは、コレ! つまり、 C:\Documents and Settings\****\デスクトップ>ren テスト テスト1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ここだけ入力するとこ
>>731 cd<C:\Documents and Settings\Akihiko\デスクトップ
ren テスト テスト1
こういうことでしたか無知ですいません
ググりまくったんですが
どこ見てもコマンドの説明とかあるんですが構成とかまったくなくて○..rz
ばかですいまそん
ほんとはファイルの名前だけ入れ替えとかやりたかったんですが
これだけのことにこんな手間取るなんて・・・
諦めて半年くらいROMってきます
ありがとうorz
734 :
733 :2008/06/02(月) 00:08:33 ID:Cid0TIPt
>>732 ouch!
レスがついてる!
親切にありがとう
一番大事なとこが抜けてたんですね
バッチファイルが作りたかったんですorz
ほんと素人すぎてすいまでした
すいまでした→すいませんでした 頭がパンクしました○rz
ちったあ推敲してから書き込め
睡魔だったんだろ?解るよ。
738 :
名無し~3.EXE :2008/06/02(月) 17:53:55 ID:/+k/rMka BE:666238638-2BP(802)
オリンピックも近い事ですしね…
100個位のバッチを4個づつ走らせる方法を教えてください 具体的にいうと、XP homeでstartからのバッチでシングルスレッドのx264(とavisynth)を よっつ同時起動して1つ終了するたびに1つ起動するようにしたいです イメージとしては start /min 000.bat start /min 001.bat start /min 002.bat start /min 003.bat :ここで条件判定 start /min 004.bat :ここでも条件判定 start /min 005.bat :ここでも... start /min 006.bat ... みたいな感じでやりたいです /wait付けて4分割で良さそうですが、それぞれ計算量(計算時間?)は違うはずなので非効率的です 個々のバッチの最後に条件判定の種を仕込む方法もあると思いますが、もちろん同時に終了する可能性もあるので、それぞれのバッチでうまく同期?する必要が有ります その辺も考慮した方法をお願いします。
モレはふつーに、100行あったら、25行づつ4枚のBATファイル書いてるけど。 特に問題無いよ。
オレも今まではそうだったんだけど、もっと賢くできないかなぁ?とか思ったけど オレに出来る範囲だとomp使ってexe作る位しか思いつかなかったから、試しに聞いてみた どうぞよろしく〜
WSHでExec使えばえーがな
>>743 正規表現がどうかしたの?とかおもったけどww
調べてみたら割と簡単に出来そうで助かりました
ありがとうございましたノシ
訂正 X ありがとうございましたノシ O ありがとうございましたm(_ _)m
>>742 BATじゃなくて、AutoHotkeyやwshを使ったほうが確実だよ。起動したバッチの
PIDを監視して、それが消滅したら次のタスクへ、なんてのも数行でできる。
AutoHotkeyの例
Loop,100
{
cmd=やりたいこと%A_Index%.bat
runwait %cmd%,,Hide,pid
if errorlevel<>0
msgbox,エラーでたよ。PID=%pid% errorlevel=%errorlevel% つづけたいならOK押せ
}
「A_Index」は、ループ内で回った回数のこと。ループのたびに数値が1ずつ
上がっていくから、やりたいこと1.bat→やりたいこと2.bat→やりたいこと3.bat
・・・やりたいこと100.bat→END
と、順番に処理してくれる。
hideは、ウインドウを一切表示させない意味。pidは実行した際のpidが入る。
実行後、errorlevelが0以外なら、なんらかのエラーが出てるはずだから
そのときだけbeepを鳴らしたり、ダイアログを出すとかも可能。
エンコ用途なら、ダイアログを10秒以上放置したら自動で次の処理とかもできる。
このスレでも何度か出てるけど、いまどきBATをつかうのは
単独で起動させるプログラムにオプションを与えるための整理役と、
緊急時や、社内ポリシーの制限で「仕方なく」使うようなもの。
わかりにくくて制限だらけのBATをパズルのように使いこなすよりも、
もっと簡単に操作可能な方法を組み合わせたほうが効率的だよ。
んなアホな。それだったら 「質問された事をコマンドライン以外でやろうとしたらどうなるか?」スレになってしまう ここは「それでも時代遅れのコマンドラインでなんとかやろうとしたらどうなるか?」と追求したり、それを質問をするスレだわ コマンドラインが時代遅れである事は聞いてる人の側でもむしろ前提 746方式だと、これから誰かが何か聞いてくるたびに、質問されても無い別のスクリプトを教えるつもりなのか? お勉強発表会は否定しないがその該当スレでやるか?ソフ板の総合質問系のスレでやるヨロシ
>>747 あーごめん。言葉足らずだった。
質問者が
>mp使ってexe作る位しか思いつかなかったから
ということだから、質問者のやりたいことだけを手っ取り早く
実現するなら、全部バッチでやるよりも簡単な方法があるよ、という話
749 :
名無し~3.EXE :2008/06/04(水) 21:49:55 ID:7+YNsR+N
すいません。教えて下さい。 ファイルをD&Dしたときにそれをコピーしてある名前にする っていう単純なバッチが作りたいんですが 全角スペースを含む日本語ファイル名だとうまく動きません いい解決方法ないでしょうか @echo off cd /d "%~dp0" copy "%~1" temp.txt echo Finish. pause
>>750 ありがとうございました
いろいろぐぐったんですがいい方法も見つからなかったので
スペースは手作業で消すことにします
set x=%2 if defined x (copy "%*" temp.txt) else copy %1 temp.txt
>>752 あーなるほど
分離してしまうならつなげろってことですか
気付きませんでしたorz
ありがとうございました
>>740 set /a n=0
for /f "delims=" %%I in (list.txt) do call :run %%I
goto :eof
:run
for /f "skip=3 delims=" %%J in ('dir /b executing.*') do (
sleep 5
goto :run
)
set /a n+=1
type nul >executing.%n%
start cmd /c " %1 & del executing.%n%"
goto :eof
毎日、画像を三十枚以上、縮小&リネームしています。 手作業はしんどいので、自動化しようと思いここにたどり着きました。 リネームはDOSプロンプトで出来ることが分かりました。 画像はWindows標準のPaintで縮小していましたが、DOSで同様の処理が出来ますでしょうか? ただし、他のソフトをインストールできない環境です。標準のソフトとofficeしか入っていません。
>>755 imagemagick使う。
インストールできないというのが実行ファイルを外部から持ってくるのも不可という場合は不可能と言うべきか?
厳密には不可能じゃないけど…
質問スレで反応がなかったのでこちらで質問させてください。補足ですが、XP PS3です。 660 名無し~3.EXE sage 2008/05/29(木) 20:36:57 ID:0+d669Zv net sendコマンドとmsgコマンドは何が違うのでしょうか? Messenger serviceを有効にしてnet sendは機能 するのですが、msgコマンドは/server:で対象を指定しても "エラー [5]:アクセスが拒否されました。"となってしまいます。 対象を*にするとローカルには表示されます。
758 :
755 :2008/06/06(金) 05:15:08 ID:eZBPSYq8
>>756 imagemagickは外部から持ってくることになるため、避けたいです。
厳密には不可能でないという方法をアドバイス頂けないでしょうか?
WSH使え
760 :
名無し~3.EXE :2008/06/06(金) 18:20:54 ID:b+c7iV0l
761 :
名無し~3.EXE :2008/06/07(土) 08:17:30 ID:9kLf9UVX
ディスクの空き容量によって、処理(制御)の流れを変えるバッチファイルを 作りたいのですが、環境変数に空きディスク容量(ファイルのデータ)を セットする方法が分かりません。 今考えている手順は、 dirの出力をファイルに落として、空き容量の文字列を抽出し、 それを環境変数にセットしてIF文で判定するというものです。 ちなみに、空き容量文字列の抽出は、 別のScript言語で作るしかないのでしょうか? よろしくお願います。
762 :
名無し~3.EXE :2008/06/07(土) 08:17:58 ID:9kLf9UVX
ディスクの空き容量によって、処理(制御)の流れを変えるバッチファイルを 作りたいのですが、環境変数に空きディスク容量(ファイルのデータ)を セットする方法が分かりません。 今考えている手順は、 dirの出力をファイルに落として、空き容量の文字列を抽出し、 それを環境変数にセットしてIF文で判定するというものです。 ちなみに、空き容量文字列の抽出は、 別のScript言語で作るしかないのでしょうか? よろしくお願いします。
>dirの出力をファイルに落として for /f使え 詳しくはfor/? >空き容量文字列の抽出は findかfindstr使え 詳しくはfind/?かfindstr/?
764 :
762 :2008/06/07(土) 14:41:58 ID:9kLf9UVX
>>763 レスありがとうございます。
制御変数へのセット(IF文での判定)はどうすれば良いのでしょうか?
ここが一番悩みなんですが・・・
765 :
名無し~3.EXE :2008/06/07(土) 14:50:39 ID:6Y503noJ
あるプログラムを互換モードで動作させる場合、エクスプローラからそのプログラムを 右クリックして、プロパティから互換性タブを開いて設定すると思います。 この作業をコマンドラインから行いたいのですが、どなたか方法をご存知ありませんか。
>制御変数へのセット(IF文での判定)はどうすれば良いのでしょうか? for /f使え 詳しくはfor/?
>>766 部外者だが、知ってるなら具体的に**オプション使えばできる、とか書いてよ。
そんなオウム返しみたいなレス、スレが汚れるだけだからいらんよ
答え: /f
769 :
762 :2008/06/07(土) 21:23:09 ID:9kLf9UVX
>>766 、767、768
レスありがとうございます。
for /fしか、ないということですね。
771 :
762 :2008/06/08(日) 11:22:44 ID:1NIPO+wf
for /fは分かったのですが、数値比較がうまくいきません。 if文で、数字が小さいと正しく比較されますが、 数字が大きくなると正しく比較されません。 例えば 1000 leq 800は、偽ですが、 100000000000 leq 80000000000は、真になります。 どうすれば良いのでしょうか?
桁削れ set /?
773 :
762 :2008/06/08(日) 14:02:03 ID:1NIPO+wf
>>772 レスありがとうございます。
なんとか出来ましたm(_ _)m
setで=を置換できない? set a=b=c echo %a:==d% ==d% の使い方が誤っています。 echo %a:^==d% b=c
775 :
名無し~3.EXE :2008/06/08(日) 22:08:48 ID:/UhiE58u
>>774 ちゃんとできてるじゃないの。何が問題なの?
置換出来てるようには見えないがww 774がaの値がb=cとか錯覚しやすい変な例を上げてるせいだが set a== で echo %a:==置% echo %a:^==置% どのやりかたでもダメだったと言いたいのだと思う 答えはシラネw
>>755 画像をUSBメモリで持ち帰ってフォトショップのマクロでやる
exeの持ち込みはダメなのにbatはいいってのがよくわからん管理状況だな
せめてOfficeとか入ってないの?VBA使えばそれこそなんでもできるよ
>>777 よく嫁
> 標準のソフトとofficeしか入っていません。
すまん。素で読み落としてたわ。
780 :
名無し~3.EXE :2008/06/13(金) 08:48:10 ID:jt91+Q1n
バッチ処理(〜.bat)をログオン時起動するように、 設定したのですが、うまく実行されません。 OSはVistaで、タスクスケジューラで状態を見ますと、 「起動中」になっていますが、 バッチ処理の中で、処理が始まると表示するように 記述しているechoメッセージが表示されません。 原因と対策を教えて下さい。 よろしくお願いします。
ログオン時起動するように設定した方法とechoメッセージまでのバッチの内容は?
782 :
780 :2008/06/13(金) 19:38:13 ID:jt91+Q1n
>>781 レスありがとうございます。
設定等は以下の通りです。よろしくお願いします。
1.タスクスケジューラの
[全般]→[ユーザがログオンしているかどうかにかかわらず実行する]
をチェック
[トリガ]→[タスクの開始]を[ログオン時]
→[特定のユーザ/グループ]をチェック
[操作]→[プログラムの開始]
バッチファイルのパス名、ファイル名指定
2.バッチファイルの内容は
@echo off
echo テスト
:
です。
あと、関係があるかどうか分かりませんが、
[コントロールパネル]の[タスクのスケジュール]の盾マークがついてます。
一瞬で終わってるから気づかないだけとかいうオチはないよね
MB温度、CPU温度、HDD温度をコマンドラインで取得したいです。 Wmic.exeというのが使えそうなのですが、使い方がいまいち分かりません。 わかるから、教えてください。
785 :
780 :2008/06/14(土) 17:07:22 ID:pWOjAg5F
>>783 レスありがとうございます。
「echo テスト」の次をpauseにしてますので、
気づかないうちに終わったということはありません。
>>785 そもそもログイン前に実行したコマンドラインの内容って
ログイン後に表示されるの?
出かけてるから試せないけど、ファイルつくるようなバッチだったら
どんな動きしてる?
787 :
786 :2008/06/14(土) 19:15:56 ID:HScNwkhv
ログイン前、じゃなくってデスクトップ表示前、ですねorz
うごいてるのか、 うごいてないのか。 うごいてるのに目に見えないだけなのか。 問題の切り分けをしろ。 ECHO %DATE% %TIME% うんこヤロー>>UNKO.log
>>780 >「起動中」になっていますが、
の原因は
>「echo テスト」の次をpauseにしてますので、
790 :
780 :2008/06/15(日) 16:48:01 ID:HulyKHru
レスありがとうございます。 ECHO %DATE% %TIME% うんこヤロー >>…を echo テストの前に入れてみましたが、 ファイルには何も書かれていません。 要求時に実行をチェックして、[操作]→[実行]すると、 タスクスケジューラの状態は実行中に変わりますが、 やはり、ファイルには何も書かれていません。 よろしくお願いします。
>>790 そもそも、そのバッチをコマンドラインで実行したら、どうなる?
「ファイルには何も書かれていません」ってのが本当かどうか怪しいな。 出力先に、ちゃんと絶対パスとドライブ名は入れてる? 書けないと言っておきながら、tempディレクトリとかに しっかり書き込まれて、気づかない事例はよくある
793 :
790 :2008/06/16(月) 16:12:54 ID:jtToNX4P
>>791 ,792
レスありがとうございます。
コマンドラインで実行しても、バッチファイルをダブルクリックしても
正しく実行されます(ファイルに日付等が出力され、次のechoコマンドの
メッセージが表示され、「続行するには何かキーを押してください・・・」
が表示されます(pause))。
echo、pauseコマンドが処理されているのにメッセージ表示等が
正しく行われていないのか、そもそも処理されていないのかを
切り分けるためにファイル出力コマンドを入れています。
ファイルに書き込まれていることに気付かないだけで、
ファイル出力コマンドの処理が正常に行われていて、
次の「echo テスト」「pause」コマンドが正しく処理されない
というのは考えにくいのではないでしょうか。
ちなみに、タスクスケジューラでのバッチファイルのパス指定は
次のようになっていますが、問題はないでしょうか
C:Users\アカウント名\バッチファイル名
なんで相対パス……
どこが相対パス?
>>793 Vistaで実行してるようですけど
リダイレクト先はどこにしてますか?
権限をどう設定してるか分からないけど
C:\Users以下はUACの影響を受けたはずなので
その位置に書かれるか保証できないかも
Dドライブあたりにディレクトリ切ってみて
そこで試してみたらどんな結果になります?
797 :
796 :2008/06/16(月) 22:40:05 ID:dK6gjggp
>>790 せっかくなので試してみました。(Vista-Ultimate x64)
こんなバッチをタスクスケジューラに登録。
echo | cd >> D:\test\aa.txt
echo %date% %time% >> test.txt
echo %date% %time% >> C:\Users\AcctName\test.txt
echo %date% %time% >> D:\test\test.txt
Dドライブにtestディレクトリを切って再ログイン。
C:\Users\AcctName\ にはファイルは見あたらず
D:\test内のほうは
C:\Windows\system32
2008/06/16 22:24:59.01
の2行が生成。
別ディレクトリを絶対パス指定しないとダメですね。
(C:\Windows\system32にもファイルなし)
それからログイン時のタスクで実行したタスクは
ログイン後のデスクトップ上に表示されない模様。
Pauseは意味ないみたい。
相対パス
799 :
790 :2008/06/17(火) 13:58:01 ID:zwWahSzn
>>797 レスありがとうございます。
ファイルが作成されない原因は分かりました。
ところで、本来やりたい「デスクトップへechoメッセージを
表示してpauseで待つ」という処理が、
ログイン時タスクで出来ないとすると、どうすれば良いのでしょうか?
ログイン直後に自動起動してデスクトップへメッセージを表示して
キー入力を待つという処理はコマンドラインではできないのでしょうか?
普通にスタートアップに登録すればいいんじゃね?
>ファイルが作成されない原因は分かりました。
教えて下さい。 あるフォルダの画像ファイルのうち特定の物だけその日の日付+01.jpgのような二桁の連番にrenameしたいと思っています。1-9までは良いのですが10以降は三桁になってしまいどう対処すればいいのか判りません。よろしくお願いします。 @echo off set /a N=1 :LOOP for %%A in (abc*.jpg) do rename %%A %date:/=%0%N%.jpg > nul if "%N%"=="99" (goto EXIT) set /a N=N+1 goto LOOP :EXIT
> ファイルが作成されない原因は分かりました。 原因を説明せーよ。 > ログイン時タスクで出来ないとすると、どうすれば良いのでしょうか? スタートアップ入れればいいじゃん。
コマンド補完で、bashやnyacusのように候補一覧を並べるのではなく、 zshのように候補を次々に表示していくシェルがあれば教えて下さい。 こんな感じでできればいいなと思う例 環境変数path内に、「testcommand01.exe」、「testcommand02.exe」がある場合 testと打ち込み TABを1回打つと、testcommand01.exeが表示され、 もう一度TABを打つとtestcommand02.exeが表示されるような感じ。
805 :
804 :2008/06/18(水) 10:19:18 ID:NUy0S7AO
すみません、よーく確認したらnyacusで、ほぼ同様の事ができるのでnyacus使わせてもらいます。
806 :
790 :2008/06/18(水) 19:57:52 ID:kUYKhkJk
>>803 レスありがとうございます。
表現が不適切でした。原因は理解できていません。
C:\Users\アカウント名の直下にバッチファイル等を置くと
ファイルに出力されないが、D:\等のドライブ名の直下に置くと
ファイルが出力される事が分かったという事です。
あと、スタートアップ時でも、現象は同じで、
echoメッセージはデスクトップには出力されません。
ログイン時に表示されないのは、OSの不具合なんでしょうか?
(ログイン後ダブルクリックで起動したら、表示されますので)
で
>>793 の相対パスは絶対パスに直したのかよ?
>>806 まずは切り分けしてみては?
スタートアップでもダメらしいですが
遅延時間を設定してデスクトップ表示後に
実行してみたり、時間指定で動かすと
どんな挙動かを観てみてはどうでしょう
女『車のエンジンがかからないの…』 俺『バッテリーかな?ライトは点く?』 女『昨日はちゃんと動いたんだけど…』 俺『バッテリーかどうか知りたいんだけどライトは点く?』 女『今日は○○まで行かなきゃならないから車を使えないと…』 俺『んでライトは点く?』 女『前に乗ってた車ではこんな事無かったのに…』 俺『ライトは点く?点かない?』 女『○時に約束だからまだ時間はあるけど…』 俺『死ね』 ↓ 女『ECHOが出力されないの…』 俺『パスかな?絶対パスは点けてる?』 女『スタートアップ後はちゃんと動いたんだけど…』 俺『パスかどうか知りたいんだけどパスは点けてる?』 女『今日はpingしたいからECHOを使えないと…』 俺『んでパスは点けてる?』 女『前に使ってたPCではこんな事無かったのに…』 俺『パスは点けてる?点けてない?』 女『pauseで待つ約束までまだ時間はあるけど…OSの不具合なのかな?』 俺『死ね』
810 :
名無し~3.EXE :2008/06/18(水) 22:46:26 ID:kDIrIy9i
テキストファイルの50行目から、前後10行(40-60行まで) 別ファイルにリダイレクトするって、コマンドプロンプトで 出来ますか?
811 :
810 :2008/06/18(水) 22:49:13 ID:kDIrIy9i
すみません。環境は2K/XPです。 出来ればNT4にも対応してると嬉しいです
812 :
名無し~3.EXE :2008/06/19(木) 00:20:42 ID:o/4A0OYu
unixのteeみたいに画面出力しつつファイルに落とすのってDOSでできますか?
どこからか tee.exe をダウンロードして使うしか無いやろ。
>>809 そのコピペ、おもしろい。名前を付けて保存・・・っと。
>>813 つまり、デフォルトでは無理ということですか
@if(0)==(0) echo off cscript //Nologo //E:JScript "%~f0" %* goto :EOF @end var FSO = new ActiveXObject("Scripting.FileSystemObject"); var ForAppending = 8; var CreateIfNotExist = true; var OverWriteIfAlreadyExist = true; function write_file(filename, text, append_mode) { var file_stream; if(append_mode) file_stream = FSO.OpenTextFile(filename, ForAppending, CreateIfNotExist); else file_stream = FSO.CreateTextFile(filename, OverWriteIfAlreadyExist); file_stream.Write(text); file_stream.Close(); } function main(args) { var append_mode = false; var i = 0; if(args[0]=="-a") { append_mode = true; i = 1; } var text = WScript.StdIn.ReadAll(); WScript.StdOut.Write(text); for(; i<args.length; i++) { var filename = args[i]; write_file(filename, text, append_mode); } } var args = new Array(); for(var e=new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) args[args.length] = e.item(); main(args);
817 :
名無し~3.EXE :2008/06/19(木) 03:12:35 ID:Qc85Wdgr
当日のイベントログの内容をCSV形式か、TXT形式で吐いてくれるバッチって作れますでしょうか? EVENTQUERY調べていたのですが・・・ イベントログ取りたいサーバーが、Windows NT Server および Windows 2000 Serverなので使えないみたいでした。。。 その他のフィルタリングもできたらありがたいですが、できなければその後加工します。 ヒントだけでもかまいませんので よろしくお願いいたします。
818 :
802 :2008/06/19(木) 08:08:58 ID:+4JJC5K4
判りました。1-9と10以上で条件わけすればよいのは判っていたのですが、 なぜかうまく反映されなかったのが書き直したらうまくいきました。 お騒がせしました。
>>810 前スレ833あたりでしてたよ。NT4に対応しているかは微妙。
あと、head.exeとtail.exeを持ってくれば楽にできる。
powershellのstart-transcriptはどうだろ?
>820 出来るはずなんだが…。 >816は標準出力と、引数に指定したファイルに書き出すコードだぞ? 標準出力をリダイレクトしたら表示されないかも知れんが…。
>しつつ
>>822 816って
dir *.* | tee.bat log.txt
みたいな使い方するもんだよね?
ちゃんと継続的に画面出力をログに出力してくれてるが…
進行度みたいな同じ行で更新されるタイプの出力を画面表示と同じように出力できるものってないかな。
これはtee.exeでも同じなんだけど、
1%
2%
3%
…
100%
みたいに更新される毎に改行されてしまうんだな。
hoge | tee.bat log.txt hogeが終了するまで画面に出て来ないだろ?
827 :
824 :2008/06/21(土) 18:23:16 ID:k6N4oqjE
ごめん勘違い。
>>816 の奴ダメだわ。
今までtee.exeを使ってた場所を816ので書き換えてやってみたつもりだったんだが
ちゃんと書き換わってなかった。tee.exeの動作を816の奴の動作と勘違いしていた。
書き換えたらダメだった。使えん。
>>826 進行度を出力してるのは自分が作ったバッチじゃなくて別の実行ファイルなんだ。
だからタイトルに進行度を表示するってわけにはいかない。
コマンドライン型のアンチウィルスとか、アーカイバのログを取ろうとしてるんだ。
今は一旦冗長なログを出力してからいらないところを削除したりしてる。
readallやめてread(1)でぐるぐる回せ
ああ「しつつ」なのか。 ちょっと書き換えれば可能だが…やってみようかな。
こんなもんか? @if(0)==(0) echo off cscript //Nologo //E:JScript "%~f0" %* goto :EOF @end Array.prototype.shift = function() { var r = this[0]; for(var i=1; i<this.length; i++) this[i-1] = this[i]; this.length--; return r; } var FSO = new ActiveXObject("Scripting.FileSystemObject"); var args = new Array(); for(var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) args[args.length] = e.item(); var append_mode = false; if(args[0]=="-a") { append_mode = true; args.shift(); } var files = new Array(); while(args.length > 0) files[files.length] = (append_mode ? FSO.OpenTextFile(args.shift(),8,true) : FSO.CreateTextFile(args.shift(),true)); while(!WScript.StdIn.AtEndOfStream) { var c = WScript.StdIn.Read(1); WScript.StdOut.Write(c); for(var i=0; i<files.length; i++) files[i].Write(c); } for(var i=0; i<files.length; i++) files[i].Close();
俺みたいなバッチしかやったことのない無能人間には、 wshの行間で何をやってるかわからないので、解説頼む
ID:zfiUXgMk の指摘を元に >816 を改造しただけだよ
流れぶった切ってすまんが CUI上で 複数のコマンドを同時に宣言する時って&っすよね? at 21:00 /interactive /every:M,T,W,Th,F "C:\TV.exe"&sutdown -s -t 10 みたいな感じで
転載 条件付き処理記号を使うと、同じプロンプトから複数のコマンドを実行して、コマンドの実行結果に基づいてコマンドを実行できます。 アンパサンド (&) は、単一のコマンド ライン上で複数のコマンドを区切ります。 かっこは、複数のコマンドをグループ化します。 セミコロン ( ; ) またはカンマ ( , ) は、コマンド パラメータを区切ります。 キャレット (^) を使うと、コマンド記号をテキストとして使用できます (その記号の特殊な意味は無視されます)。 二重のアンパサンド (&&) を使うと、この記号の後に続くコマンドは、記号の前のコマンドが成功した場合にだけ実行されます。 二重のパイプ (||) を使うと、この記号の後に続くコマンドは、記号の前のコマンドが失敗した場合にだけ実行されます。
ありがと 惚れたました
>>830 素朴な疑問なんだけど、
Arrayクラスが元からもってるshiftメソッドをわざわざ定義しなおしたり、
せっかくEnumerator作ってるのにいったん配列に入れなおしたりしてるの
は何故?
あと○秒後に、○○コマンドを実行するっていうのはできるんですかね? shutdown -t 10 とかは使えるのはわかるんですが 例えば、cd \を10秒後に行うとかってできるんですかね?
>>839 やっぱりディレイコマンドっていうのはないんですね・・
>837 clock.aviを再生して終わるのを待つ
Sleep.exe: Batch File Wait > sleep /? Usage: sleep time-to-sleep-in-seconds sleep [-m] time-to-sleep-in-milliseconds sleep [-c] commited-memory ratio (1%-100%) rktools.exeでタダで配布されているmicrosoft公式サイト
日本語大丈夫ですか?
めんどくさいから主語と助詞を抜いてるのもわからないのか 行間補完しろアホ こんな糞スレにキチガイ粘着がいるとは思わなかった 今後このスレでは二度と教えないから Sleep.exeはrktools.exeでタダで配布されている。microsoft公式サイトで
ていうかSleep.exe rktools.exe マイクロソフト公式 必要なキーワードはすべて網羅されてるからそれでわからなかったら人辞めろ わかってるのに揚げ足取りやってるなら、クズ人間
スレ住民 -1
>836 前者は古いバージョン用。今のバージョンなら要らん。 後者は単に俺が Enumerator 苦手なだけw 是非書き直してくれ
>>837 --- sleep.vbs ---
WScript.Sleep WScript.Arguments(0)*1000
---------------
C> cscript //nologo sleep.vbs 10&cd \
>>845 このスレの住人ならsleep.exeなんてあえて指摘されるまでもないでしょう。
それより本当に大丈夫ですか?
頭。
おまいこそだいじょぶか。変な犯罪に走ったりすんなよ。
852 :
名無し~3.EXE :2008/06/24(火) 23:47:18 ID:DPjkb0o1
start /b aaa.exe start /b bbb.exe start /b ccc.exe という風に同時にコマンドを起動したあと、 すべてが終了するのを待って eee.exe を実行したいんですけど どうすればいいですか? unixだったらwaitで待てるんだけど
>>854 /wait のことだったらこの場合使えないと思いますが・・
>>853 754を参考にしてみようとおもうんだけど
start /b コマンド の前後にexecutingファイルの作成と削除を入れたいんですが、
start /b type nul > executing.1 & command1 & del executing.1
という風に書いても、DOSの場合は、順番に実行されるわけではないんですか?
tasklistを回して終了を監視すればいい
それぐらいならwsh使うわ
Set WshShell = CreateObject("Wscript.Shell") Set a = WshShell.Exec("notepad.exe a.txt") Set b = WshShell.Exec("notepad.exe b.txt") Set c = WshShell.Exec("notepad.exe c.txt") Do While a.Status = 0 Or b.Status = 0 Or c.Status = 0 WScript.Sleep 1000 Loop Set d = WshShell.Exec("msg * うんこ")
@echo off
start /B copy nul executing.1 ^& notepad ^& del executing.1
start /B copy nul executing.2 ^& notepad ^& del executing.2
start /B copy nul executing.3 ^& notepad ^& del executing.3
:1
cscript //nologo sleep.vbs 1
if exist executing.1 goto 1
if exist executing.2 goto 1
if exist executing.3 goto 1
msg * うんこ
・・・ sleep だけは、バッチじゃ無理。どっかから探してくるか、
>>849 使う
正直sleep.vbsじゃ そのディレクトリ内にそのbatかvbsファイルないとできないじゃん
低負荷の音声ファイルを再生させるとかで1つ
ping.exe localhost -n 1
>>860 頭は生きてるうちに使うもの。
echo WScript.Sleep WScript.Arguments(0)*1000>sleep.vbs
>>858 >>859 ほんとありがとうございます。
sleepはvbsでごまかすようにして、コマンド群は一括で定義できるように
以下のように改造してみました。
しかしcalcがないと怒られて終わってしまいます。何が悪いんでしょう??
@echo off
set com=( calc notepad )
for /f %%I in %com% do start /B copy nul executing.%%I ^& %%I ^& del executing.%%I
:1
set /a wtime=1*1000
echo WScript.Sleep %wtime% > tmp.vbs
cscript //NoLogo tmp.vbs
if exist executing.* goto 1
del tmp.vbs
echo END
calc | notepad & echo 終わった
カレントにあるファイル a_1.txt a_2.txt a_3.txt a_4.txt を b_1.txt b_2.txt b_3.txt b_4.txt にリネームしたいんだけど、 for でちょちょっとできないでしょうか
わざわざfor /l %i in (1,1,4) do ren a_%i.txt b_%i.txtなんてやらんでもren a_?.txt b_?.txtでいいじゃん
すんません コマンドの標準出力を変数にセットするにはどうすればいいですか? ちなみに aaaa というプロセスがいるかを確認するために tasklist | find "aaaaa" の結果を変数にぶちこんで、その変数がNULLかどうかで判定しようと考えています。
tasklist | find "aaaaa" > unko.txt for %%I in (unko.txt) do if %%~zI == 0 echo ぬるぽ
パイプ使ってfindなんかする理由がよくわからんが、こんなんでええちゃうの for /F "tokens=1 delims= " %%i in ('tasklist.exe') do if "%%i"=="aaaaa.exe" (echo=aaaaa.exeを見つけた)
if errorlevel 1だろ?
tasklist | find "aaaaa" && echo ぷげら!
>>871 そういう風にやるなら、
for /f %%i in ('tasklist /fi "imagename eq aaaaa.exe" /nh') do @echo %%iを見つけた
までやった方がいいかな
tasklistがないお
windows2000でnetshを使って、IPアドレス設定バッチを作ったんですが、 LANケーブルが抜けている状態だと正常に変更できません。 もろもろの事情でLANケーブルが抜けている状態でも変更できるように したいのですが、どうすればよいでしょうか?
SPから抜けよ
フォルダであるかどうかをどうやって調べますか。
881 :
876 :2008/07/03(木) 22:22:33 ID:JNY6wKZ3
>>877 試してみたところ変更できました。
できればレジストリをいじらずに変更できるようにしたいんですが、
可能でしょうか。(レジストリをいじることに抵抗があるもので・・・)
>>880 NUL を使え。
IF EXIST C:\うんこ\NUL ECHO ちんこ
883 :
sage :2008/07/03(木) 23:17:01 ID:EKdOSVCV
>>882 こんな技があるとは...
助かりました。あざす。
884 :
877 :2008/07/04(金) 06:21:02 ID:Egjxu5mx
>>881 MSがオフィシャルなサイトでレジストリをいじれと言ってるわけなんで、
他の手はないものと思われ。
もしGUIとかがあったとしても、いずれにせよ内部的にはレジストリの
同じエントリが変更されるんだろうし。
複数台で変更するのが面倒とか自分以外の人間にやらせるのが不安とかなら、
.regファイルを作るのが正解な気が。
このスレとム板のバッチスレってどっちがレベル高いの?
| ──/ __/_ \ __|__ヽヽ / | ∠ / \ \ | / ̄ ̄/ ̄ ̄ | \ / / / | \ / \_/ α/ / | /
こっちのほうが高い。というか住人がみんな冷静
/ ̄\ | | \_/ | /  ̄  ̄ \ / _ノ ヽ、_ \ / o゚|⌒| |⌒|゚o \ / / / | _|_ ― // ̄7l l _|_ | | (__人__). | | _/| _/| / | | ― / \/ | ――― \ | `|⌒|´ | / | | / | 丿 _/ / 丿 / ̄ |川!| ̄|川i| ̄\
ム板のバッチスレは若干1名基地外が居るんだよな ひたすらこのスレへ誘導する奴
疎開スルー
waitってどうするの?
子プロセスのいずれかが終了するまで呼び出し元のプロセスの実行を一時停止するんだよ。
PAUSE
894 :
名無し~3.EXE :2008/07/10(木) 01:11:41 ID:QngBkBT/
すみません。しつもんさせてください。 例えば、バッチを作成していて 上のコマンドの命令を行えなかった場合、エラーを表示したいのですが 例で di if errorlevel 1 echo a てやるとaって表示されるのですが これをエラーの場合は、a,エラーでない場合は、dirを実行したい と記述するにはどうしたらいいですか?
di && echo a || dir
if/?
IF %ERRORLEVEL% == 0 (dir) ELSE (ECHO a)
直前のコマンドが例えばdelの時はどうする?
あ〜なるほどね。DEL は ERRORLEVEL を返さないな。 DEL の前に IF EXIST するか、 DEL の後に IF EXIST するか、 樹海で祝ってやるか、 どれかだな。
del hoge | find /v "" if errorlevel 1 echo error!
902 :
名無し~3.EXE :2008/07/11(金) 18:21:23 ID:NOWkZyK+
一つ目のプログラムを引数つきで実行させて それが終わったら次も同じって感じにするのはどうやったらいいでしょうか。
903 :
902 :2008/07/11(金) 18:33:00 ID:NOWkZyK+
流れ適には cd カレントパス(batファイルのある場所) program -i カレントパスと指定文字列を足したファイル名 って感じです。
>>902 :hoge
hoge.exe hogehoge
goto hoge
CD %~dp0 program -i %CD%\指定文字列
start /wait で終了待ち。
907 :
名無し~3.EXE :2008/07/13(日) 02:39:59 ID:rp/1UDNc
Linuxのsplitのように、ファイルを分割するためのコマンドは、MS-DOSには、存在しますか?
ないんでねーの、今時MS-DOS触らにゃならんとは大変ね
909 :
名無し~3.EXE :2008/07/13(日) 03:06:30 ID:3wulhBBH
Javaのコンパイルとかコマンドラインでやってるよ
つdebug
912 :
名無し~3.EXE :2008/07/14(月) 19:43:37 ID:n25RoDk2
xpにテルネットでファイルを編集したいんですが デフォルトのコマンドのみで可能ですか?
どんなマシンからどんなマシンへ接続するんだよ
それを言えば、できるようになるのかな???
915 :
名無し~3.EXE :2008/07/15(火) 00:22:15 ID:qYFgCPso
vistaはeditが復活してたんですっ飛んできました
edlin
edlinって人間にも使うことができるものなんですか!?
一応使えるが普段はまず使わないな 起動してすぐ ? 打ってEnterで 一応一通りの使い方は解るはずだぞ
919 :
名無し~3.EXE :2008/07/15(火) 19:37:07 ID:cCtJmu61
Vistaではedlinもeditも日本語使えないんじゃ、英語だけで済ますの?
素直に「できません」と、なぜ言えない?決して恥ずかしい事では無いんだぞ。
ほんとだEditがある。英語だけど w
@echo off setlocal set count=0 :loop set flag=0 set /a count=count+1 set /a y=(count/3)*3 if /i %y% equ %count% set flag=1 echo %count% | find "3" >nul && set flag=1 if %count% geq 40 set flag=2 if /i %flag% equ 1 ( echo %count%^G ) else ( echo %count% ) if /i %flag% equ 2 goto :end sleep 1 goto :loop :end endlocal
実際に使ってみると難しいエディタじゃないぞ <<EDLIN 元々使う理由は無いけどVistaでは本気で使えなくなったな
>>912 可能
for + set + echo
東京から沖縄まで歩いて行くことが出来ますか?
海あるから泳がないと無理だろな。
927 :
名無し~3.EXE :2008/07/16(水) 22:09:57 ID:Syxd9oxK
座って行けると思うがw >素直に「できません」と、なぜ言えない?決して恥ずかしい事では無いんだぞ。 話しは少しずれるが、edlinやeditが本気で使えなくなったこと(日本語が使えない)を恥ずかしがる感性をMSが持ち合わせていたならばと思ってしまう。
海底も歩けるよ!
すんません ftpを簡単にするにはどんな書き方がありますか?
>>929 FTPコマンドの自動化について言ってるのであれば、
FTP スクリプチ
で検索して下さい。
それ以外である場合、回答できるAAAクラスのエスパーがこのスレにはいないと思われるので、
どうしたいのか詳細を書いて下さい。
FTP スクリプチの検索結果 11 件中 1 - 11 件目 (0.26 秒)
すくりぷち☆
batファイルでコマンドラインエディタを作るというのは どのくらい大変そうですか?
コマンドラインエディタ.bat edlin %*
936 :
名無し~3.EXE :2008/07/23(水) 15:49:22 ID:tOjBlxX+
DOSのバッチでwget(外部コマンド)で複数ファイルをダウソするバッチを作っています。
WEBサーバー(IIS)にパスワードがかかっていて。
wget --user=(ユーザ名) --password=(パスワード)
http://....... でとってきてくれる。
ここまではいいのですが、ユーザ名にスペースが使われていて
wget --user=A BC --password=pass とやると
区切り文字はスペースだからユーザ名は"A"と判別してしまう。
区切り文字をカンマ","にすれば
wget,--user=A BC,--password=pass,
http://..... とやってコマンドが通るような気がする。
http:// (ユーザ名):(パスワード)@www.
ともかけるので
http://A BC:pass@www
とやってみたが、区切り文字がスペースなのでエラーになってします。
どなたかお知恵を拝借願えないでしょうか。
"--user=A BC" でいけそうな気がする
938 :
名無し~3.EXE :2008/07/23(水) 16:43:57 ID:CMWfKaqy
>>937 "--user=A BC"
--user="A BC"
"を'にした、
A^ BC
A\ BC
A%20BC
だめだった
--user=ABC で通らない?
半角スペース含まれてるから、じゃねーの。>936にあるが。 うちは--user"A BC"でいけてるが。
dos窓でcdするときに、ドライブを跨ぐとなぜ/Dオプションなんてつける必要があるんですか? C:\>cd D:\hoge\hogeで通じるんじゃないでしょうか?
>941 ドライブ毎にカレントディレクトリの情報を持ってるから、とでも言えば良いのかな。 そもそも、カレントドライブ変更とカレントディレクトリ変更は本来別の操作。 カレントドライブの変更は d: と打てばDドライブへ。 c: と打てばCドライブへ。 カレントディレクトリの変更は、ご存じの cd コマンド。 確か cd に /d オプションが付いたのは途中のバージョンからだったような。 /d は「ドライブを跨ぐ」というより「ドライブ変更とカレントディレクトリの変更を同時にやる」って感じ。
カレントディレクトリがドライブごとにいくつもあるって考え方自体がウンコすぎる。 たとえば現在のカレントが(←って変な文章だが)C:\ だったとして、 CD A:\ COPY A.TXT B.TXT とやっても、コピーされるのは C:\A.TXT であって、 決して A:\A.TXT では無い。 マイクロソフトはそのウンコさ加減に気づいたから、/D オプションを追加したんだろよ。 PUSHD ははじめからドライブまたぎなんだし。
D:\000\111というフォルダ構成がある時、フォルダ111以下のファイル群を111.zipという名で圧縮して そのファイルをフォルダ000に作ってからフォルダ111を削除する、ということをwinRARを使って作ってみました。 cd /d "D:\000\111\" && "C:\Program Files\WinRAR\WinRAR.exe" a "..\111.zip" && cd ..\ && rmdir /s /q "111\" この一文をコピペしてbatファイルを作って動かすと正常に動作するけれど、コマンドプロンプトを起動して貼り付けて 実行すると、winRARがエラーを出して処理が中断してフォルダ111下のファイルが消えてしまいます。 どうもwinRAR圧縮中に圧縮対象のファイルが削除されているようです。 &&で各コマンドを繋げているのに、なぜこうなるのですか。 batファイルとコマンドプロンプトの挙動の違いを教えてください。
>winRARがエラーを出して なにかエラーメッセージのようなものは表示されないの?
946 :
944 :2008/07/28(月) 01:31:07 ID:GG94rwXw
>>945 winRAR診断メッセージ 追加するファイルがありません。
コマンドプロンプト プロセスはファイルにアクセスできません。別のプロセスが使用中です
この時点でフォルダ111下のファイルは無くなってます。zipも作成されていません。
じゃぁ、start /w を付ければいいんじゃないかな。こんなふうに cd /d "D:\000\111\" && start /w "C:\Program Files\WinRAR\WinRAR.exe" a "..\111.zip" && cd ..\ && rmdir /s /q "111\" こっちは手元に WinRAR が無いから実際に試せない。自分で試してみてね。 (WinRAR と DEL がマルチタスクで同時に動いてるのかもしれない)
STARTは最初の""をタイトルと判断する、みたいな仕様がなかったっけ? START "" /W "C:\Program Files\WinRAR\WinRAR.exe"の方が無難な感じ。
すいません Dosのコマンドラインで、Unix系より優れていると言える所ってありますか?
DOSコマンドが使える
951 :
944 :2008/07/28(月) 23:24:35 ID:GG94rwXw
>>947 ,948
start "" /w の追加で正常に動くようになりました。ありがとう。
>949 ホンモノのMS-DOS時代はDOSアプリが結構あったからまだ良いんだけど コマンドプロンプトになってからは、利点あんまり無いな。 そもそも、GUIであるWindowsに取って付けたようなアプリケーションだし。 Unix系はコマンドないと手が届かない部分が結構あるからこそ、充実してるとも言えなくもない。
ひとそれぞれじゃないか。 コマンドに慣れて無い人は窓を使えばいい。 無理してコマンド使うこたぁねぇよ。
すいません Windowsの窓アプリで、Unix系より優れていると言える所ってありますか?
その歴史からWindowsのデスクトップアプリのほうが圧倒的に使える物が多いよ。 まだ、かもしれないけどね。
「Dosのコマンドライン」ってのが何を指してるのか分からないけど 最大のメリットは現状のトップシェアOSであるWindowsで標準で使える ってことだと思う。
分からないならレスしなくていいです。すっこんでてください。
Linuxがすべての面で優れててDOSが劣る存在だと主張するやつは人間として糞
NTメインになってDOSは確かに使わない時代になったとおもうよ。けど
唯物論はこのOS飽和時代に全く意味は無いだろ?好きなのを適宜習得すればいいの
>>954 はWINDOWS板にわざわざやってきてごくろうさんね。何を考えてるんだろうな。
偉い人は下を見て馬鹿にする暇があるなら、使いにくいUNIXのコマンドラインよりももっとすばらしいものを開発してください。
PowerShell
>>960 マジレスでUNIX系のシェル超えててワロタw
プッ・・・ゲイツのオナニーやん
DOS窓が使いにくいんだよ tera termみたいのでつなげないの? 自分にtelnet以外で
ckwmodでも使ったら?
すいません、質問です。 Dosプロンプトで、ファイルの更新日時やアクセス時刻を変更出来るコマンドはありませんか? (いわゆる、Unixでいうところのtouchや、utime関数に相当するものです。) 一応ぐぐってみたのですが、それを実現するフリーのファイラーソフトとかはあるようなんですが、 コマンドプロンプト(またはbatファイル)のみで(何も追加インストール等せずに)実現することは出来ないでしょうか? copyやxcopyでは、元のファイルのタイムスタンプを保持してしまいます。 ちなみにOSはXP-sp2です。
>>967 自分はNircmd使ってる。(他にも実現できるToolあると思うけど)
標準cmdではコマンド無いんじゃないか?
>>968 ありがとうございます。ちょっと調べてみます。
>>969 うおおお、そんな手があったとは・・・・。
そういえば自分も、Unix環境でなら、0byteのファイル作成したり、
圧縮済みのlogファイルを切り詰める時に、cp /dev/null /path/to/file とかやったことがあります。
だったら、 COPY NUL C:\path\to\file でいいんじゃない?
COPY C:\path\to\file + NUL C:\path\to\
A01.bmp , A02.bmp , A03.bmp , … の先頭に1文字付け足したいのですが,うまくいきません。 1A01.bmp , 1A02.bmp , 1A03.bmp … にならないのはどうして? ren は文字数が増えるとダメなのかな? C:\picture>dir /b A01.bmp A02.bmp A03.bmp C:\picture>ren A0?.bmp 1A0?.bmp 重複するファイル名が存在するか、またはファイルが 見つかりませんでした。 重複するファイル名が存在するか、またはファイルが 見つかりませんでした。 C:\picture>dir /b 1A0.bmp A02.bmp A03.bmp
夏だね
リネーム先のファイル名に?つける気持ちはわからんでもないが、その?は無意味 for %i in (A0?.bmp) do ren %i 1%i
>>975 ありがとうございました。* が1文字の変数のように機能すると勘違いしていました。
ファイルの結合をコマンドラインでやろうと思ってます でも一行に大量に記述すると動かなくなってしまいました これを回避するためにはどうすればいいんでしょうか 複数行を一行として動かす方法などありましたら教えてください 【成功】 COPY /B "0001"+"0002"+"0003"+"0004"+"0005"+"0006" 〜〜 +"0050" "temp.zip" 【失敗】 COPY /B "0001"+"0002"+"0003"+"0004"+"0005"+"0006" 〜〜 +"9999" "temp.zip"
COPY /B "0001" "temp.zip" COPY /B "temp.zip"+"0002" "temp.zip" 〜〜 COPY /B "temp.zip"+"9999" "temp.zip"
>>978 盲点でした ありがとーございましたm(__)m
そのやり方じゃ処理速度が悪いけどな
>>978 だと遅かったのでやっぱり200個ごとにまとめて処理→最後にまとめたやつをさらにまとめる にしました
0000〜9999を一つのフォルダに纏めて copy /b * ..\all.zip
たしk
984 :
名無し~3.EXE :2008/08/03(日) 02:50:21 ID:87Ih2WMQ
埋め
埋め
埋める
埋める
埋める
梅
梅
梅
次スレ建てる前に埋めるなボケ
梅
梅
梅
すみません。 やめます。
埋めるなら次スレ建てろボケ。
勃てろだと? お前が勃てろよ
なんだと!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。