Powershell脚本将文件复制到所有给定的子文件夹中?

时间:2015-08-17 18:54:49

标签: powershell scripting

有点抬头说这是我的第一个PowerShell脚本项目。我正在尝试编写一个脚本,提示用户输入源文件和目录。该脚本运行时没有错误,但实际上并未复制该文件。任何帮助将不胜感激。一个用法示例是:将C:\ Users \ User \ Desktop \ info.txt复制到C:\ Users \ User \ Documents \ *

$source = Get-ChildItem -Path (Read-Host -Prompt 'Enter the full name of the file you want to copy')
$dirs = Get-ChildItem -Path (Read-Host -Prompt 'Enter the full name of the directory you want to copy to')  

foreach ($dir in $dirs){
   copy $source $dir
}

1 个答案:

答案 0 :(得分:1)

我对您的脚本进行了一些更改以使其正常工作,您可能需要稍微调整一下以实现您的目标:

$source = Get-Item -Path (Read-Host -Prompt 'Enter the full name of the file you want to copy')
$dirs = Get-ChildItem -Path (Read-Host -Prompt 'Enter the full name of the directory you want to copy to')  
foreach ($dir in $dirs){
Copy-Item $source $dir.FullName
}

首先,我将$ source从Get-ChildItem更改为Get-Item,因为您指定它应该找到一个文件。

从那里,当我运行脚本时,我注意到它不是在目录中创建文件,而是创建了一堆与目录名称相同的文件。

为了研究这种行为,我将-whatif添加到了Copy-Item命令行开关的末尾。

Copy-Item $source $dir -whatif

这给了我以下输出:

  

如果:执行操作"复制文件" on Target" Item:H:\ test \ source \ test.txt目的地:H:\ test \ Folder1"。

     

如果:执行操作"复制文件" on Target"项目:H:\ test \ source \ test.txt目的地:H:\ test \ Folder2"。

     

如果:执行操作"复制文件" on Target" Item:H:\ test \ source \ test.txt目的地:H:\ test \ Folder3"。

     

如果:执行操作"复制文件" on Target" Item:H:\ test \ source \ test.txt目的地:H:\ test \ Folder4"。

这解释了脚本的奇怪输出,它误解了目的地。有时Powershell并不了解你要做的事情,所以你必须更加明确。

然后我运行了以下命令:

$dir | select *

这提供了很多属性,但重要的是:

  

FullName:H:\ test \ Destination \ Folder4

所以我把脚本更改为:

Copy-Item $source $dir.FullName

进行这些更改后,运行脚本会将我指定的test.txt文件复制到目标文件夹中的每个子目录中。