PowerShell脚本将文件从一个目录复制到另一个目录

PowerShell Script to copy files from one directoy to another

所以我创建了一个脚本来每天从一个目录复制文件并将其推送到我们文件服务器上的另一个目录。因此,他将源文件存储为 year\month\day,即 2022\file.txt。我根据变量提供的脚本进入最近一天,并从当天复制文件并将其推送到目的地。我唯一不能开始工作的是复制文件,我得到了路径不存在的错误,尽管它显示正确。但是,如果我在不使用变量的情况下添加路径,它会按预期工作。

#Get Dates for Folder Creation 
$Timex = Get-Date -Format MM-dd-yyyy_HHmm
$Timex1 = Get-Date -Format yyyyMMdd
$Year = Get-Date -Format yyyy
$Month = Get-Date -Format MM
$Day = Get-Date -Format dd

#Source files that will need to be moved
$APLogs = "C:\Logs\Stack3$Year$Month$Day\Folder\_AP.LOG"
$ARLogs = "C:\Logs\Stack3$Year$Month$Day\Folder\AR.LOG"
$NSLogs = "C:\Logs\Stack3$Year$Month$Day\Folder\_NS.LOG"
$CSLogs = "C:\Logs\Stack3$Year$Month$Day\Folder\_CS.LOG"

#Set the directory for the day
$TodaysDir = "\FileServer\LOGS\LOG_DATA$Timex1\Stack3"

# Test to see if folder [$TestFolder]  exists"
if (Test-Path -Path $TodaysDir) {
    "Path exists!"
} else {
    # Create Directory
    New-Item $TodaysDir -ItemType Directory

 }

   # Copy Log File 
   Copy-Item $APLogs -Destination $TodaysDir
   Copy-Item $ARLogs -Destination $TodaysDir
   Copy-Item $NSLogs -Destination $TodaysDir
   Copy-Item $CSLogs -Destination $TodaysDir

错误消息 = Copy-Item:找不到路径 'C:\Logs\Stack322\Folder\_AP.LOG',因为它不存在。

OPs 代码在我测试时在我的系统上运行良好(这就是我删除之前答案的原因)。

下面的代码是一种更清晰的实现方式。

注意: 在脚本中(与原始脚本相同)有一个未使用的变量'$Timex'。确保文件路径中的某处不需要。

编辑: 查看问题中提供的错误后,文件夹路径与预期完全一致。问题是提供的路径是错误的位置。由于有一个未使用的变量,假设应该使用它而不是 $path.

中的 'Folder'
$Date = Get-Date

$Timex = '{0:MM-dd-yyyy_HHmm}' -f $Date
$Timex1 = '{0:yyyyMMdd}' -f $Date
$Year = '{0:yyyy}' -f $Date
$Month = '{0:MM}' -f $Date
$Day = '{0:dd}' -f $Date


$TodaysDir = "\FileServer\LOGS\LOG_DATA\{0}\Stack3" -f $Timex1
$path = "C:\Logs\Stack3\{0}\{1}\{2}\{3}\" -f $Year, $Month, $Day, $Timex

# If path 'doesn't' exist, it creates it
if (!(Test-Path -Path $TodaysDir)) 
{
    New-Item $TodaysDir -ItemType Directory -Force
}

$Logs = @("_AP.LOG","AR.LOG","_NS.LOG","_CS.LOG")

foreach($x in $Logs)
{
    $log = "{0}\{1}" -f $path, $x
    if(Test-Path -Path $log)
    {
        Copy-Item $log -Destination $TodaysDir
    }
    else
    {
        Write-Host "Could Not Locate: $log"
        $Error[0]
    }
}