好的,这是我的挑战。我有一个目录中的文件需要根据文件本身第一行的值重命名。以下是我到目前为止的情况:
$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 :(得分: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}