[英]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.