Powershell Get-ChildItem 检查文件名不起作用
Powershell Get-ChildItem Check file name not working
我想做的是在文件夹中查找特定文件,然后检查每个匹配的文件的名称并将其放入另一个文件夹中。这是我正在尝试做的示例:
$FileABackupLoc = "C:\FolderA"
$FileBBackupLoc = "C:\FolderB"
Get-ChildItem -Path $SourceFolder -Include *Membership*.pgp -Name -Recurse |
%{
Write-Host "Current file: $_"
if($_ -like '*FileA*')
{
[System.IO.FileInfo]$FileADestination = (Join-Path -Path $FileABackupLoc -ChildPath $_.Name.replace(“_”,“\”))
move-item -Path $_.FullName -Destination $FileADestination.FullName -Verbose
}
if($_ -like '*FileB*')
{
[System.IO.FileInfo]$FileBDestination = (Join-Path -Path $FileBBackupLoc -ChildPath $_.Name.replace(“_”,“\”))
move-item -Path $_.FullName -Destination $FileBDestination.FullName -Verbose
}
}
当我 运行 代码时,我收到此错误但不知道为什么:
您不能对空值表达式调用方法。
也许试试这个:
Get-ChildItem -Path $SourceFolder -Include *Membership*.pgp -Recurse | % {
if ($_ -like '.*FileA.*')
{
$FileADestination = Join-Path -Path $FileBBackupLoc -ChildPath (Split-Path -Leaf -Path $_.FullName)
Move-Item -Path $_.FullName -Destination $FileADestination
}
...
我相信您在原始 Get-ChildItem 中使用 -Name 参数可能会妨碍您,来自文档:
-Name
Gets only the names of the items in the locations. If you pipe the output of this command to another command, only the item names are sent.
我想做的是在文件夹中查找特定文件,然后检查每个匹配的文件的名称并将其放入另一个文件夹中。这是我正在尝试做的示例:
$FileABackupLoc = "C:\FolderA"
$FileBBackupLoc = "C:\FolderB"
Get-ChildItem -Path $SourceFolder -Include *Membership*.pgp -Name -Recurse |
%{
Write-Host "Current file: $_"
if($_ -like '*FileA*')
{
[System.IO.FileInfo]$FileADestination = (Join-Path -Path $FileABackupLoc -ChildPath $_.Name.replace(“_”,“\”))
move-item -Path $_.FullName -Destination $FileADestination.FullName -Verbose
}
if($_ -like '*FileB*')
{
[System.IO.FileInfo]$FileBDestination = (Join-Path -Path $FileBBackupLoc -ChildPath $_.Name.replace(“_”,“\”))
move-item -Path $_.FullName -Destination $FileBDestination.FullName -Verbose
}
}
当我 运行 代码时,我收到此错误但不知道为什么: 您不能对空值表达式调用方法。
也许试试这个:
Get-ChildItem -Path $SourceFolder -Include *Membership*.pgp -Recurse | % {
if ($_ -like '.*FileA.*')
{
$FileADestination = Join-Path -Path $FileBBackupLoc -ChildPath (Split-Path -Leaf -Path $_.FullName)
Move-Item -Path $_.FullName -Destination $FileADestination
}
...
我相信您在原始 Get-ChildItem 中使用 -Name 参数可能会妨碍您,来自文档:
-Name
Gets only the names of the items in the locations. If you pipe the output of this command to another command, only the item names are sent.