#コマンドプロンプトやpowershellの備忘録
PowerShellもコマンドプロンプトから
powershell -command "{command}"
の形式で起動する形で記載する
##Windowsでtailする
sample0.cmd
powershell -command "gc test.log -Wait"
##設定ファイルから環境変数を読み込む
setting.INI
NAME1=hogehoge
NAME2=fugafuga
sample1.cmd
for /F "eol=; tokens=1 delims=" %%i in (setting.INI) do @set %%i
echo NAME1=%NAME1%
echo NAME2=%NAME2%
##自身のprocessid取得
sample2.cmd
powershell -command "get-wmiobject win32_process -filter processid=$pid | foreach-object {$_.parentprocessid;}"
##ファイルの更新時間が24時間以内か判定
sample3.cmd
set cmd="$ft=$(Get-ItemProperty hoge.txt).LastWriteTime;"
set cmd=%cmd%"$checkpoint=$(Get-Date).AddMinutes(-1440); "
set cmd=%cmd%if ($ft -gt $checkpoint){exit 0}else{exit 1}
powershell -Command %cmd%
IF %ERRORLEVEL% EQU 0 (
::hoge.txtの更新時間は24時間以内
)
##DELコマンドのエラー判定
sample4.cmd
DEL hoge.txt 2>&1 | FIND /V ""
IF %ERRORLEVEL% EQU 0 (
::ファイル削除失敗
)
##ファイルの中の文字列が存在する行をカウントして件数を変数に格納
sample5.cmd
FOR /f "DELIMS=" %%A IN ('FINDSTR /R /C:"FIND: STR!!" hoge.txt ^| find /c /v "" ') DO SET COUNT=%%A
##ファイル内の文字列を置換して別名保存(文字コード指定可)
コマンドプロンプトで置換すると文字化ける場合などに便利
Encodingで指定できるコード
sample6.cmd
set cmd="gci hoge.INI | %{(Get-Content -Encoding UTF8 $_)|%{$_ -replace'FIND: STR!','REPLACE: STR!!'}|Set-Content -Encoding UTF8 $_'_EDIT'}"
powershell -Command %cmd%
%%はForEach-Objectのエイリアス
コマンドプロンプトで直接実行する場合は%にする
##ディレクトリのファイルに対して個別に処理を行なう(ラベル版)
forにまとめて書くと長くなる場合に使ったりする
sample7.cmd
for /f "delims=;" %%i in ('dir /b /od c:\target_dir\*') do CALL :SAMPLE_CMD %%i
::バッチの最後にラベルを配置
::ファイルごとにこのラベルが呼ばれる
:SAMPLE_CMD
set FILENAME=%1
::ファイルごとの処理を書く
##ファイルのタイムスタンプ変更
sample8.cmd
powershell -Command "Set-ItemProperty hoge.txt -Name LastWriteTime -Value \"01/31/2010 13:50\""