我是一个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
}
答案 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