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"
この実行方法だと、実行ファイルが終了しなくてもすぐに次の処理へ進む。
""(ダブルクオーテーション)をしっかりつけないといけないみたい。