Powershell重命名目录中的所有文件,其重命名值来自重命名的文件

时间:2016-03-02 13:23:18

标签: powershell

好的,这是我的挑战。我有一个目录中的文件需要根据文件本身第一行的值重命名。以下是我到目前为止的情况:

$dir="c:\files"
$files=Get-ChildItem $dir|Where-Object {$_.name -like "a*.bc"} \\returns list of the files matching my pattern
foreach ($file in $files){Get-Content $file -first 1} \\returns the first line of each file.

现在挑战是获取这些行的子串(54,4)和(70,6)并分配变量$ val1和$ val2并使用这些值来执行重命名:

Rename-Item <oldfilename> -newname <$val>+<$val2>+".pdf"

如果我不使用get-childitem并且只选择一个特定文件,我可以将第一行分配给变量然后返回子字符串。但是,当我尝试遍历目录时它会崩溃。

我觉得我非常接近,但是错过了将第一行分配给foreach中运行该文件其余例程的变量的方法。

希望这是有道理的。

以下是适用于特定文件的流程

$firstline=Get-Content .\a123.bc -first 1
$val1=$firstline.substring(54,4)
$val2=$firstline.substring(72,4)
$newname=$val1+val2+".pdf"
Rename-Item .\a123.bc -newname $newname

结果文件就是我想要的。

1 个答案:

答案 0 :(得分:0)

尝试使用

  

$ files =((Get-ChildItem $ dir).Name-like&#34; a * .bc&#34;)

     

foreach($ file in $ files){

     

$ val1 =(Get-Content $ file -first 1).substring(54,4)

     

$ val2 =(Get-Content $ file -first 1).substring(72,4)

     

$ newname = $ val1 + $ val2 +&#34; .pdf&#34;

     

Rename-Item $ file -newname $ newname}