PowerShell:如何从源目录中仅复制选定的文件?

时间:2009-11-06 03:33:12

标签: powershell

我是一个Powershell新手,试图让一个简单的脚本运行。

我有一个文件列表,我想从一些src_dir复制到dst_dir。我写了一个简单的脚本(这显然是错误的,因为它在执行时没有做任何事情)。

有人可以帮忙检查一下我做错了吗?

# source and destionation directory
$src_dir = "C:\Users\Pac\Desktop\C4new"
$dst_dir = "C:\Users\Pac\Desktop\csci578-hw3\Prism\C4new"

# list of files from source directory that I want to copy to destination folder
# unconditionally
$file_list = "C4newArchitecture.java", "CustomerData.java"

# Copy each file unconditionally (regardless of whether or not the file is there
for($i=0; $i -le $file_list.Length - 1; $i++)
{
  Copy-Item -path $src_dir+$file_list[$i] -dest $dst_dir -force
}

3 个答案:

答案 0 :(得分:11)

假设文件直接以$ src_dir为单位,你可以更简单地做到这一点,即副本可以是单行:

$file_list | Copy-Item -Path {Join-Path $src_dir $_} -Dest $dst_dir -ea 0 -Whatif

-ea是-ErrorAction参数的别名,0值对应于SilentlyContinue。这会导致Copy-Item忽略错误,就像其中一个源文件不存在一样。但是,如果遇到问题,请暂时删除此参数,以便可以看到错误消息。

当以交互方式键入这些内容时,我倾向于使用这样的快捷方式,但在脚本中最好将其拼写为可读性。另请注意,-Path参数可以采用scriptblock,即花括号中的脚本。从技术上讲,Copy-Item cmdlet永远不会看到scriptblock,只看到它的执行结果。这适用于任何采用管道输入的参数。删除-WhatIf以使命令实际执行。

答案 1 :(得分:9)

哦......这实际上非常简单:

# source and destionation directory
$src_dir = "C:\Users\Pac\Desktop\C4new\"
$dst_dir = "C:\Users\Pac\Desktop\csci578-hw3\Prism\C4new"

# list of files from source directory that I want to copy to destination folder
# unconditionally
$file_list = "C4newArchitecture.java", 
             "CustomerData.java",
             "QuickLocalTransState.java",
             "QuickLocalTransState_AbstractImplementation.java",
             "SaveSessionOK.java",
             "SessionID.java",
             "UserInterface.java",
             "UserInterface_AbstractImplementation.java"

# Copy each file unconditionally (regardless of whether or not the file is there
foreach ($file in $file_list)
{
  Copy-Item $src_dir$file $dst_dir
}

作为程序员,我喜欢foreach!

答案 2 :(得分:0)

Get-ChildItem -Path $srcDir | Where-Object { $fileNames -contains $_.Name } | Copy-Item -Destination $dstDir

在某些情况下,这非常方便,例如:

Get-ChildItem -Filter *.ocr.txt | Copy-Item -Destination $dstDir