LoginSignup
13
12

More than 5 years have passed since last update.

コマンドプロンプト&Powershellあれこれ

Last updated at Posted at 2015-08-04

コマンドプロンプトや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\""
13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12