如何不在整个目录中进行测试路径搜索或如何解决

时间:2019-04-05 18:48:21

标签: powershell

我有一些压缩的pdf文件,我需要解压缩它们,然后仅保存第一页。我已经解压缩,并且保存的首页代码按其应有的方式工作。但是,当我解压缩时,从4000个文件夹中创建了大约150个文件夹,其中包含pdf和其他格式的文件,例如.txt,.csv等。所以我的问题是我需要拉出pdf文件并将其移至主文件夹以及其他pdf的其余部分,因此我可以批量保存每个pdf的首页。

解压缩后的文件夹结构为:

SecondStorage (main folder where all pdf end after unzip)
   -Folder containing pdf and another file
   -folder containing pdf and another file
   -pdf
   -pdf

PDF始终位于其余PDF所在的文件夹一级。

我正在尝试编写一个使用测试路径的foreach循环,以查看pdf是否已存在于主文件夹中,如果不存在,则将其移至父文件夹。我的测试路径一直存在问题,告诉我pdf文件存在于文件夹中,因此不会移动文件。

这是我当前正在使用的代码

$ListFiles = get-childitem -path $SecondStorage -Recurse -Filter "*.pdf"
$ShortList = $ListFiles | Where-Object -Property Name -Like "20*.pdf"


foreach ($i in $ShortList)
    {
        if (Test-Path -Path "$SecondStorage\$($i.name)" )
        {
            Move-Item -Path $i.fullname -Destination $SecondStorage
        }
        else 
        {
            Write-Output "File already exists"
        }
    }

代码运行时,它告诉我该文件已存在。我当时以为我可以使用文字路径,但由于不断得到相同的结果,我缺少了一些东西。

感谢您的任何建议,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

只需翻转您的if语句。测试文件是否在主文件夹中时,您要输出文本,而不是Move;-)

if (Test-Path -Path "$SecondStorage\$($i.name)" )
{
    Write-Output "File already exists"
}
else 
{
    Move-Item -Path $i.fullname -Destination $SecondStorage
}