从名称每天更改的目录中复制文件

时间:2017-11-17 13:23:18

标签: powershell

我的nas上有一个使用此路径的目录:\ nasname \ Software \ Build1.0 \ 在此目录中,您将找到软件组件。

目录的名称每天都在变化,例如现在是6.95a build xxxx。我想在运行我的脚本时将目录的内容复制到测试设置。如果每天都有相同的名字,那就是:

Copy-Item \\nasname\Software\Build1.0\file1.exe \\pc1\DATA\destinationfolder
Copy-Item \\nasname\Software\Build1.0\file2.exe \\pc1\DATA\destinationfolder
Copy-Item \\nasname\Software\Build1.0\file3.exe \\pc1\DATA\destinationfolder
Copy-Item \\nasname\Software\Build1.0\file4.exe \\pc1\DATA\destinationfolder

Build1.0部分发生了很大的变化,所以我希望这一点有通配符。 在\\nasname\Software中有2个目录,build1.0Old

所以它应该是\\nasname\software\***\file1.exe等,但它不能选择OLD目录!

我还尝试创建类似选择目录not "old"或仅复制文件-notin "old"的内容,但它似乎无法使其正常工作。

2 个答案:

答案 0 :(得分:1)

您可以在路径中使用通配符,如下所示:

Copy-Item \\nasname\Software\Build*\file1.exe \\pc1\DATA\destinationfolder
Copy-Item \\nasname\Software\Build*\file2.exe \\pc1\DATA\destinationfolder
Copy-Item \\nasname\Software\Build*\file3.exe \\pc1\DATA\destinationfolder
Copy-Item \\nasname\Software\Build*\file4.exe \\pc1\DATA\destinationfolder

或者,如果您只想复制四个文件,您也可以使用通配符文件名并使用一个内容:

Copy-Item \\nasname\Software\Build*\file*.exe \\pc1\DATA\destinationfolder

答案 1 :(得分:1)

如果构建过程正在创建目录,则可以利用目录的最后写入时间戳。像这样,

$buildPath = '\\nas\my\build'
# Get a list of directories, sort descending by write time and pick the first one
$mostRecentDir = gci $buildPath |? { $_.psIscontainer } | sort -Property LastWriteTime -Descending | select -first 1

# Get the full path to the most recent directory
$mostRecentDir.FullName