有点抬头说这是我的第一个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
}
答案 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文件复制到目标文件夹中的每个子目录中。