使用可变源名称的Powershell复制项目

问题描述

我是PowerShell的新手,仍然在尝试解决问题。我有一个脚本可以成功地将文件一个位置复制到另一个位置:

copy-Item \\ServerName01\FolderName\file_09022020_0030.txt 
    -Destination \\ServerName02\FolderName\file_copied.txt

如何编写脚本以使用可变的源文件名?我想使用一个变量来查找今天的日期减去7天并获取相应的文件

EX:

copy-Item \ServerName01\FolderName\file_[variable today minus 7]*.txt 
    -Destination \ServerName02\FolderName\file_copied.txt

可变日期应采用MMDDYYYY格式。每个文件末尾的时间戳都可以忽略,所以我猜这是一个通配符(*)

每天都会发布一个文件,但文件名遵循以下模式:

file_09022020_0030.txt
file_09012020_0030.txt
file_08312020_0305.txt
...
file_08262020_0451.txt
file_08252020_0305.txt
file_08242020_0305.txt

解决方法

# Get a string representing 7 days ago in the specified format
# and store it in variable $dt
$dt = (Get-Date).AddDays(-7).ToString('MMddyyyy')

# Use variable $dt in the source file path pattern.
Copy-Item -Path        \\ServerName01\FolderName\file_${dt}_*.txt `
          -Destination \\ServerName02\FolderName\file_copied.txt

请注意变量名{...}周围的dt,如果_是变量名中的有效字符,则必须告知PowerShell变量名在何处结束。

也就是说,并不需要严格的中间变量,因此您可以直接嵌入
而不是${dt} 通过$((Get-Date).AddDays(-7).ToString('MMddyyyy'))subexpression operator在源路径中$()

另请参阅:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...