このブログを検索

ラベル dos の投稿を表示しています。 すべての投稿を表示
ラベル dos の投稿を表示しています。 すべての投稿を表示

2014/05/17

windowsのコマンドプロンプトでファイル名を検索する

windowsのコマンドプロンプト上でファイル名を検索したかった。
でそのファイルパスも欲しかった。
検索したら以下のコマンドでできるとのこと。
dir /s /b [file name]
任意のディレクトリに移動しカレントディレクトリ以下のファイルを検索する。
そうすると下記のようなパスで帰ってくる。知らなかった。
C:¥users¥user¥aaa¥bbb¥ccc¥ddd.txt

2014/04/19

dosコマンドとpowershellを使って自動でbackburnerを再起動する

backburnerが落ちているのを確認して再起動かけるのが面倒くさかった.
出来るだけ、レンダーマシンが判断してくれないかなと思って、dosコマンドで出来ないものかと考えたら、以下のbatファイルが出来た.

正直、がっつり検証したわけではないので、危うい感じもある.
ただ、自分の環境ではとりあえずうまくいっている(気がする).
# bb-process-checker.bat
-----
@echo off
set BB_FLAG=0
set BB_PROCESS_CHECK=`tasklist /NH /FI "WINDOWTITLE eq Backburner*"  /FI "STATUS eq NOT RESPONDING"`
for /F "skip=1 usebackq tokens=1" %%i in (%BB_PROCESS_CHECK%) do (set BB_FLAG=1)
IF 1==%BB_FLAG% (
        taskkill /F /FI "WINDOWTITLE eq Backburner*"
        taskkill /F /IM WerFault.exe
)
powershell -Command "&{$p='%ProgramFiles(x86)%\Autodesk\Backburner\server.exe';if(!(ps|?{$_.path -eq $p})){&$p}}"
exit
-----
内容は、”応答なし”になっていて、ウィンドウタイトルに”Backburner”うんたらと書いてあるプロセスがあったら、フラグを立ててプロセスを切ってあげて、最後にbackburnerのプロセスを確認して、起動していなかったら起動させる.というもの.

たぶん、powershellだけでもきっと出来るんだろうな.
時間があったら、フルpowershellで再現できるか確認しよう.

あと、taskkillの所で、余計なプロセスを削除するコマンドを追加しまくっていいと思う.

で、上記処理をタスクスケジュールにつっこんで、数分毎に実行させてればうまくいく?

dosコマンドで環境変数を追加する

dosコマンドで環境変数を追加したいと思って調べたら、setxコマンドと言うものがあるようだ.
setx <環境変数名> <値>
上記コマンドだとユーザー環境変数に登録される.
システム環境変数の場合はmオプションを追加してあげると良い.
setx <環境変数名> <値> -m
削除する場合は以下のように、値に空白?Null?を渡してあげると、値を空っぽにしてくれる.
setx <環境変数名> ""
しかし、私の意図する動きではない.
環境変数名ごと消して欲しい.
何か良い手はないものか.

2014/03/31

dosコマンドでビデオカードを確認する方法

ビデオカードの検証で、今何のビデオカードが差さっているかっ手っ取り早く確認する事は出来ないかと思い調べてみたら以下のコマンドで表示出来るようだ.
osはwindows7.検証するビデオカードはNVIDIA.
powercfg /devicequery all_devices
表示された結果内からビデオカードの項目を探すのが面倒なので、findstrに渡して上げる.コマンドプロンプトに表示すると畏まるので、findstrの結果をmsgに渡してあげることで、若干取っ付きやすい表示になると思う.
で、以下が最終形態.
powercfg /devicequery all_devices | findstr NVIDIA | msg %username%
上記コマンドをbatファイルにしておいて、ファイルをダブルクリックすれば、ポップして表示してくれる.
余計な情報も付いてくるけど、ご愛嬌.

2013/05/29

ファイルの削除、変更、移動をした時に、エクスプローラーに反映されない場合

ファイルの削除、変更、移動をした時に、エクスプローラーに反映されない場合は、レジストリに以下の項目を追加してあげれば解決する可能性あり.
=======
.reg ファイルの場合
----
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoSimpleNetIDList"=dword:00000001

=======
ms-dos コマンドの場合
----
reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoSimpleNetIDList /t REG_DWORD /d 1
----
とりあえず、今のところは問題なし.

2013/05/09

MS-DOSコマンドでプログレスバー(進捗状況)を演出する

MS-DOSコマンドでプログレスバーを作れないものかと検索したら、あった。
ちなみに、timeoutコマンドで表現したら、少しいらっとする速度でしたが、pingに置き換えると、小気味良い感じと相成りました。
以下、バッチファイルのサンプル。
---------------
test.bat
-----
@echo off
for /L %%v in (1,1,10) do (
    set /p x=*< nul
    ping 1.0.0.0 -w 1 -n 1 > nul
    rem timeout /t 1 > nul
)
echo  OK!
-----
output....
>********** OK!
---------------

2012/12/20

MS-DOSでスリープコマンド

dosでスリープコマンドを実行するために、pingコマンドを使っていたが、調べてみるとtimeoutコマンドがあるようだ.(sleepコマンドもあるようだが今回は使用していない)
ping
ping 1.0.0.0 -w 5000 -n 1 > nul
timeout
timeout /t 5 /nobreak > nul
ちなみに
ping 127.0.0.1 -n 5 > null
と、かいている人もいるけど、timestamp取ってみると正確ではないようだ.
---------------
test.bat
-----
wmic os get localdatetime
ping 127.0.0.1 -n 5  1>nul
wmic os get localdatetime
-----
out ...
=>LocalDateTime:20121219160952.868000+540
=>LocalDateTime:20121219160956.934000+540
---------------
まあ、batで処理するようなものなので、おおざっぱな値でもいいか.

参考:
timeout/sleepコマンドで実行を一時停止する
http://www.atmarkit.co.jp/fwin2k/win2ktips/1420sleep/sleep.html
windows7 リソースキット
http://www.microsoft.com/en-us/download/details.aspx?id=12616
※この中に入っているかは未確認だけど、暇な時にでも確認してみる.

2012/06/13

SIDを表示するためのコマンド

レジストリから、任意のLicense Keyを削除したかったが、SIDがマシン毎に異なっていたた.
そのため削除を行うのが非常に手間だった.
「SID、コマンド」などで検索したら以下のコマンドでSIDが取得できるようだ.
whoami /user
上記コマンドと組み合わせて以下のようにbatファイルを作成し、任意のレジストリを削除することができた.
for /f "usebackq tokens=2" %%i in (` whoami /user /nh `) do (set VALUE=%%i)
reg delete "HKEY_USERS\%VALUE%\Software\[任意のキー]"
SIDとは「Security Identifier」 の略らしい.

2012/06/06

DOSコマンドでアカウントを作成・削除など

windows GUIからアカウントを作成するのが面倒だったので以下のコマンドを使用した.
アカウント作成
net user [account] [password] /fullname:"[full name]" /comment:"[comment]" /passwordchg:no /add 
アカウント削除
net user [account] /delete
アカウント停止
net user [account] /active:no 
グループに追加
net localgroup "[group name]" [account] /add 
グループから削除
net localgroup "[group name]" [account] /delete 
パスワードを無期限
wmic useraccount where "Name='[account]'" set PasswordExpires=FALSE 
アカウントパスワードの変更
net user [account] [new password] 
グループの作成
net localgroup "[group name]" /add /comment:"[comment]"
dosとwmicを混合して使用する場合は、wmicを末尾にもってきた方がコマンドの失敗がなくて良い.



2012/05/30

MySQL DBの複製

レコードやテーブル数が多いと時間がかかる.
SQLの生成(MS-DOS上だったので-rオプション)
mysqldump -u [username] -p -r dump.sql -l db_source
複製先のデータベースを作成
mysql -u [username] -p -e "create database db_destination"
SQLを複製先へ流し込む
mysql -u [username] -p db_destination < dump.sql
いつも「-p」オプションの後にパスワードを付けていたけど、セキュリティ上よろしくないという事に気付いた.乗っ取られた時にコマンド履歴観られたらと思ってゾッとした.

2012/05/25

リモートマシンの再起動・シャットダウンコマンド

  • wmiコマンド
WMIC /NODE:"リモートマシン名" /USER:"アカウント" /PASSWORD:"パスワード" OS WHERE Primary=1 CALL Shutdown ( or Restart )
※()内は再起動の場合 
  • DOSコマンド
shutdown /s( or /r ) /t 0 /f /m ¥¥リモートマシン名
※()内は再起動の場合
DOSコマンドでの実行する場合は、リモート先に存在するアカウントからでないと正常にコマンドを実行してくれないので、以下の方法でコマンド実行するアカウントを指定.
runas /noprofile /user:アカウント名 "実行コマンド"
※runasコマンドは実行する度に、指定したアカウントのパスワードを聞いてくる.
しかし、上記の方法を何行も書いておくと、記述したマシン分だけパスワードを入力しなければならないので面倒.なので以下の方法で対処.
  • 呼出ファイル(restart.bat)の作成
runas /noprofile /user:アカウント名 "[絶対パス]\main.bat"
  • 実行ファイル(main.bat)の作成
@echo off
shutdown /s /t 0 /f /m ¥¥リモートマシン名01
shutdown /s /t 0 /f /m ¥¥リモートマシン名02
...
  •  シャットダウン開始
C:\Users\user> restart.bat
上記方法は一括でシャットダウンだが、ターゲットを選びたい場合は、引数とforを使用してコマンドを書き換える.
  • 呼出ファイル(restart.bat)の作成
runas /noprofile /user:アカウント名 "[絶対パス]\main.bat %*"
  • 実行ファイル(main.bat)の作成
@echo off
for %%i in (%*) do ( shutdown /s /t 0 /f /m ¥¥%%i )
  • シャットダウン開始
C:\Users\user> restart.bat [リモートマシン名01] [リモートマシン名02] ....
※ ターゲットがXPの場合、以下のことに注意する
DOSコマンドが効かない場合があるのでwmiコマンド対処する.
wmiコマンドは他のプロセスが起動していると、リモート側でダイアログが表示されてしまい、命令がストップしてしまうので、以下のコマンドで前もって起動しているプロセスを落としておく必要がある.
WMIC /NODE:"マシン名" /USER:"アカウント" /PASSWORD:"パスワード" PROCESS WHERE name="target.exe" delete
wmiよりもdosの方が確実に落とせる確率が高いように思う(XPはwmiコマンドでしか落とせなかった).

2012/05/16

dosコマンド実行結果を変数に格納

maxファイルがあるかどうか確認して、存在する場合は変数へ格納したかった.
下記方法で取得可能.
for /f "usebackq tokens=*" %%i in (` dir [folder]¥*.max /b `) do ( set VALUE=%%i )
※上記方法は、ファイルが複数ある場合は対応していない.

2012/04/24

レジストリの削除

.reg ファイルによる指定したキー名と値名の削除
「-(ハイフン)」が重要
キー名:
[-HKEY_LOCAL_MACHINE¥SOFTWARE¥FLEXlm License Manager]
値名:
[HKEY_LOCAL_MACHINE¥SOFTWARE¥FLEXlm License Manager]
"FRANTIC_LICENSE_FILE"=-
.bat ファイルによる指定したキー名と値名の削除
キー名:
reg delete "HKEY_LOCAL_MACHINE¥SOFTWARE¥FLEXlm License Manager" /f
値名:
reg delete "HKEY_LOCAL_MACHINE¥SOFTWARE¥FLEXlm License Manager" /f /v FRANTIC_LICENSE_FILE
dosコマンドの方はヘルプオプションで色々出てきてくれる。



参考:追加、変更、または、登録エントリ (.reg) ファイルを使用してレジストリ サブキーおよび値を削除する方法
参考:コマンド・プロンプトでレジストリを操作する

2012/04/21

wmicでプロセス操作

プロセスを表示
c:¥users¥user > wmic process list
プロセスの一覧の”name”列の値だけ表示
c:¥users¥user > wmic process get name
指定したプロセス情報のみを表示
c:¥users¥user > wmic process where name='[name列に表示された文字列]'
指定したプロセスを終了させる
c:¥users¥user > wmic process where name='[name列に表示された文字列]' delete
リモートマシンのプロセスを終了させる
c:¥users¥user > wmic /node:"リモートマシン名" /user:"アカウント名" /password:"パスワード"  process where name="name列に表示された文字列" delete
ヘルプ参照(詰まったら/?をつけてみる)
c:¥users¥user > wmic process where name='[name列に表示された文字列]' /? 
c:¥users¥user > wmic process /?

windows7 64bit 環境変数

c:¥users¥user¥appdata¥local
上記を指す環境変数は下記で取得
c:¥users¥user > echo %localappdata%
あと個人的に使いそうなのは以下。
%appdata%
%username%
%userprofile%
変数一覧はsetコマンドで確認できるから、必要になったら都度確認すればよい。
c:¥users¥user > set 

2012/04/17

ツリー構造をテキストに起こす

DOSコマンドでDドライブのツリー構造をテキストに起こす。
C:\Users\user> tree D:\ /f > c:\Users\User\Desktop\d-drive.txt