BAT调用POWERSHELL(ps包含异常处理,bat获取ps返回值)

 bat文件内容( 通过获取ps的write-output值来取得成功失败返回值。)

@echo off
REM ****************************************************************************
REM  ID		: COPYFILEBYNAME
REM  処理名	: 終了処理
REM  処理概要	: 戻り値によりメッセージ等を変更する。
REM  書式	: COPYFILEBYNAME.bat
REM  備考	: Powershellをコールする。
REM  履歴	: 2021.08.26 XXXX	新規作成
REM ****************************************************************************

REM ----------------------------------------------------------------------------
REM   プログラム起動
REM ----------------------------------------------------------------------------
echo ------------------
echo %date% %time:~0,8% COPY FILE BAT開始
echo ------------------

REM ****************************************************************************
REM   実行
REM ****************************************************************************
REM powershell set-ExecutionPolicy RemoteSigned
REM powershell D:\WORK\CopyFileByName.ps1
set pscmdline='powershell.exe -file D:\WORK\CopyFileByName.ps1'
for /f %%a in (%pscmdline%) do (set var=%%a)
REM ****************************************************************************
REM   プログラム終了
REM ****************************************************************************
set RETCD_DETAIL=%var%

echo ------------------
echo %date% %time% 終了(CopyFileByName.ps1 戻り値=[%RETCD_DETAIL%])

echo ------------------
echo %date% %time:~0,8% COPY FILE BAT終了
echo ------------------

REM ----------------------------------------------------------------------------
REM   終了
REM ----------------------------------------------------------------------------

exit /b %RETCD_DETAIL%
endlocal

powershell文件内容(实现文件夹之间定时文件复制机能)

#******************************************************************
#*                                                                *
#*    部品名:サーバー間ファイルコピー                             *
#*                                                                *
#*    ver     作成者               日付         変更内容          *
#* -------------------------------------------------------------- *
#*    1.0.0   XXXX                2021/8/6       初版            *
#*                                                                *
#*    Copyright(C) Nomura Research Institute, Ltd.              *
#*                                        All rights reserved.    *
#*                                                                *
#******************************************************************
## ファイル名       : CopyFileByName.ps1
## 処理概要         : サーバー間ファイルコピー機能
## 引数             : なし
## リターン値       : 0(正常終了)
## リターン値       : 1(処理失敗)
## 入力ファイル     : なし
## 出力ファイル     : なし
## 使用外部コマンド : 
## 使用外部環境変数 : 
## 実行ユーザID     : senju
## 注意事項         : 特になし

#-----------------------------------------------------------------
# 定数定義
#-----------------------------------------------------------------
# 例外発生時は処理を停止する
$ErrorActionPreference = "Stop"


###########################################################################
# 共通変数定義
###########################################################################
$msg_Exception = "例外が発生しました。"

###########################################################################
# 初期処理
###########################################################################

# --- 変数定義&初期化 ---
$rtn_cd  = 0                                                           # リターンコード
$my_script = $MyInvocation.mycommand.name                              # スクリプトファイル名
#-----------------------------------------------------------------
# メイン処理
#-----------------------------------------------------------------
$IniFile="D:\WORK\LastExecuteTime.ini"
$PathFrom="D:\WORK\データ元\"
$PathTo="D:\WORK\データ先\"
$DateTime=type $IniFile
$regex = "\d{8}_\d{6}(?=\.dat)" 

TRY{
#net use \\10.100.1.1\ipc$ "aaa" /user:"administrator"

#Write-Host ("$DateTime=" + $DateTime)

Write-Host ("Start DateTime=" + (Get-Date -Format "yyyyMMdd_HHmmss"))

Get-ChildItem $PathFrom *.dat | ForEach-Object -Process{
#    Write-Host('[regex].value=' + [regex]::matches($_.name, $regex).value);
    if([regex]::matches($_.name, $regex).value -ge $DateTime) {
        $file=$PathFrom+$_.name
#        Write-Host($file);
        copy $file $PathTo
    }
}
Write-Host ("End DateTime=" + (Get-Date -Format "yyyyMMdd_HHmmss"))
Get-Date -Format "yyyyMMdd_HHmmss" | Out-File $IniFile

###########################################################################
# 後処理
###########################################################################

# --- 処理終了 ---
# リターンコード返却

#Write-Output ('$rtn_cd=' + $rtn_cd)
Write-Output ($rtn_cd)
#exit $rtn_cd
}
CATCH
{
# 例外を捕捉する (エラーはすべて例外として処理)
  $err = $_
  $error_msg = $err.Exception.Message
  if ($error_msg -eq $null) {
    $error_msg = "ERROR 予期せぬ例外が発生しました"
  }
  
  $msg_Exception = $msg_Exception+$error_msg

  Write-Output ( ( Get-Date -format yyyy/MM/dd ) + " " `
                + ( Get-Date -format HH:mm:ss ) + " " `
                + $my_script + " " `
                + $error[0] )
  $rtn_cd = 1

#  Write-Output ('$rtn_cd=' + $rtn_cd)
  Write-Output ($rtn_cd)

  Pop-Location
  break
}

记录最后一次执行日时的ini文件内容

 执行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值