読者です 読者をやめる 読者になる 読者になる

ドリルを買ったから家具を作りたい

ひょんなことからドリルを手に入れ、家具を作ろうと思い立ちました。車、釣り、コーヒーもたまーに。雑記。

MENU

Windowsのコマンドでバッチをつくらされたからメモだよ

Windowsのコマンドでバッチを作ったので、メモ。

これまでもなかったし、今後も使う機会はないかもしれませんが・・・?

 

なお、今朝までコマンドなんてipconfigくらいしか知らなかったので、変なことを書いているかもしれませんのでご承知おきください。

 

 

現在ログインしているユーザーフォルダのパスの取得

%USERPROFILE%

 

乱数を取得

%RANDOM%

 

コンピューター名の取得

%COMPUTERNAME%

 

製造番号(シリアルナンバー)の取得

wmic bios get serialnumber

これだと2行目に製造番号が来る。2行目の製造番号だけピンポイントに取得するには、こんな風にアナログなやり方で。
SET SERIAL_NUMBER=
FOR /F "tokens=2 usebackq delims=^:" %%i in (`wmic bios get serialnumber ^| findstr /n /r "." ^| findstr /r "^2:"`) DO @set SERIAL_NUMBER=%%i

 

変数から半角スペースと全角スペースを除去

SET VALUE=AA A A A
SET VALUE=%VALUE: =%
SET VALUE=%VALUE: =%

VALUE変数に「AA A A A」を格納し、その後の2行で半角スペースと全角スペースを除去している。

 

対象フォルダ内のファイルとフォルダの数を取得

SET TARGET=C:\TEMP
SET/A NUMBER_OF_FILES=0
for %%A in (%TARGET%\*) do ( if exist %%A (set /a NUMBER_OF_FILES=NUMBER_OF_FILES+1) )

ファイルとフォルダの数をNUMBER_OF_FILES変数に格納する

空のフォルダもカウントする。

SET/Aとすることで、数値として扱われるので、ファイルが1個以上だったら、みたいな条件分岐ができる。

 

対象フォルダがない場合には作成、あれば何もしない

SET TARGET=C:\TEMP
IF NOT EXIST %TARGET% (mkdir %TARGET%)

 

差分コピー

SET SOURCE=C:\TEMP

SET DESTINATION=D:\ABC

SET LOG=C:\TEMP
robocopy %SOURCE% %DESTINATION% /mir /R:1 /W:1 /LOG:%LOG%\backup.log /NP /XO /XA:S

SOURCE(C:\TEMP)からDESTINATION(D:\ABC)へすべてのファイル・フォルダをコピーする

/mirオプションでミラーリングになり、コピー元になくてコピー先にないファイル・フォルダはコピー先から削除される。

/Rオプションで、コピー失敗時の再試行回数を指定できる

/Wオプションで、コピー失敗時の再試行までの待ち時間を指定できる

/LOGオプションで、ログの出力先を指定できる。上の例だとC:\TEMP\backup.logというログが出力される

/NPオプションで、進捗状況を非表示にする。

/XOオプションで、同じファイルを上書きしないようにする(差分コピー)。同じ名前でも、更新されたファイルは上書きされる。

/XA:Sオプションで、特定のファイルをコピーから除外できる。「S」を指定すると、システムファイルを除外できる。システムファイルはコピーできずエラーになることが多いので、除外すると良いかもしれない。

 

マイドキュメントのパス(Windows7とWindows10ではこれでいけた)

SET SOURCE_DOCUMENT=%USERPROFILE%\Documents

マイピクチャのパス(Windows7とWindows10ではこれでいけた)

%USERPROFILE%\Pictures

マイビデオのパス(Windows7とWindows10ではこれでいけた)

%USERPROFILE%\Videos

お気に入りのパス(Windows7とWindows10ではこれでいけた)

%USERPROFILE%\Favorites

デスクトップのパス(Windows7とWindows10ではこれでいけた)

%USERPROFILE%\Desktop

 

コマンドプロンプト上で入力を受け付ける

ECHO 入力してください。
SET /p PARAMETER=

これでPARAMETER変数に入力内容が格納される。

 

コンピューター名を変更する

SET NEW_NAME=AAAAAAA
wmic computersystem where name="%COMPUTERNAME%" call rename name="%NEW_NAME%"

コンピューター名をNEW_NAME(AAAAAAA)に変更する

再起動すると反映される

 

強制的に、すぐに再起動

shutdown /r /f /t 0

 

ドメイン参加

set DOMAIN_NAME=ABC.LOCAL
set USERNAME=administrator
set PASSWORD=password
wmic ComputerSystem WHERE "name='%COMPUTERNAME%'" CALL JoinDomainOrWorkgroup Name="%DOMAIN_NAME%" Password="%PASSWORD%" Username="%USERNAME%" FJoinOptions=3

 

グループへの追加

net localgroup "Administrators" "ABC\Domain Users" /add

AdministratorsグループにABC\Domain Usersを追加

 

ファイルから特定の行を検索して表示

find "ABCDEFG" C:\TEMP\list.txt

C:\TEMP\list.txt内を検索し、ABCDEFGがある行を返す

 

実行ファイル(EXE)を実行する

CALL C:\TEMP\AAA.exe

この実行方法だと、実行ファイルが終了するまで次の処理に進まない。

例えばインストーラを実行させた場合、インストールが完了すると次の処理に進む。

 

実行ファイル(EXE)を実行する

START "" "C:\TEMP\AAA.exe"

この実行方法だと、実行ファイルが終了しなくてもすぐに次の処理へ進む。

""(ダブルクオーテーション)をしっかりつけないといけないみたい。