PowerShell - 当文件名更改时,将文件从一个服务器移动到下一个服务器

时间:2013-11-22 21:06:48

标签: powershell powershell-v1.0

我正在尝试将多个文件从一台机器复制到另一台机器,这些文件的名称每天都在变化,并且遇到问题。名称始终以“库存状态”开头,然后以数字结束。

我尝试过以下代码:

$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       

2 个答案:

答案 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可用,所以我无法完全测试。