PS脚本复制新文件

时间:2018-07-13 19:22:22

标签: windows powershell powershell-v2.0 powershell-v3.0

在编写PS脚本时非常漂亮-写了这篇文章并一直在积极使用它,尽管仍然需要一些人工干预才能实现我的目标,而我想完全自动化。

我会尽力解释清楚;

我正在尝试将'.bak'文件每天从源文件夹复制到特定目录中,该源文件夹中已放有文件。问题是我创建脚本的方式,每次运行脚本时,都会创建一个新文件夹,其中包含与先前复制的文件相同的文件。

要复制的文件都按照日期顺序使用相同的名称结构;

#TODO

我该如何编写脚本,使其仅复制较新的文件,而不复制以前已复制的文件?

最好仅创建一个新文件夹,然后更改文件名的特定部分。

这是脚本;

$basedir = "Path:\path"  
$today = (Get-Date).ToString('MM_dd_yy')  
$Filter = '*.bak'  
$location = New-Item -Path $basedir -Type Directory -Name $today  

Copy-Item -Path 'Path:\path' -Destination $location -Filter $Filter -Recurse

任何指针都将不胜感激! 预先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我不确定是否有简单的方法来编写此代码,但是通常的答案是使用Get-ChildItem cmdlet。

“ Get-ChildItem cmdlet可以在一个或多个指定位置获取项目。如果该项目是容器,则它将获取容器内的项目,称为子项目。可以使用-Recurse参数在以下位置获取项目所有子容器,并使用-Depth参数限制要递归的级别数。”

通过使用Get-ChildItem,可以获得两个目录中的文件列表,然后进行比较以查看它们是否具有相同的名称。然后根据您希望用来比较它们的条件构建一个if()参数。

这不是完整的答案,但这是一个很好的起点。

答案 1 :(得分:0)

感谢大家参与,非常感谢!

我已切换到批处理文件路由,并创建了以下文件来实现我的目标;

@echo off
setlocal

set _source="C:\users\user1\desktop\source"
set _dest="C:\users\user1\desktop\dest"

robocopy %_source% %_dest% *.bak /mir /XC /XN /XO

鼓励对此脚本发表任何意见!