作为PowerShell的初学者,我构建了这个代码,将每个pdf放在一个文件夹中,并根据位于csv中的名称重命名。
下面的代码确实有效,但循环过多会导致以下多个错误:
在该文件已存在时无法创建文件
$folderpath = read-host -Prompt 'enter folder path'
$data = import-csv "C:\listofnames.csv"
foreach ($d in $data) {
Get-ChildItem $folderpath -Filter *.pdf |
foreach-object { rename-item -path "$folderpath\$_" "$($d.firstname) $($d.lastname).pdf" }
}
如何解决这个问题?
答案 0 :(得分:0)
问题可能在于您使用<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<title>The pgrogress</title>
</head>
<body>
<div class="container-fluid">
<div class="progress">
<div class="progress-bar" id="lone" role="progressbar" style="width: 0" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="for">
<button class="but">Button</button>
</div>
</div>
</body>
</html>
的方式:
请注意,您不需要使用Rename-Item
,因为Rename-Item已经遍历输入。
ForEach-Object
投机时间:
我注意到,如果每个文件夹只有一个文件要重命名,那么您的脚本可能才有效。请注意,foreach ($d in $data) {
Get-ChildItem $folderpath -Filter *.pdf |
Rename-Item -newname {"$($d.firstname) $($d.lastname).pdf" }
}
可能会返回多个文件,但这两个文件都将被命名为Get-ChildItem
,这将完全返回您的错误。我建议你检查你的代码结构。
修改强>:
实际上,在重新阅读推测后的答案并看到其他答案后,我注意到我的代码无法帮助您避免这种结构性问题。如果不是&#34;将此文件夹中的所有pdf文件重命名为完全相同的名称&#34; (这实际上是不可能的),您必须澄清您想要做什么。有多个文件)。
答案 1 :(得分:0)
$folderpath = read-host -Prompt 'enter folder path'
$data = import-csv "C:\listofnames.csv"
foreach ($d in $data) { ***
代表文件中的每个名称
Get-ChildItem $folderpath -Filter *.pdf | <---
你正在审阅每一个pdf
foreach-object { rename-item -path "$folderpath\$_" "$($d.firstname) $($d.lastname).pdf" }
并尝试使用此人的姓名重命名每个PDF文件。
您需要重新考虑这一点,并找出一种方法来将数字映射到一个名称,或者希望您的pdf数量列表与您的名字数量相匹配以完成任何事情。
这不会很漂亮,但这会做你想的(我会在运行之前完全复制所有这些文件......):
$pdfs = get-childitem $folderpath -Filter *.pdf
0..($data.count-1)|%{
rename-item -path $(split-path $pdf[$_].fullname -parent) -newname "$($data[$_].firstname) $($data[$_].lastname).pdf"
}