繁体   English   中英

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

[英]Copying files and folders of only batch and vbs script files over network

我正在将服务器从2003迁移到2008,并尝试编写一个Powershell脚本,该脚本会将所有vbs和bat的文件从2003服务器复制到2008服务器,并保持文件夹结构完好,因为对于要运行的程序。

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

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 

使用robocopy会更容易。

robocopy source dest *.vbs *.bat /s

从其他答案中读取注释似乎只是在过滤某些文件以与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 无需尝试再次归档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM