[MENU] ★TestUtility 〜 テスト支援ツール 〜 ★PowerShellコマンド集 ★サンプルコマンド(バッチ)集 ★ツール置き場 |
◆◇PowerShellコマンド集◆◇
|
compObj.ps1 [使い方] compObj.ps1 "test1.txt" "test2.txt" # オブジェクト比較 param($a, $b) $obja = Get-Content $a $objb = Get-Content $b Compare-Object $obja $objb |
countChar.ps1 [使い方] countChar.ps1 "test1.txt" # テキストファイルの行数や文字数などをカウントする param($a) $txt = Get-Content $a $txt | Measure-Object -Line -Character -Word | Format-List Characters,Lines,Words |
getFolderSize.ps1 # ファイル単位じゃなくフォルダ単位で容量一覧を作成する Get-ChildItem ` | Select-Object Name, @{ name = "Size"; expression = { ` [math]::round((Get-ChildItem $_.FullName -Recurse -Force ` | Measure-Object Length -Sum ` ).Sum /1MB ) ` } } |
getWorkingSetInfo.ps1 # ワーキングセットのサマリーを表示する get-process | measure-object -property workingset -minimum -maximum -average |
◆◇サンプルコマンド(バッチ)集◆◇
:YMDHH24MISS 前回実行時刻を取得 :FORFILES 指定した日数より古いファイルを削除 :SHIFT ドラッグ&ドロップでファイル名やファイルパスを出力 :PING 何分後に実行をサクッと実現 :ERRORLEVEL エラーの拾い方 :FOR 繰り返し文の使い方 :PARAM 受け取ったファイルから取得するものの選び方(サイズ、ファイル名、拡張子等) :GREP GREP検索もどき(指定したフォルダ内のファイルすべてに対して全文検索) :LOG リダイレクト機能を利用したログの書き方サンプル :COLOR コマンドプロンプトの背景色変更 :SVN 任意のフォルダをSVN更新した上で所定のフォルダにバックアップを作成 |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :YMDHH24MISS
rem 前回実行時間を取得 rem iniファイルの記載 2016/09/01 12:23:28 for /f "tokens=1,2" %%A in (%BAT_PATH%\ZENKAIJIKOKU.ini) do (set YMDHH24MISS=%%A %%B) 簡単そうで意外とはまったのでメモしときます↓ if "%ERRORLEVEL%"=="0" (echo %DATE% %TIME:~0,2%%TIME:~2,2%%TIME:~4,4% > %BAT_PATH%\ZENKAIJIKOKU.ini) else (goto END) |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :FORFILES
古いバックアップファイルとかを一気に削除したい!
そんなあなたに必要なバッチはこれ↓↓
サンプルコマンド(バッチ)
----------------------------------------------------------------------
@echo off
rem 対象ディレクトリ
set DELDIR=D:\tmp rem 削除対象ファイルの拡張子 set FILETYPE=zip rem 何日前のファイルを削除 set NUM=3 forfiles /P %DELDIR% /M *.%FILETYPE% /D -%NUM% /C "cmd /c if @isdir==FALSE echo /s @path"
set/p INP="削除して問題ない場合は y を入力してください>>"
IF "%INP%"=="y" (goto DEL-FILE) else (goto END)
:DEL-FILE
forfiles /P %DELDIR% /M *.%FILETYPE% /D -%NUM% /C "cmd /c if @isdir==FALSE del /s @path"
:END
pause
----------------------------------------------------------------------
FORFILESコマンドは恥ずかしながら最近知りました
これまで日数指定でファイルを削除するときはVBScriptをつかっていましたが、
これからはこのコマンドしか使わないでしょう
ちなみにforfilesを何も引数無しで実行すると、
現在のフォルダーにあるファイルやフォルダーの一覧が表示され、
/sオプションを付けると、サブフォルダーも含めた一覧が表示されるようです
|
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :SHIFT
選択したフォルダやファイルのパスをコピーしたいとき、 「スタート」 >「プログラムとファイル名を検索」 >「shell:sendto」と入力 >SendToフォルダ に以下のバッチを入れておくと非常に便利です☆ サンプルコマンド(バッチ) ------------------------------------------------------------------------------- @echo off rem color F5 背景:白色/文字:紫色 color F5 rem 引数を確認し、NULLでなければファイルパスを表示 :CHECK if "%1"=="" goto END echo %1 shift goto CHECK :END pause ------------------------------------------------------------------------------- これさえあれば、 フォルダ・ファイルを選択 >右クリック >「送る」 >上記バッチ でコマンドプロンプト上にパスを出力できます。 コンソール上のパスは右クリックの「範囲指定」でコピーできます◎ 「 shift 」 ← バッチプログラムにおいて、パラメーター「%0」〜「%9」を一つずつ小さい方に番号をずらします。 |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :PING
30分後、上手く処理が流れていたら皆にメールを送っておこう 10分したらファイルのバックアップをはじめよう 5分後にコンピュータをシャットダウンしよう 等々 元のプログラムにあらかじめ追加したり、 タスク(スケジューラ)に登録したりするのは意外と面倒ですよね そんなときに重宝するのが以下のような簡易バッチ 実行したいプログラムと実行時間を入力するだけの超お手軽プログラムですので デスクトップに置いておくのはアリかなと思います☆ ------------------------------------------------------------------------------- @echo off set/p PID="実行したいプログラム(フルパス)を入力してください>>" echo. set/p TID="何分後に実行しますか?(X分 → Xを数字で入力してください)>>" echo. rem 分(mm)を秒(ss)に変換 set /A TIMER=%TID% * 60 rem 指定した回数pingコマンドを投げ続けます(pingコマンドは1コマンド1秒) ping localhost -n %TIMER% > nul call %PID% pause ------------------------------------------------------------------------------- 「ping」 ← 本来、ネットワークの疎通を確認する際に利用します。 「set /A」 ← 変数の代入時に数式を利用できるようにします。 |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :ERRORLEVEL
ERRORコマンド 処理が正しく行われたか確認したい 又、失敗したらそこで処理を止めたい。。。 そんなときに利用するのがERRORコマンド! プログラムによりますが、ちゃんと戻り値を設定しているものであれば 0〜255?の間の数値で、実行結果(エラーコード)を返します サンプルコマンド(バッチ) ------------------------------------------------------------------------------- @echo off rem color F5 背景:白色/文字:紫色 color F5 call TESTCMD echo 処理内容:call TESTCMD 返り値:%ERRORLEVEL% > log.txt rem チェンジディレクトリ cd.. rem カレントディレクトリへ移動する pushd %0\.. echo 処理内容:cd.. pushd %0\.. :%ERRORLEVEL% >> log.txt echo ERRORLEVELの確認中... > sample.txt call notepad sample.txt echo 処理内容:call notepad sample.txt 返り値:%ERRORLEVEL% >> log.txt rem 処理の後、即座にエラー判定⇒分岐処理を行いたい場合は rem 下記のようなIF分を処理直後に挿入↓↓ if %ERRORLEVEL%==1 goto ERROR exit :ERROR echo 異常終了!! pause :END ------------------------------------------------------------------------------- 「if %ERRORLEVEL%==1 goto ERROR」 ↑実行結果(エラーコード)が 1 だったら ERRORセクションに飛ぶ 「pushd %0\..」←ドライブをまたいでカレントディレクトリの移動ができる大変便利なコマンド(この場合、現在実行中のバッチが配置されているディレクトリをカレントに設定できる) |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :FOR
if文とfor文。プログラムで最もメジャーな処理。 バッチプログラムでは殊更よく使います☆ 設定ファイルを一行ずつ読み込んでただ表示するだけであればこう↓ for /f %%a in (%~dp0表示サンプル.txt) do echo %%a カンマ区切りで読み込んで、3つ目だけ表示するならこう↓ for /f "delims=, tokens=1,2,3" %%a in (%~dp0表示サンプル.txt) do echo %%c 2つ目が”A”だったときだけ3つ目を表示する↓ for /f "delims=, tokens=1,2,3" %%a in (%~dp0表示サンプル.txt) do if "%%b" == "A" echo %%c せっかくですので、意外と便利な2行のコマンドを以下に記載します。 for /f "delims=/ tokens=1,2,3" %%a in ('date /t') do set DAYTIME=%%a%%b%%c mkdir C:\%DAYTIME% ↑何をやっている?日付名称のフォルダをC直下につくるコマンドです。 サンプルコマンド(バッチ) ------------------------------------------------------------------------------- @echo off rem color 80 背景:灰色/文字:黒色 color 80 rem 現在日付データを"/"で区切って1つ目(年)を a に、2つ目(月)を b に、3つ目(日)を c に格納する for /f "delims=/ tokens=1,2,3" %%a in ('date /t') do set DAYTIME=%%a%%b%%c rem Cドライブ直下に日付のフォルダを作成する mkdir C:\%DAYTIME% pause :END ------------------------------------------------------------------------------- 「delims=」 ← ”=”の後ろの文字で読み込んだ文字列を区切ります。 「tokens=1,2,3,,,」 ← 文字区切りして読み込んだ引数をいくつ保持するかを指定します。 |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :PARAM
バッチパラメータ。パラメータ、引数という言葉はエンジニアが最初に魅了される?言葉の一つではないでしょうか。 本日は、"パラメータ"注目して一つサンプルバッチを作ります。 ("バッチパラメータ"、"修飾子"といった言葉でググればより詳しい情報を確認できます。) サンプルコマンド(バッチ) ------------------------------------------------------------------------------- @echo off rem color 80 背景:灰色/文字:黒色 color 80 set PARAM= set PARAM=%~z1 rem パラメータ(引数)を確認します rem 渡されたファイルのサイズが0バイトより大きければ警告メッセージを出します if "%PARAM%" GTR "0" (echo "空じゃない") else (echo "空っぽ") pause :END ------------------------------------------------------------------------------- 上記のbatファイルを作成したら、適当なファイルをドラッグ&ドロップしてみてください。 "0"の部分を書き換えれば任意のサイズ分岐が可能になります。 テキストファイルの見た目から、バイトサイズを予想するゲームなんかしても面白いかも。。。 %1 → "D:\tool\hakomono test.txt" ファイル名に半角スペースがあるため、ダブルクォーテーション が両端についている %~1 → D:\tool\hakomono test.txt ダブルクォーテーションがはずれる %~d1 → D: ドライブ名のみ %~p1 → \tool\ フォルダ名のみ %~n1 → hakomono test ファイル名のみ ※拡張子なし %~x1 → .txt 拡張子のみ %~a1 → --a------ ファイル属性を取得 %~t1 → 2013/03/10 02:05 ファイル更新日時を取得 %~z1 → 328 ファイルサイズを取得 |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :GREP
メジャーなテキストエディタではお馴染みの”grep”検索 ウィキペディアでは「ファイル全体から (global) 正規表現 (regular expression) に一致する行を表示(print)する」の略と説明があります。 今回は”grep”もどきのバッチファイルをつくってみましょう 正規表現の検索はvbsに頼らないと実現できないので、あくまでgrepもどきの簡易バッチですが、 指定したフォルダ内のすべてのテキストファイルから、検索したい文字列を含む行を抽出するプログラムを書いてみます。 サンプルコマンド(バッチ(1))↓ ※ファイル名称:grep.bat / 今回は2つバッチを作ります! ------------------------------------------------------------------------------- @echo off rem color 1D 背景:青色/文字:ピンク色 color 1D rem grep検索対象のファイル一覧を作成します set/p INP="検索対象のフォルダパスを入力してください>>" echo. dir %INP% /b > 検索対象ファイル一覧.txt :FIND-TXT set TXT= set/p TXT="検索したい文字列を入力してください>>" echo. echo ↓↓↓↓↓↓[ 検索結果 ]↓↓↓↓↓↓ > %TXT%_grep結果.txt echo 検索対象のファイルから任意の文字列を含む行を抽出します for /F "eol= delims=, " %%i in (%~dp0検索対象ファイル一覧.txt) do (if "%%i"=="" (goto END) else (call doGrep.bat %%i)) set OPE= set/p OPE="別の文字列でも検索しますか?(y/n)>>" echo. if "%OPE%"=="y" (goto FIND-TXT) else (goto END) :END ------------------------------------------------------------------------------- サンプルコマンド(バッチ(2))↓ ※ファイル名称:doGrep.bat / 今回は2つバッチを作ります! ------------------------------------------------------------------------------- @echo off rem color 1D 背景:青色/文字:ピンク色 color 1D if "%1"=="" (goto END) else (goto GREP) :GREP echo %1 実行中... find /n /i "%TXT%" %INP%\%1 >> %TXT%_grep結果.txt |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :LOG
バッチ処理の醍醐味はやはり複数の処理をダブルクリックで一括実行できるところ そこで必須のコマンドがリダイレクト☆ (例えば、画面に表示されるはずのデータをファイルとして出力することを「出力先をファイルにリダイレクトする」と言う。) 何の処理にどのくらい時間がかかったのか、また今何の処理をしているのかを把握するために ログファイルをつくってみましょう サンプルコマンド(バッチ)↓ ------------------------------------------------------------------------------- @echo off set F_NAME= rem バッチ処理の開始日時を記録 echo 処理開始日時: %date% %time% > log.txt rem 日時(YYYY/MM/DD)からスラッシュをのぞいたフォルダをつくります echo. >> log.txt echo フォルダを作成 >> log.txt set F_NAME=%date:~-10,4%%date:~-5,2%%date:~-2,2% mkdir %F_NAME% rem 処理をツラツラと。。。 echo. >> log.txt echo なんたらかんたら。。。 >> log.txt rem 上で作成したフォルダにログファイルを移動します echo. >> log.txt echo log.txt を %F_NAME% フォルダに移動 >> log.txt move log.txt %F_NAME% rem 処理終了日時を記録 echo. >> %F_NAME%\log.txt echo 処理終了日時: %date% %time% >> %F_NAME%\log.txt pause ------------------------------------------------------------------------------- 「 XXXX > ○○.txt」 ← 新たなファイルを作成した上で、XXXXの内容及び結果を記載します。 「 XXXX >> ○○.txt」 ← ○○.txtがすでにある場合、XXXXの内容及び結果を追記します。 |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :COLOR
DOS窓の背景色や文字色を変更する ------------------------------- color [背景色番号] [文字色番号] ------------------------------- サンプルコマンド(バッチ)↓ ------------------------------------------------------------------------------- @echo off rem color F5 背景:白色/文字:紫色 color F5 pause rem color A1 背景:明るい緑色/文字:青色 color A1 pause rem color DF 背景:ピンク色/文字:輝く白色 color DF pause rem color 1D 背景:青色/文字:ピンク色 color 1D pause rem color 80 背景:灰色/文字:黒色 color 80 pause rem color E5 背景:明るい黄色/文字:紫色 color E5 pause ------------------------------------------------------------------------------- |
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏ :SVN
任意のフォルダAに対して SVN Update を実行した上で、 任意のフォルダBにファイルをアップするバッチ サンプルコマンド(バッチ)↓ ------------------------------------------------------------------------------- @echo off rem color F5 背景:白色/文字:紫色 color F5 rem カレントディレクトリへ移動する pushd %0\.. rem ******************************************************* rem 下記ローカル変数をセットしてください rem 以下のパスに対して前日日付のフォルダを作成>任意ファイルをMOVE>ローカルファイルのアップロードを行います set SEND_PATH=C:\user01\backup rem 以下のパスに対して SVN UPDATE を行います set LOCAL_PATH=C:\svn\work rem MOVE,COPY対象のファイル名称を指定 set FILE_NAME=WORK*.xls rem ******************************************************* set MOVE_TARGET=%SEND_PATH%\%FILE_NAME% set COPY_TARGET=%LOCAL_PATH%\%FILE_NAME% set yy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% set /a dd=%dd%-1 set dd=00%dd% set dd=%dd:~-2% set /a ymod=%yy% %% 4 if %dd%==00 ( if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1) if %mm%==02 (set mm=01&& set dd=31) if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29)) if %mm%==04 (set mm=03&& set dd=31) if %mm%==05 (set mm=04&& set dd=30) if %mm%==06 (set mm=05&& set dd=31) if %mm%==07 (set mm=06&& set dd=30) if %mm%==08 (set mm=07&& set dd=31) if %mm%==09 (set mm=08&& set dd=31) if %mm%==10 (set mm=09&& set dd=30) if %mm%==11 (set mm=10&& set dd=31) if %mm%==12 (set mm=11&& set dd=30) ) echo 送り先: %SEND_PATH% > log.txt echo 送り元: %LOCAL_PATH% >> log.txt echo 処理開始日時: %date% %time% >> log.txt rem 前日日付のフォルダを送り先に作成 mkdir %SEND_PATH%\%yy%%mm%%dd% echo 処理内容: mkdir %SEND_PATH%\%yy%%mm%%dd% 返り値:%ERRORLEVEL% >> log.txt if %ERRORLEVEL%==1 goto ERROR rem 送り先の任意ファイルを前日日付のフォルダに移動 move %MOVE_TARGET% %SEND_PATH%\%yy%%mm%%dd% echo 処理内容: move %MOVE_TARGET% %SEND_PATH%\%yy%%mm%%dd% 返り値:%ERRORLEVEL% >> log.txt if %ERRORLEVEL%==1 goto ERROR rem 送り元の任意ファイルを svn update svn update %LOCAL_PATH% echo 処理内容: svn update %LOCAL_PATH% 返り値:%ERRORLEVEL% >> log.txt if %ERRORLEVEL%==1 goto ERROR rem 送り元の任意ファイルを送り先にCOPY xcopy %COPY_TARGET% %MOVE_TARGET% /Y /Z /C echo 処理内容: xcopy %COPY_TARGET% %MOVE_TARGET% /Y /Z /C 返り値:%ERRORLEVEL% >> log.txt if %ERRORLEVEL%==1 goto ERROR echo 処理完了日時: %date% %time% >> log.txt exit :ERROR echo 異常終了!! echo 異常終了日時: %date% %time% >> log.txt pause :END ------------------------------------------------------------------------------ |