Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何使用列表文件重命名文件?_Powershell_Rename - Fatal编程技术网

Powershell 如何使用列表文件重命名文件?

Powershell 如何使用列表文件重命名文件?,powershell,rename,Powershell,Rename,我有100个文件,我想根据相关列表以特定方式重命名。我想将cmdlet指向几个包含新旧名称的列表文件(如下),比如old.txt和new.txt,而不是像下面那样重复相同的cmdlet。如何使用PowerShell执行此操作 示例: 重命名项目-路径“E:\MyFolder\old1.pdf”-NewName new1.pdf 重命名项目-路径“E:\MyFolder\old2.tif”-NewName new2.pdf 重命名项目-路径“E:\MyFolder\old3.pdf”-NewNam

我有100个文件,我想根据相关列表以特定方式重命名。我想将cmdlet指向几个包含新旧名称的列表文件(如下),比如old.txt和new.txt,而不是像下面那样重复相同的cmdlet。如何使用PowerShell执行此操作

示例:

重命名项目-路径“E:\MyFolder\old1.pdf”-NewName new1.pdf
重命名项目-路径“E:\MyFolder\old2.tif”-NewName new2.pdf
重命名项目-路径“E:\MyFolder\old3.pdf”-NewName new3.pdf
列出文件:

old.txt=

new.txt=


只需将两个文件读入两个列表,并按如下方式处理它们:

$old=获取内容'old.txt'
$new=获取内容“new.txt”
设置位置“$:\MyFolder”
对于($i=0;$i-lt$old.Count;$i++){
重命名项$old[$i]$new[$i]
}

只需将两个文件读入两个列表,并按如下方式处理它们:

$old=获取内容'old.txt'
$new=获取内容“new.txt”
设置位置“$:\MyFolder”
对于($i=0;$i-lt$old.Count;$i++){
重命名项$old[$i]$new[$i]
}

为了避免
old.txt
new.txt
文件中的条目不对齐,您也可以将文件放入CSV文件中:

重命名.csv= 现在,您可以使用
Import Csv
导入“翻译集”:

$Renames=Import Csv'.\Renames.Csv'-标题“OldName”、“NewName”
foreach($rename中的文件){
重命名项$File.OldName$File.NewName
}

为了避免
old.txt
new.txt
文件中的条目不对齐,您也可以将文件放入CSV文件中:

重命名.csv= 现在,您可以使用
Import Csv
导入“翻译集”:

$Renames=Import Csv'.\Renames.Csv'-标题“OldName”、“NewName”
foreach($rename中的文件){
重命名项$File.OldName$File.NewName
}

为了让人恶心,这里有一个单行版本。它确实取决于运行时您是否在C:\MyFolder目录中,但这很容易更改为变量:

Get-Content new.txt -PipelineVariable NewName | 
    Foreach {$oldNames = Get-Content old.txt;$i=0} {Get-ChildItem $oldNames[$i++]} | 
    Rename-Item -NewName {$NewName} -WhatIf

所以,就为了恶心,这里是一行的版本。它确实取决于运行时您是否在C:\MyFolder目录中,但这很容易更改为变量:

Get-Content new.txt -PipelineVariable NewName | 
    Foreach {$oldNames = Get-Content old.txt;$i=0} {Get-ChildItem $oldNames[$i++]} | 
    Rename-Item -NewName {$NewName} -WhatIf

一点解释:Get Content将文件读入字符串集合,每个字符串都是文件的一行。一点解释:Get Content将文件读入字符串集合,每个字符串都是文件的一行。我喜欢这个和上面的答案。不确定哪一个应该得到绿色支票-也许人群会指出它。我喜欢这个和上面的答案。不确定哪一个应该得到绿色支票-也许人群会指出它。谢谢
old1.pdf,new1.pdf
old2.tif,new2.tif
old3.pdf,new3.pdf
Get-Content new.txt -PipelineVariable NewName | 
    Foreach {$oldNames = Get-Content old.txt;$i=0} {Get-ChildItem $oldNames[$i++]} | 
    Rename-Item -NewName {$NewName} -WhatIf