替换/更新文件共享上的特定文件

时间:2013-03-27 22:03:09

标签: windows file powershell scripting powershell-v2.0

我正在尝试搜索多个目录并替换newfile.swf的所有实例。

$Logfile = "C:\FOLDER\filecopy.log" 
$ServerDir = "\\SERVER\TESTING\DIRECTORY"
$SourceFile = "C:\FOLDER\newfile.swf"
$OldFiles = Get-ChildItem -path $ServerDir -Recurse -Include newfile.swf |
            Sort-Object Name | Format-Table Fullname -Auto

foreach ($O in $OldFiles) {
    if (Test-Path $O) {
        Copy-Item $SourceFile $O -force
    } else {
        Add-Content $logfile "File Copy Failed"
        Add-Content $logfile $error[$error.count-1]
        Add-Content $logfile "==================="
    }
}

错误如下所示。

File Copy Failed System.Management.Automation.ParseException:
Unexpected token 'C:\FOLDER\newfile.swf' in expression or statement.
at System.Management.Automation.Parser.PipelineRule()
at System.Management.Automation.Parser.StatementRule()
at System.Management.Automation.Parser.StatementListRule(Token start)
at System.Management.Automation.Parser.ScriptBlockRule(String name, Boolean requireBrace, Boolean isFilter, ParameterDeclarationNode parameterDeclaration, List`1 functionComments, List`1 parameterComments)
at System.Management.Automation.Parser.ParseScriptBlock(String input, Boolean interactiveInput)
at System.Management.Automation.AutomationEngine.ParseScriptBlock(String script, Boolean interactiveCommand)
at System.Management.Automation.ScriptCommandProcessor..ctor(String script, ExecutionContext context, Boolean isFilter, Boolean useLocalScope, Boolean interactiveCommand, CommandOrigin origin)
at System.Management.Automation.Runspaces.Command.CreateCommandProcessor(ExecutionContext executionContext, CommandFactory commandFactory, Boolean addToHistory)
at System.Management.Automation.Runspaces.LocalPipeline.CreatePipelineProcessor()
at System.Management.Automation.Runspaces.LocalPipeline.InvokeHelper()
at System.Management.Automation.Runspaces.LocalPipeline.InvokeThreadProc()
===================

1 个答案:

答案 0 :(得分:3)

Format-Table不会生成文件对象列表,这是Copy-Item期望的输入。试试这个:

Get-ChildItem -Path $ServerDir -Recurse -Include newfile.swf | sort Name | % {
  if ( Test-Path -LiteralPath $_.FullName ) {
    Copy-Item $SourceFile $_.FullName -Force
  } else {
    Add-Content $logfile "File Copy Failed"
    Add-Content $logfile $error[$error.count-1]
    Add-Content $logfile "==================="
  }
}