我正在尝试将多个文件从一台机器复制到另一台机器,这些文件的名称每天都在变化,并且遇到问题。名称始终以“库存状态”开头,然后以数字结束。
我尝试过以下代码:
$strSourceFile = "C:\Test\[Stock]*"
$strTargetDir = "C$\Test\Test2"
$astrComputerList = ( "kburrows-xplt" )
if ([System.IO.File]::Exists($strSourceFile))
{
foreach ($strComputer in $astrComputerList) {
$strTargetPath = "\\$strComputer\$strTargetDir"
copy-item $strSourceFile -destination $strTargetPath
}
}
这个问题是strSourceFile被设置为一个字符串,但我认为它需要是一个表达式,所以这可行。
有谁知道怎么做?也许我错了。
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/1/2013 3:09 AM 2954557 Stock Status Report88744.XML
-a--- 11/1/2013 3:25 AM 528934 Stock Status Report89386.XML
-a--- 11/1/2013 3:31 AM 103583 Stock Status Report89772.XML
答案 0 :(得分:1)
尝试删除第一行中围绕Stock的方括号。您可以在字符串中使用通配符作为Copy-Item的一部分。
此外,您可以替换
[System.IO.File]::Exists($strSourceFile)
带
Test-File $strSourceFile
我刚注意到您将此标记为PowerShell 1.0,因此通配符可能不适用于该版本的Copy-Item。在这种情况下,请尝试以下方法:
Get-ChildItem $strSourceFile | Copy-Item -Destination $strTargetPath
不幸的是,我没有使用PowerShell 1.0系统来测试它。
答案 1 :(得分:1)
以下是我建议的此操作:
$strSourceFile = "C:\Test\"
$strTargetDir = "C$\Test\Test2"
$astrComputerList = ( "kburrows-xplt" )
Get-ChildItem $strSourceFile -Filter "Stock Status*" | foreach{
if (Test-Path -Path $_.FullName -PathType Leaf)
{
foreach ($strComputer in $astrComputerList) {
$strTargetPath = "\\$strComputer\$strTargetDir"
copy-item $_.FullName -destination $strTargetPath
}
}
}
$ _是管道中的当前对象。与其他语言中的“this”类似。 -Filter
允许您根据需要减少结果。我相信-Include
和-Exclude
允许您根据扩展程序进行过滤,如果有帮助的话。
我也没有1.0可用,所以我无法完全测试。