当前位置: 首页 > 知识库问答 >
问题:

检查文件夹中具有不同扩展名的同名文件,如果存在,移出一个

尚安平
2023-03-14

每天早上,一个文件夹得到相同的命名zip文件传输到它。我目前有一个脚本,将检查非压缩文件,如果他们存在,一个归档文件夹被创建,他们被移动到那里。然后解压缩zip文件,然后删除zip文件。

一个新的条件出现了,1文件将不会每天传输,但它将每周传输(一周中的随机一天),并且关联的非压缩文件必须保留在文件夹中,直到该压缩文件传输进来。

第二个if语句检查zip文件,如果存在,它将解压缩每个zip文件,然后删除zip文件。

$dir = "D:\test"
$date = Get-Date -Format "yyyy-MMM-dd"

if (Test-Path "$dir\*" -Exclude *.zip -PathType Leaf) {
    $newDir = New-Item -Type Directory -Path "$dir\Archive\$date" -Force
    $nozip = gci -Recurse $dir -Exclude *.zip | where { ! $_.PSIsContainer }

    foreach ($file in $nozip) {
        Move-Item $file $newDir
    }
}
if (Test-Path "$dir\*.zip" -PathType Leaf) {
    $list = gci -Recurse $dir -Include *.zip
    $shell = New-Object -COM Shell.Application

    foreach ($file in $list) {
        $zip = $shell.NameSpace($file.FullName)
        foreach ($item in $zip.Items()) {
            $shell.NameSpace($dir).CopyHere($item)
        }
        Remove-Item $file
    }
} else {
    exit
}

示例场景:

文件夹d:\test包含文件a.txt、b.txt和c.txt。
每天早上,包含新的b.txt和c.txt的文件b.zip和c.zip被传输到同一个文件夹d:\test。

zip文件需要解压,但是已经在这个文件夹中的对应的b.txt和c.txt需要移到d:\test\archive,然后b.zip和c.zip可以解压,在d:\test中留下一个新的b.txt和c.txt,然后这些zip文件被删除。

我有问题的地方是。zip不是每天传输的。每周一次,在a.zip访问文件夹之前,a.txt需要保持在d:\test中。

现在,我的脚本每天都会将所有非zip文件移动到d:\test\archive。因此,当b.zip和c.zip进入d:\test时,进程完成后就不会有a.txt了,它将与其他文件一起被移动到d:\test\archive。

因此,我需要一种方法来检查所有的。txt文件与。zip文件之间的关系,如果文件名匹配,而不是扩展名匹配,那么将该非压缩文件移到d:\test\archive。如果没有匹配,请将该非压缩文件保留在d:\test中,并继续处理匹配的文件。

共有1个答案

邢良才
2023-03-14

按以下方式修改您的第一部分:

$dir = "D:\Test"
$date = Get-Date -Format "yyyy-MMM-dd"
$newDir = New-Item -Type Directory -Path "$dir\Archive\$date" -Force
$files = (Get-ChildItem "$dir\*.txt").Name | foreach {$_.Split(".")[0]}
$zips = (Get-ChildItem "$dir\*.zip").Name | foreach {$_.Split(".")[0]}
foreach ($file in $files)
{
    foreach ($zip in $zips)
    {
        if($file -match $zip)
        {
            Move-Item "$dir\$file.txt" $newDir
            Write-Output "$file matches $zip"
        }
        else
        {
            Write-Output "$file does not match $zip"
        }
    }
}
 类似资料:
  • 我已按以下格式设置文件夹: AAPL_176546(空子文件夹)AAPL_2000(空子文件夹)AAPL_30234(空子文件夹)AAPL_176546.mp3AAPL_176546.txtAAPL_2000.mp3AAAPL_2000.txtAAPL_30234.mp3AAPL_30234.txt 我希望遍历文件夹并将相应的.txt和.mp3文件移动到子文件夹中(例如move AAPL_1765

  • 问题内容: 为了帮助实现这一点,下面的代码在文件夹中查找txt文件,以及如何使其列出不含扩展名的文件名。这是代码: 如您所见,就在这里: 这是将文件列表与myname的值进行比较,因此您可以帮助比较表和myName和list [i](不考虑文件扩展名)的情况,例如程序显示该文件夹具有以下布局: indeks.html hi.html,用户输入了indeks.html,比较不错,但是如何创建一个代码

  • 问题内容: 我正在某个程序上工作,根据文件的扩展名,我需要做不同的事情。我可以用这个吗? 问题答案: 假设是一个字符串,可以使用: 要不区分大小写,并消除可能很大的else-if链:

  • 问题内容: 我有一个上传脚本,需要检查文件扩展名,然后基于该文件扩展名运行单独的功能。有人知道我应该使用什么代码吗? 问题答案: 是您要寻找的 PHP.net

  • 问题内容: 在Linux机器上,我想遍历文件夹层次结构并获取其中所有不同文件扩展名的列表。 从外壳实现这一目标的最佳方法是什么? 问题答案: 试试这个(不确定这是否是最好的方法,但是可以用): 它的工作方式如下: 查找当前文件夹中的所有文件 打印文件扩展名(如果有) 制作唯一的排序列表

  • 问题内容: 我必须将数据从Excel文件导入数据库,并执行此操作,我想检查所选文件的扩展名。 这是我的代码: 但是我总是得到: 选择一个Excel文件! 我找不到我的代码有什么问题,请有人帮忙。 问题答案: 以下 应该 要么