如何使用PowerShell根据文件名移动文件?
我是PowerShell的新手,在做一些事情 如何使用PowerShell根据文件名移动文件 将如何使用PowerShell根据文件名移动文件?,powershell,Powershell,我是PowerShell的新手,在做一些事情 如何使用PowerShell根据文件名移动文件 将0001_ddmmyy_用户名[active1]\u L_kkkk.pdf移动到C:\Users\abc\London 移动到C:\Users\abc\rusia 将0001_ddmmyy_jim[active1]\u P_kkkk.pdf移动到C:\Users\abc\Poland 我使用以下代码将文件移动到名为London的文件夹中。如果文件名有任何带文本[kkk]的方括号,则失败 gci 'C:
0001_ddmmyy_用户名[active1]\u L_kkkk.pdf
移动到C:\Users\abc\London移动到C:\Users\abc\rusia
将
0001_ddmmyy_jim[active1]\u P_kkkk.pdf
移动到C:\Users\abc\Poland
我使用以下代码将文件移动到名为London的文件夹中。如果文件名有任何带文本[kkk]的方括号,则失败
gci 'C:\Users\abc' -Recurse -Include "*_L*" | %{ Move-Item $_.FullName 'C:\Users\abc\London'}
我如何实现自动化
gci(获取位置).Path
或者干脆\
gci\
此外,如果未指定任何路径,则gci将默认为当前路径。因此,以下内容将获取当前文件夹:
gci
Move Item
cmdlet中使用-LiteralPath
Move Item-LiteralPath$sourcePath$destinationPath
#注意我使用了-File,所以它只返回文件
$items=gci.\-递归-文件-包括*\u L*、*\u R*、*\u P*
foreach($项目中的项目){
#可以使用更干净/更好的东西,但这样就行了
如果($item.Name-类似“*_L*”){
移动项目-文字路径$Item'C:\Users\abc\London'
}elseif($item.Name-类似“*\R*”){
移动项目-LiteralPath$项目'C:\Users\abc\Russia'
}elseif($item.Name-类似“*\u P*”){
移动项目-LiteralPath$项目'C:\Users\abc\Poland'
}否则{
#意外输出
写入主机“路径与预期不匹配”
写入主机$item.Name
}
}
Windows 10 64位。PowerShell 5
如何使用PowerShellgci
,foreach
,if
,-如
,移动项目和-literalpath
将0001_ddmmyy_用户名[active1]\u L_kkkk.pdf移动到C:\Users\abc\London
将0001\u ddmmyy\u jacky[active1]\u R\kkkkk.pdf移动到C:\Users\abc\rusia
将0001_ddmmyy_jim[active1]\u P_kkkk.pdf移动到C:\Users\abc\Poland
更改$env:userprofile\desktop
。当您确信它可以工作时,请删除-whatif
$items = gci -recurse -file *_L_*, *_R_*, *_P_*
foreach($item in $items) {
# Change $env:userprofile\desktop
if($item -like "*_L_*") {
Move-Item -LiteralPath $item "$env:userprofile\desktop\London" -whatif
} elseif($item -like "*_R_*") {
Move-Item -LiteralPath $item "$env:userprofile\desktop\Russia" -whatif
} elseif ($item -like '*_P_*') {
Move-Item -LiteralPath $item "$env:userprofile\desktop\Poland" -whatif
}
}
评论:
使用某些cmdlet时,如果使用-Path
,并且完整文件名的任何部分都包含[],则会得到奇怪的结果。修复方法是使用-LiteralPath
参数。请参见获取帮助移动项目-参数*路径*
–Lee_Dailey
如何使用PowerShell gci、foreach基于文件基名移动文件,如果使用某些cmdlet时,-like、move item和-literalpath,则当您使用-Path
且完整文件名的任何部分包含[]
时,会得到奇怪的结果。其他一些角色也会发生这种情况,但我只记得这些。修复方法是使用-LiteralPath
参数而不是-Path
参数。您正在使用-Path
参数,因为您没有指定任何内容,并且cmdlet默认为-Path
。看一下Get Help Move Item-Parameter*path*
的输出。你好,我的朋友,这段代码给我的输出与我的_L代码完全相同。当文件名在_L或_R或_P之前有一些带[xxxxxx]的文本时,它将不会移动它。你还可以建议创建文件夹London并将所有内容移动到其中。嘿,根据@somebadhat的回复,使用-LiteralPath将解决括号中的问题。他的解决方案工作得非常好,只需看一点小小的改进。1.检查并在中创建文件夹。如果文件存在,还可以跳过或覆盖。你好,我的朋友,它工作得很好,一个小的增加是有1个。如果文件夹不存在,请创建该文件夹,然后根据当前目录2移动该文件夹。检查是否存在同名文件,如果存在,请不要移动或替换它。非常感谢您的帮助help@CuriousEngineer在回答您的原始问题后,请不要添加新要求。而是通过单击✓ 如果您发现它解决了您的问题,请单击左侧的图标。然后发布一个新问题,明确说明附加要求。注意到了,很抱歉,因为我是新加入论坛的。@somebad我已经创建了一个新的线程。你能帮忙吗?@cur在你的新帖子上给我留言。