パソコン鳥のブログ

アクセスカウンタ

zoom RSS バッチファイルからPowerScriptに乗り換える際のまとめ

<<   作成日時 : 2017/06/19 20:43   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

バッチファイルで書いていた内容を、PowerShell で書く際はどのようになるか、その記述の違いについてです。

ファイル拡張子


バッチファイル : .bat
PowerShell : .ps1



実行方法


バッチファイル :
 エクスプローラ上でバッチファイルをダブルクリック
 コマンドラインから .batファイルを実行

PowerShell : 
 powershell -executionpolicy bypass -File test.ps1
 (エクスプローラ上で .ps1 をダブルクリックしても、メモ帳でソースが開くだけです)
 (コマンドラインからの実行でも同様です)



リターンコード


バッチファイル : %ERRORLEVEL%
PowerShell : $LastExitCode



コマンドライン引数


引数へのアクセスは、次のように行います。
バッチファイル :
 %1〜%9

PowerShell :
 $args[n]
  n は 0以上の数字。第一引数が n=0 , 第二引数が n=1 , ... です。



パイプ・リダイレクト


パイプは、バッチファイルと同様に | で記述します。
リダイレクト の > ,>> も、バッチファイルと同様です。

出力先を NULL にする場合は次のようになります。
バッチファイル : > NUL
PowerShell : | Out-Null



変数・環境変数


PowerShell では、環境変数と変数が区別されます。

PowerShell では、環境変数は次のように扱います。
バッチファイル :
  設定:SET %環境変数名%=値
  参照:%環境変数名%

PowerShell :
  設定:$env:環境変数名=値
  参照:$env:環境変数名


変数は PowerShell では次のように扱います。
設定:$変数名=値
参照:$変数名



CALL


別スクリプトを呼び出す場合
(バッチファイルの "CALL ファイル名" に該当する場合)



次の書式で実行します。

呼び出し側

& "c:\ps\for test\test.ps1" henoheno
※ test.ps1 が終了するまで待ちます


呼び出される側

実行されたスクリプトの最後で exit 終了コード を実行します。
呼び出し側は $LastExitCode で exitコードを取得できます。


実行例

test1.ps
& "c:\ps\for test\test.ps1" value1
Write-Host $LastExitCode

test2.ps
Start-Sleep -s 1
Write-Host $args[0]
exit 123



同一スクリプト内で関数呼び出しする場合
(バッチファイルの "CALL :ラベル" に該当する場合)



次の書式で実行します。

function 関数名(引数1,引数2,...){
        :
    return XXX;
}

関数名 引数1 引数2 スペース区切り
$r = 関数名 引数1 引数2



実行例

function func($a, $b){
    $c = $a + $b
    return $c;
}
$ret = func 2 3
Write-Host $ret



CD / CHDIR


PowerShell にも同じコマンドがあります


CLS


PowerShell にも同じコマンドがあります



COPY


PowerShell でも、バッチファイルとほぼ同様の動作です。
但し、デフォルトでコピー先を確認なしに上書きするかどうかが、バッチファイルとPowerShellで異なります。

バッチファイルではデフォルトでは上書き確認しますが、PowerShellでは確認無しに上書きします。

次の各組み合わせが、バッチファイルに対応するPowerShellでの実行方法です。

バッチファイル : copy A B
PowerShell : copy A B -Confirm

バッチファイル : copy A B /Y
PowerShell : copy A B

バッチファイル : copy A B /-Y
PowerShell : copy A B -Confirm



DATE


日付の表示
バッチファイル : date /T
PowerShell : date(2017年6月2日 22:29:47 のように、時間も表示されます)



DEL / ERASE


次の各組み合わせが、バッチファイルに対応するPowerShellでの実行方法です。

バッチファイル :del ファイル
PowerShell : del ファイル

バッチファイル : del a.txt /P
PowerShell : del a.txt -Confirm

バッチファイル : del a.txt /F
PowerShell : del a.txt -Force

バッチファイル : del ディレクトリ(削除の確認後、指定されたディレクトリ直下のファイルだけ削除されます)
PowerShell : del ディレクトリ(削除の確認後、指定したディレクトリが削除されます)

バッチファイル : del *.txt /S
PowerShell : Get-ChildItem -Include *.txt -Recurse | del



ECHO


バッチファイル : echo off
PowerShell : デフォルトで echo off と同じ動作です

バッチファイル : echo 文字列
PowerShell : echo "文字列"



EXIT


PowerShell にも同じコマンドがあります
呼び出し側は $LastExitCode で exitコードを取得できます


FOR


次の各組み合わせが、バッチファイルに対応するPowerShellでの実行方法です。

バッチファイル : FOR %%変数 IN (セット) DO コマンド
PowerShell : Get-Item セット | Foreach-Object{コマンド}


バッチファイル : for %i in (*.txt) DO echo %i (%iで参照します)
PowerShell : Get-Item *.txt|Foreach-Object{echo $_} ($_で参照します)




GOTO


PowerShell には該当するものがありません。


IF


次の各組み合わせが、バッチファイルに対応するPowerShellでの実行方法です。

バッチファイル :
    IF ERRORLEVEL 番号 コマンド

PowerShell :
    if( $LastExitCode -ge 番号 ){
        コマンド
    }

バッチファイル :
    IF NOT ERRORLEVEL 番号 コマンド

PowerShell :
    if( -Not($LastExitCode -ge 番号) ){
        コマンド
    }

バッチファイル :
    IF [NOT] 文字列1==文字列2 コマンド

PowerShell :
    if( 文字列1 -eq 文字列2 ){
        コマンド
    }
    if( -Not(文字列1 -eq 文字列2) ){
        コマンド
    }

バッチファイル :
    IF [NOT] 文字列1==文字列2 コマンド

PowerShell :
    if( 文字列1 -eq 文字列2 ){
        コマンド
    }

    if( -Not(文字列1 -eq 文字列2) ){
        コマンド
    }

バッチファイル :
    IF [NOT] EXIST ファイル名 コマンド

PowerShell :
    if ( Test-Path ".\test.txt" ){
        コマンド
    }
    if ( -Not(Test-Path ".\test.txt") ){
        コマンド
    }

バッチファイル :
    IF [/I] 文字列1 比較演算子 文字列2 コマンド

PowerShell :
    if ( 文字列1 比較演算子 文字列2 コマンド ){
        コマンド
    }

比較演算子は、次のいずれかです。
/I を付ける場合は、比較演算子の頭に c を付けます(例: -ceq)








バッチPowerShell
EQU - 等しい-eq
NEQ - 等しくない-ne
LSS - より小さい-lt
LEQ - 以下-le
GTR - より大きい-gt
GEQ - 以上-ge




MD / MKDIR


PowerShell にも同じコマンドがあります


MOVE


次の各組み合わせが、バッチファイルに対応するPowerShellでの実行方法です。

バッチファイル : move A B
PowerShell : move A B -Confirm

移動先が存在するファイルの場合、デフォルトではバッチファイルでは上書き確認しますが、PowerShellでは上書き確認すること無くエラーになります。
上書き確認するためには、PowerShell では -Confirmオプションが必要です

バッチファイル : move A B /Y
PowerShell : move A B -Force

バッチファイル : move A B /-Y
PowerShell : move A B -Confirm



PATH


PowerShell では、次のように扱います。
設定:$env:PATH=パス
参照:$env:PATH


PAUSE


PowerShell では、Read-Host でキー入力待ちになります。
Read-Host "続行するには何かキーを押してください . . ."
のようにすると、文字列を表示してキー入力待ちになります。



POPD


PowerShell にも同じコマンドがあります


PUSHD


PowerShell にも同じコマンドがあります


RD / RMDIR


PowerShell にも同じコマンドがありますが、注意が必要です。
・対象ディレクトリが空では無い場合の挙動を同じにできません
・デフォルトで削除を確認するかどうかが、バッチファイルとPowerShellでは異なります。

次の各組み合わせが、バッチファイルに対応するPowerShellでの実行方法です。

バッチファイル : rd 対象ディレクトリ
PowerShell : rd 対象ディレクトリ

対象ディレクトリが空では無い場合に、注意が必要です。
バッチファイルでは「ディレクトリが空ではありません」とエラーが出るだけですが、PowerShell では、削除の確認が求められます。

バッチファイル : rd 対象ディレクトリ /S
PowerShell : rd 対象ディレクトリ -r -Confirm

バッチファイル : rd 対象ディレクトリ /S /Q
PowerShell : rd 対象ディレクトリ -r




REM


PowerShell ではコメントは # です


REN / RENAME


PowerShell にも同じコマンドがあります
リネーム先のファイルがすでに存在している場合も、バッチファイルと同様にエラーになります。


SET


環境変数を設定
バッチファイル : set 変数名=値
PowerShell : $env:変数名=値


環境変数の参照
バッチファイル : %変数名%
PowerShell : $env:変数名


環境変数を表示
バッチファイル : set
PowerShell : Get-ChildItem env:


通常の変数
PowerShell では、環境変数ではない通常の変数が使えます。
設定:$変数名=値
参照:$変数名


SHIFT


PowerShell では該当するコマンドはありません(必要ありません)
バッチでは、第1〜第9までの引数は %1〜%9 で扱い、10個以上は扱えませんでした。
SHIFT 実行により、%1 に 第2引数が入り、%2 に第3引数 , ... , %9 に第10引数が設定されます。
このようにして、10個以上の引数を扱っていましたが、PowerShellでは 10個以上の引数を扱えるので、SHIFT に該当するコマンドはありません。


START


次の各組み合わせが、バッチファイルに対応するPowerShellでの実行方法です。

バッチファイル : START コマンド
PowerShell : Start-Process -FilePath コマンド

バッチファイル : START コマンド パラメーター
PowerShell : Start-Process -FilePath コマンド -ArgumentList パラメーター
(引数が複数ある場合は、-ArgumentList value1,value2,value3 のようにカンマ区切りで指定します)

バッチファイル : START /WAIT コマンド
PowerShell : Start-Process -FilePath コマンド -Wait

バッチファイル : copy A B /-Y
PowerShell : copy A B -Confirm




TIME


現在時刻の表示
バッチファイル : time /T
PowerShell : date(2017年6月2日 22:29:47 のように、日付も表示されます)



TYPE


PowerShell にも同じコマンドがあります


参考


PowerShell スクリプト
PowerShellでフォルダ内のファイルを一気に消す | Remember The Time
.bat(バッチファイル)のforコマンド解説。 - Qiita
Windows PowerShell の機能
PowerShellで早速つまずいたw。 ( Windows ) - コンピュータ日々勉強・・・ - Yahoo!ブログ
powershell 入門 条件 IF | 技術的なこと、あれこれ
DOS コマンド一覧 - Programming Field

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
バッチファイルからPowerScriptに乗り換える際のまとめ パソコン鳥のブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる