在编写PS脚本方面很在行-写了这个并一直在积极使用它,尽管仍然需要一些手动干预来实现我的目标,我希望完全自动化。
我会尽力解释清楚;
我正试图将".bak"文件从一个源文件夹复制到一个特定的目录中,该文件夹每天都有文件放在其中。问题是我创建脚本的方式,每次运行脚本时,它都会创建一个新文件夹,其中包含一些与以前复制的文件相同的文件。
被复制的文件在日期顺序上都遵循相同的名称结构;
xxxx_2018_01_01_2131231.bak
xxxx_2018_01_02_2133212.bak
xxxx_2018_01_03_2199531.bak
我如何编写脚本,使其只复制较新的文件,而不复制以前已经复制的文件?
如果只创建一个新文件夹,然后文件名的某个部分发生更改,也会很好。
这是剧本;
$basedir="路径:\Path"$today=(获取日期(.ToString('MM_dd_yyy'($Filter='*.bak'$location=新项目-路径$basedir-类型目录-今日名称$复制项目-路径"Path:\Path"-目标$location-筛选器$Filter-重复
非常感谢任何指针!提前感谢您的帮助!
我不确定是否有简单的编码方法,但一般的答案是使用Get-ChildItem cmdlet。
Get-ChildItem cmdlet获取一个或多个指定位置中的项。如果该项是容器,它会获取容器内的项,称为子项。您可以使用-Recurse参数获取所有子容器中的项,并使用-Depth参数限制要递归的级别数。
通过使用Get-ChildItem,您可以获得两个目录中的文件列表,然后比较它们是否具有相同的名称。然后根据您希望用来比较它们的标准构建一个if((参数。
这不是一个完整的答案,但这是一个很好的起点。
感谢大家的参与,非常感谢!
我已经切换到批处理文件路由,并创建了以下内容来实现我的目标;
@echo off
setlocal
set _source="C:usersuser1desktopsource"
set _dest="C:usersuser1desktopdest"
robocopy %_source% %_dest% *.bak /mir /XC /XN /XO
我们鼓励对这个剧本发表任何意见!