在PowerShell中,我正在尝试使用Move-Item将包含位于$Source
的字符串“2017”的所有文件移动到$MovieDst
我要在$Source
中移动的文件是单独的.mkv
个文件,文件名中包含字符串“2017”,位于$Source
的根目录 - 它们不在。目录
如果我散列Move-Item
并取消散列Write-Host $NoDirMovie
,则会输出以下内容:
ExampleFile.2017.mkv
ExampleFile2.2017.mkv
因此,它肯定知道哪些是要引用的正确文件。但是,只要我使用Move-Item
,它就会将整个$source directory
移动到$MovieDst
。我无法使用-Exclude *COMPLETED_DOWNLOADS*
,因为它包含了我想要移动的文件。
所以,我有点卡住了 - 它无法移动我的文件,因为它首先要移动包含它们的整个目录。有没有办法阻止它移动整个$Source
目录,并且只能移动包含字符串“2017”的$Source
的内容?
$Source = "C:\TV Shows 7\COMPLETED_DOWNLOADS"
$MovieDst = "C:\TV Shows 7\COMPLETED DOWNLOADS_Sorted\MOVIES"
$NoDirMovies = dir $Source *2017*
foreach($NoDirMovie in $NoDirMovies | where {$_ -ne $Source})
{
Move-Item -Path $Source -Destination $MovieDst
#Write-Host $NoDirMovie
}
答案 0 :(得分:1)
为什么要在$NoDirMovie
中存储所需的文件,然后将$Source
传递给Move-item
?
当然你想要:
foreach($NoDirMovie in $NoDirMovies | where {$_ -ne $Source})
{
Move-Item -Path $NoDirMovie -Destination $MovieDst
#Write-Host $NoDirMovie
}
修改强>
这是一个简单的解决方案,我还没有尝试过。一些事情:
dir
是内置PowerShell Cmdlet的别名Get-ChildItem
您的循环Where
不合逻辑。 $NoDirMovies
是目录$Source
中的文件,因此它们永远不会等于$Source
(假设这是尝试不复制目录?)
值得检查您尝试复制的目录是否存在。
V2(我试过这个)
$Source = "C:\TV Shows 7\COMPLETED_DOWNLOADS"
$MovieDst = "C:\TV Shows 7\COMPLETED DOWNLOADS_Sorted\MOVIES"
$filter = "2017"
If(!(Test-Path $MovieDst)){
New-Item -ItemType Directory -Path $MovieDst
}
foreach($file in (Get-ChildItem $Source | Where-object {$_.Name -match $filter})){
Move-Item -Path $file.FullName -Destination $MovieDst
}
答案 1 :(得分:0)
恕我直言,你的方法过于复杂。 Move-Item接受管道输入,所以
@IBAction fund logoutDidTap(sender:Any){
try! FirAuth.auth()?.signout()
var viewControllers = navigationController?.viewControllers
viewControllers?.removeLast(2) // views to pop
navigationController?.setViewControllers(viewControllers!, animated: true)
}
如果输出显示正常,请删除$Source = "C:\TV Shows 7\COMPLETED_DOWNLOADS"
$MovieDst = "C:\TV Shows 7\COMPLETED DOWNLOADS_Sorted\MOVIES\"
Get-ChildItem -Path $Source -Filter "*2017*.mkv" |Where {!($_.PSIsContainer)}
Move-Item -Destination $MovieDst -WhatIf