我需要任务方面的帮助
我需要将导出的文件从子目录复制到新的文件夹位置,并重命名它们。问题是所有导出的文件都具有相同的名称,最多可以有500个
--Old Folder
---Export1
---Scan.TIF
---Export2
---Scan.TIF
---Export3
---Scan.TIF
我尝试了以下链接,该链接工作正常,但数据无处不在。例如,在名为SCAN13.TIF的新文件夹位置中复制并重命名的文件实际上将是子目录Export24中的文档
https://sumtips.com/snippets/powershell/copy-files-rename-duplicates-subfolder/
我需要一个脚本帮助,该脚本可以将文件从所有子目录复制到新位置,并重命名并匹配数据
是可以通过脚本编写还是可以使用的工具?
感谢您的时间
答案 0 :(得分:1)
此脚本使用正则表达式获取scan.tif文件目录名称的结尾编号。
-match
运算符将RegEx捕获组()存储在$ Matches集合中,该集合用于通过-f(ormat)
运算符构建目标名称。
## Q:\Test\2018\12\07\SO_53661264.ps1
$Src = "A:\Old Folder"
$Dst = "A:\New Folder"
Set-Location $Src
Get-ChildItem Scan.tif -Recurse -File |
Where {$_.Directory.Name -match 'Export(\d+)$'} |
Copy-Item -Destination {Join-Path $Dst ("Scan{0}.TIF" -f $Matches[1])} -WhatIf
如果输出看起来正常,请删除/注释尾随-WhatIf
参数。
运行脚本后,我的虚拟磁盘示例tree /f
:
> tree /F \
Auflistung der Ordnerpfade für Volume RamDisk
├───New Folder
│ Scan1.TIF
│ Scan2.TIF
│ Scan3.TIF
│
└───Old Folder
├───Export1
│ Scan.TIF
│
├───Export2
│ Scan.TIF
│
└───Export3
Scan.TIF
答案 1 :(得分:0)
如果我对您的理解正确,那么以下方法应该起作用:
data.frame
您将需要更改df <- read.table(text =
"V1 V2 V3 V4 V5 V6
A B C D E F", header = T, colClasses = "character")
和$source = "C:\test"
$Destination = "C:\Users\user\Documents\Tests"
$i = 1
foreach ($file in (Get-ChildItem -Recurse $source -Filter *.TIF)) {
Copy-Item $file.FullName -Destination "$destination\Scan$i.TIF"
$i++
}
变量。源是要复制的文件夹的根目录。
最终结果是将源目录中的任何$source
文件向下复制到文件名为$destination
的目标文件夹中,其中每个复制的文件上的数字以1进行迭代。
答案 2 :(得分:0)
您可以先尝试一下
Get-ChildItem <Directory of File> -Filter *.ext -Recurse | Rename-Item -NewName {$_.Directory.Name+'_'+$_.Name}
这不是您要寻找的全部答案,而是希望您能找到所需的一部分。
答案 3 :(得分:0)
我在这里共享此脚本,希望对其他人有用。我个人很乐意早点在这里找到它。
## Extract and rename.ps1
$src = split-path -parent $MyInvocation.MyCommand.Definition;
$root = split-path -parent $src;
$folderName = (get-item $src ).Name;
$suffix = '-extract';
$newFolderPath = "$($root)\$($folderName)$($suffix)\";
Write-Host "Extracting files from $($folderName) to $($folderName)$($suffix)";
New-Item -ItemType directory -Force -Path $newFolderPath
Set-Location $src
Get-ChildItem -Recurse -File -Exclude *.ps1 |
ForEach-Object {
$currentFolderName = Split-Path -Path $_.Directory.FullName -Leaf;
$currentFileName = Split-Path -Path $_.FullName -Leaf;
$newFileName = "$($currentFolderName)_$($currentFileName)";
[System.IO.Path]::GetInvalidFileNameChars() |
ForEach-Object {
$newFileName = $newFileName.replace($_,'.');
}
$destination = Join-Path $newFolderPath $newFileName;
Copy-Item -literalpath $_ -Destination $destination -Force;
Write-Host $_ => $destination;
}
结果:
├───Old Folder-extract <========== The resulting folder
│ Export1_Scan.TIF
│ Export2_Scan.TIF
| Sub Export 2.2_Scan.TIFF
│ Export3.TIF
│
└───Old Folder <========== The chaotic folder
│ Extract and rename.ps1 <========== The script must be placed here
│
├───Export1
│ Scan.TIF
│
├───Export2
│ │ Scan.TIFF
│ └───Sub Export 2.2
│ Scan.TIF
│
└───Export3
Scan.TIF
我是Powershell的新手,所以我认为我的脚本没有经过优化,但是可以使用。