我在 Google 上搜索了好几天,却没有找到太多帮助。
我正在尝试制作一个 powershell .PS1 文件,每 30 分钟运行一次以检查是否有新文件夹,它将 RAR 文件夹内的内容并保持原始文件夹不变。对这些文件夹中的文件进行 RAR 并删除源。
例如:
我将把目的地设置为:
数据 = “C:\test”
新目标 = “C:\backup”
我将有文件夹:
“C:\test\文件夹 1”
- 一些数据.txt
- 文件
- 我的视频.mp4
“C:\test\文件夹 2”
- 一些数据.txt
- 一些数据2.txt
- 一些数据3.doc
无论这些文件夹里面是否有内容,我都想以原始名称为这些文件夹创建 rar 文件并删除原始文件夹。
我会得到这个:
“C:\test\文件夹 1\文件夹 1.rar”
“C:\test\文件夹2\文件夹2.rar”
当子文件夹中的文件稀有且被删除时,将主文件夹移动到另一个目的地。
新目标 = “C:\backup”
“C:\backup\文件夹 1\文件夹 1.rar”
“C:\backup\文件夹 2\文件夹 2.rar”
foreach($i 在 Get-ChildItem -dir C:\test 中)
我尝试了其中的一些线路,但无法实现。
如果您有任何可以帮助我的东西,请分享。
谢谢您,如果这是重复的问题,请见谅。
答案1
科尔 尝试一下
$Source = "C:\temp"
$Destination = "D:\Backup"
# Gather Subfolders only (-directory parameter). If there are files on the root source remove this parameter to collect all files and folders
$Tree = Get-ChildItem -Path $Source -Directory | Select-Object -Property Name, FullName
# Treatment
foreach ($dir in $tree)
{
# to avoid to overwrite an existing archive file, use the parameter -update
# the name of the destination archive file will be the same of the source dir
Compress-Archive -Path $dir.fullName -DestinationPath $Destination\$($dir.name) -CompressionLevel Optimal -Update
Write-Verbose "$($dir.FullName) has been archived to $Destination\$($dir.name)"
# At this step, a new .zip archive has been created, but the source folder is already present, then go to delete it
Remove-Item -Path $dir.FullName -Force
Write-Verbose "$($dir.FullName) has been removed"
}
我使用具有最佳压缩功能的本机 cmdlet Compress-archive(Powershell>2)
奥利维尔