仅通过网络复制批处理和vbs脚本文件的文件和文件夹

时间:2015-03-12 01:35:14

标签: windows powershell batch-file

我正在将我的服务器从2003年迁移到2008年并尝试编写一个powershell脚本,该脚本将所有vbs和bat文件从2003服务器复制到2008服务器,同时保持文件夹结构的完整性。对于该计划的运行至关重要。

这是我到目前为止所拥有的。它有点工作。它将在新服务器上创建D:\folder,但不会复制任何内容。它还会创建log.txt,其中包含vbs和bat文件的所有名称以及路径。

New-PSDrive -name source -PSProvider FileSystem -root "\\servername\d$\folder" |Out-Null

$targetdirectory = "d:\folder"
$sourcedirectory = "\\servername\d$\folder"

Get-ChildItem -Path $sourcedirectory -filter "*.bat","*.vbs" -Recurse| Out-File D:\log.txt
if ( -Not (Test-Path $targetdirectory)) {New-Item -path $targetdirectory -Type Directory | out-null } 
Copy-Item -Path $sourcedirectory -filter "*.bat","*.vbs" -Destination $targetdirectory -recurse -force 


remove-psdrive -name source

无效的部分是

Copy-Item -Path $sourcedirectory -filter "*.bat","*.vbs" -Destination $targetdirectory -recurse -force 

我刚将其改为

Get-ChildItem -Path $sourcedirectory -Include "*.bat","*.vbs" -Recurse| Out-File D:\log.txt
if ( -Not (Test-Path $targetdirectory)) {New-Item -path $targetdirectory -Type Directory | out-null } 
Copy-Item -Path $sourcedirectory -Include *.bat, *.vbs -Destination $targetdirectory -recurse -force 

2 个答案:

答案 0 :(得分:1)

使用robocopy会更容易。

robocopy source dest *.vbs *.bat /s

答案 1 :(得分:0)

从另一个答案中读取评论,看起来您在过滤某些文件时遇到问题,可以使用Copy-Item是吗?在大多数情况下,您会看到使用Get-ChildItem隔离所需文件并传输到Copy-Item的建议。你几乎已经这样做了。

$files = Get-ChildItem -Path $sourcedirectory -filter "*.bat","*.vbs" -Recurse
$files | Out-File D:\log.txt
$files | Copy-Item -Destination $targetdirectory -Force

$files包含您要隔离的文件(如果需要,可以将其传输到Where-Object以获取特定大小的文件。)。获取文件并将结果输出到外部txt文件(使用Export-CSV可以更清晰地输出对象FYI)。然后我们将其简单地导入Copy-Item。无需再次尝试归档。