2016-03-02 275 views
0

好吧,这里是我的挑战。我有一个目录中的文件需要根据文件第一行中的值重命名。以下是我迄今为止: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 

工作过程中产生的文件是我想要的。

回答

0

尝试使用

$文件=((GET-ChildItem $目录),请将.Name般的 “一* .BC”)

的foreach($文件$文件){

$ VAL1 = .substring(54.4)

$ VAL2 =(获取内容$文件-first 1)(获取内容$文件-first 1).substring(72,4)

$ newname = $ val1 + $ val2 +“.PDF”

重命名,项目$文件-NewName $ NEWNAME}

+0

返回第一线我的原稿代码执行的同一阵列。然后,这个问题会得到这个结果,并将这些子串从每一行中拉出来,并为每个变量设置一个$ val1和2 var,并用这些变量重命名每个文件。即时消息输入这个即时消息认为它应该可能我们做...而不是一个foreach没有? –

+0

或做..而在foreach而言。 –

+0

编辑完整的解决方案的答案... –