2016-03-02 166 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

編輯完整的解決方案的答案... –