我需要有关PowerShell的帮助。
我将必须每周开始重命名文件,而我每周将重命名100个或更多具有动态名称的文件。
我要重命名的文件位于“ C:Documents \ Scans”中的文件夹名称 Scans 中。可以说是为了时间扫描。
我在“ C:Documents \ Mapping \ New File Name.xlsx”中有一个excel文件。 该工作簿只有一张工作表,新名称将在A列中包含x行。就像上面提到的那样,每个单元格都有不同的变量。
P Lease对您的建议进行评论,以便我了解编码的最新情况。
感谢大家的时间和帮助。
答案 0 :(得分:0)
您可能希望在excel文件中有2列:
从那里您可以将文件另存为csv。
使用Import-Csv将数据提取到Powershell中,并使用诸如move $ item.original $ item.target之类的命令将ForEach循环遍历每一行。
有很多线程描述了如何将import-csv与forEach一起使用。
祝你好运。
答案 1 :(得分:0)
尽管我同意Ad Kasenally的看法,使用CSV文件会更容易,但是有些方法可能对您有用。
$excelFile = 'C:\Documents\Mapping\New File Name.xlsx'
$scansFolder = 'C:\Documents\Scans'
########################################################
# step 1: get the new filenames from the first column in
# the Excel spreadsheet into an array '$newNames'
########################################################
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Open($excelFile)
$worksheet = $workbook.Worksheets.Item(1)
$newNames = @()
$i = 1
while ($worksheet.Cells.Item($i, 1).Value() -ne $null) {
$newNames += $worksheet.Cells.Item($i, 1).Value()
$i++
}
$excel.Quit
# IMPORTANT: clean-up used Com objects
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
########################################################
# step 2: rename the 'scan' files
########################################################
$maxItems = $newNames.Count
if ($maxItems) {
$i = 0
Get-ChildItem -Path $scansFolder -File -Filter 'scan*' | # get a list of FileInfo objects in the folder
Sort-Object { [int]($_.BaseName -replace '\D+', '') } | # sort by the numeric part of the filename
Select-Object -First ($maxItems) | # select no more that there are items in the $newNames array
ForEach-Object {
try {
Rename-Item -Path $_.FullName -NewName $newNames[$i] -ErrorAction Stop
Write-Host "File '$($_.Name)' renamed to '$($newNames[$i])'"
$i++
}
catch {
throw
}
}
}
else {
Write-Warning "Could not get any new filenames from the $excelFile file.."
}