我正在尝试制作简单的 powershell 脚本,该脚本每天都会归档文件。每个文件在其名称的开头都有日期,例如:20211220_Something.csv, 20211220_SomethingElse.txt, 20211219_Something.csv, 20211219_SomethingElse.txt
等...
我想制作从特定目录收集所有带有扩展名(*.txt、*.csv、*.xslx)的文件的脚本,这些目录是:
\\Main\Files
和\\Main\Files\SecondaryFiles
并将所有具有上述扩展名的文件归档到例如\\Main\Files\archive\2021\12\20.12.zip
其中 2021、12 和 20.12 是文件名前缀中提供的日期元素。在 20.12.zip 中,所有文件都来自\\Main\Files
名为“SecondaryFiles”的目录,其中所有文件都来自\\Main\Files\SecondaryFiles
. 归档后,我想删除我刚刚压缩的所有文件。
现在我有这段代码循环遍历目录中的所有文件\Main\
并提取日期前缀。我曾尝试使用 [Datetime]::parseexact() 方法,但它不起作用,因为我的循环返回整个路径。有人知道如何解决这个问题吗?
$Date = Get-Date
$Day = $Date.Day
$Month = Date.Month
$Year = $Date.Year
$directoryPath = "\\Main\Files\archive'"+$Year+"\"+$Month
$files = Get-ChildItem -Path "\\Main\Files" -Include *.txt, *.csv, *.xlsx -Recurse
for ($i=0; $i -lt $files.Count; $i++){
$temp = $files[$i].FullName.split("_")[1]
}
if(!Test-Path -path $directoryPath){
New-Item -ItemType directory -Path $directoryPath
}
Compress-Archive -Path "\\Main\Files", "\\Main\Files\*.txt", "\\Main\Files\*.csv", "\\Main\Files\*.xlsx", "\\Main\Files\SecondaryFiles\*.txt", "\\Main\Files\SecondaryFiles\*.csv", "\\Main\Files\SecondaryFiles\*.xlsx" -Update -DestinationPath "\\Main\Files\archive\$Year\$Month\$Day.$Month.zip"
然后我从原始目录中删除项目。
还有一件事值得一提的是,我不能确定文件夹是否只包含今天的文件。因此,当整个星期都有文件时,脚本应该可以正常工作,可以说20211214
until 20211220
。
因此,我再次想像上面那样压缩存档文件,但今天的日期路径将包含从文件名前缀中提取的日期。