bash
# *****************************************************************************************************************
# PowerShell Script - Code by Moshow@https://zhengkai.blog.csdn.net/
# -> transfer yesterday's EOD file to destination SMB folder
# *****************************************************************************************************************
# 1. Got yyMMdd format of yesterday's date
$yesterday = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$pattern = "YOUR_EOD_$yesterday*.TXT"
$timestamp = (Get-Date).ToString('yyyy-MM-dd HH:mm:ss')
# 2. Search for the file in the source folder
$sourceFolder = "E:\DataShare\EOD_IMPORT"
$file = Get-ChildItem -Path $sourceFolder -Filter $pattern | Select-Object -First 1
# 3. Check if the file exists and is not empty
if ($file) {
# 4. Transfer the file to the destination SMB folder
$destination = "\\server111\DataShare\EOD_IMPORT\$($file.Name)"
Start-BitsTransfer -Source $file.FullName -Destination $destination
$logMessage = "[$timestamp] Transfer: $($file.FullName) -> $destination"
} else {
$logMessage = "[$timestamp] Not Found: $pattern"
}
# 5. Log the transfer result
$logFile = "E:\EOD_transfer_log.txt"
Write-Host $logMessage
Add-Content -Path $logFile -Value $logMessage

代码解读
-
注释部分:
bashhttps://zhengkai.blog.csdn.net/
这一部分是注释,说明了脚本的作者和脚本的功能。
-
获取昨天的日期:
$yesterday = (Get-Date).AddDays(-1).ToString('yyMMdd')
这行代码获取昨天的日期,并将其格式化为
yyMMdd
的形式。例如,如果昨天是 2023 年 5 月 25 日,$yesterday
将会是230525
。 -
构建文件名模式:
$pattern = "LMP_CUSTACCT_FILE_D$yesterday*.TXT"
使用昨天的日期构建一个文件名模式,表示要查找以
LMP_CUSTACCT_FILE_D
开头,后跟昨天的日期,并以.TXT
结尾的文件。 -
获取当前时间戳:
$timestamp = (Get-Date).ToString('yyyy-MM-dd HH:mm:ss')
获取当前时间的时间戳,格式为
yyyy-MM-dd HH:mm:ss
,用于记录日志。 -
搜索源文件夹中的文件:
$sourceFolder = "E:\DataShare\LMP_PROD_EXTERNAL\EoD_Import" $file = Get-ChildItem -Path $sourceFolder -Filter $pattern | Select-Object -First 1
在指定的源文件夹中搜索符合模式的文件。如果找到了多个文件,只选择第一个。
-
检查文件是否存在且不为空:
if ($file) {
如果找到了文件,则进入条件语句。
-
转移文件到目标 SMB 文件夹:
$destination = "\\server111\DataShare\LMP_PROD_EXTERNAL\EOD_IMPORT\$($file.Name)" Start-BitsTransfer -Source $file.FullName -Destination $destination $logMessage = "[$timestamp] Transfer: $($file.FullName) -> $destination"
- 构建目标文件夹路径。
- 使用
Start-BitsTransfer
命令将文件从源路径转移到目标路径。 - 记录转移的日志信息。
-
处理未找到文件的情况:
} else { $logMessage = "[$timestamp] Not Found: $pattern" }
如果没有找到文件,则记录未找到的日志信息。
-
记录转移结果到日志文件:
$logFile = "E:\EOD_transfer_log.txt" Write-Host $logMessage Add-Content -Path $logFile -Value $logMessage
- 指定日志文件的路径。
- 使用
Write-Host
输出日志信息到控制台。 - 使用
Add-Content
将日志信息追加到日志文件中。