使用powershell中的文件名创建目录



我的路径中有以下文件

ENG0100100VOL-815299004001
ENG0100100VOL-815299004002
ENG0100100VOL-815299004003
ENG0100100VOL-815299004004
ENG0100100VOL-815300004001
ENG0100100VOL-815300004002
ENG0100100VOL-815300004003
ENG0100100VOL-815300004004

I want to

  1. 用"VOL-"后面跟着6位数字标识符,并将包的相应文件移动到该文件夹(VOL-81529和VOL-81530)。理想情况下,每个文件夹有4个文件。注意:这些值可能会随着时间的推移而改变,文件编号也不是固定的。

文件夹卷- 81529应该包含文件

ENG0100100VOL-815299004001
ENG0100100VOL-815299004002
ENG0100100VOL-815299004003
ENG0100100VOL-815299004004
<<p>文件夹strong>卷- 81530 应该包含文件
ENG0100100VOL-815300004001
ENG0100100VOL-815300004002
ENG0100100VOL-815300004003
ENG0100100VOL-815300004004
  1. 遍历文件夹并解压缩文件,只有后缀002和004(最后三位数字)的12位数字。并在解压缩
  2. 后从文件夹中删除所有包文件。

文件夹卷- 81529

ENG0100100VOL-815299004002
ENG0100100VOL-815299004004
<<p>文件夹strong>卷- 81530
ENG0100100VOL-815300004002
ENG0100100VOL-815300004004

我对编码知之甚少,我写了这个,它需要一些额外的输入

$files = Get-ChildItem "My DocumentsPathfiles" | ForEach-Object{$_.Tostring().substring(14,5)}
$max =$files.count
for($i=0,$i -lt $max, $i++){if ($files[$i] -eq $files[$i+1]) { $value = $files[$i] } else { $value = $files[$i+1]}}

如果您只需要以002或004结尾的文件,我们将只处理这些文件,对吗?这段代码检查文件的期望结尾,并将存档的内容提取到目标文件夹的子文件夹中。提取后,它删除文件. ...还有其他的文件。: -)

$Path = 'My DocumentsPathfiles'
Get-ChildItem -Path $Path |
ForEach-Object {
$ID = ($_.BaseName -split '-')[1].Substring(0, 5)
$TargetPath = Join-Path -Path $_.Directory -ChildPath ('VOL-' + $ID)
if ( -not (Test-Path -Path $TargetPath)) {
New-Item -Path $TargetPath -ItemType Directory | Out-Null
}
if ($_.BaseName -match '002$|004$') {
$RenamedItem = Rename-Item -Path $_.FullName -NewName ($_.BaseName + '.zip') -PassThru
$DestinationPath = Join-Path -Path $TargetPath -ChildPath $_.BaseName
Expand-Archive -Path $RenamedItem.FullName -DestinationPath $DestinationPath
Remove-Item -Path $RenamedItem.FullName
}
else {
Remove-Item -Path $_.FullName
}
}

相关内容

  • 没有找到相关文章

最新更新