如何在powershell中将变量放入文件名中



我试图将变量附加到文件名的开头。我见过的解决方案都使用"+"连接起来,但这会产生错误。我怀疑是变量没有被识别为字符串。但我不知道该怎么弥补。也许这不是问题所在。

这里有一个尝试:

$JobNum = (get-item $Path).parent.parent.parent
Get-ChildItem Of*.pdf | rename-item -newname { $JobNum + "_"+ $_.name }

错误是:"输入到脚本块参数'NewName'失败。方法调用失败,因为[System.IO.][DirectoryInfo]不包含名为'op_Addition'的方法。

这是另一个。在这个文件中,我在$JobNum中添加了一个字符串,试图强制powershell将其视为字符串,我首先在文件中添加了一个静态jobnumber,然后尝试替换它。

$JobNum = -join ((get-item $Path ).parent.parent.parent , "_")
Get-ChildItem Of*.pdf | rename-item -newname { $_.Name -replace 'O', '99999_O' }
Get-ChildItem 99999* | rename-item -newname { $_.name -replace "99999_", $JobNum }

错误是"无法重命名指定的目标,因为它代表路径或设备名称"。

任何帮助都是感激的。

附加信息:$JobNum | Get-Member

Name MemberType Definition


LinkType CodeProperty System。字符串LinkType {= GetLinkType;}模式代码属性系统。字符串模式{=模式;}ModeWithoutHardLink代码属性系统。字符串ModeWithoutHardLink {= ModeWithoutHardLink;}目标代码属性系统。目标字符串{= GetTarget;}创建方法void Create()System.IO.DirectoryInfo CreateSubdirectory(字符串路径)删除方法void Delete(), void Delete(bool递归)枚举目录方法System.Collections.Generic.IEnumerable[System.IO. io]DirectoryInfo EnumerateDirec…EnumerateFiles方法System.Collections.Generic.IEnumerableEnumerateFiles(), S…enumeratefilesysteminfo方法System.Collections.Generic.IEnumerable[System.IO. info]FileSystemInfo EnumerateFile…Equals Method bool =(系统。对象obj)GetDirectories方法System.IO。DirectoryInfo[] GetDirectories(), System.IO. info。DirectoryInfo [] GetDirec……GetFiles方法System.IO。FileInfo[] GetFiles(), System.IO。FileInfo[] GetFiles(string searchPa…getfilesysteminfo方法System.IO。FileSystemInfo[] getfilesysteminfo (), System.IO。FileSystemInfo[]通用…int GetHashCode()方法GetLifetimeService方法系统。对象GetLifetimeService ()GetObjectData(System.Runtime.Serialization)。SerializationInfo info, System…GetType方法类型InitializeLifetimeService Method System。对象InitializeLifetimeService ()MoveTo方法无效MoveTo(字符串destDirName)刷新方法:ToString()属性属性System.IO.FileAttributes属性{get;set;}

创建时间属性日期时间创建时间{get;set;}

jweb, $JobNum是字符串还是某种对象?

当$JobNum是一个字符串时,我能够使你的原始语法工作。

PS C:Usersvvangor001documentsScripts - Local> $JobNum = "Job001"
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local> Get-ChildItem .*.jpg
Directory: C:Usersvvangor001documentsScripts - Local
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/21/2019  12:13 PM         153628 WebEx-20190221-2.JPG
-a----        2/21/2019  12:14 PM         165229 WebEx-20190221-3.JPG
-a----        2/21/2019  12:12 PM         100058 WebEx-20190221.JPG
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local> Get-ChildItem .*.jpg | Rename-item -NewName { $JobNum + "_" + $_.Name }
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local>
PS C:Usersvvangor001documentsScripts - Local> Get-ChildItem .*.jpg

Directory: C:Usersvvangor001documentsScripts - Local

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/21/2019  12:13 PM         153628 Job001_WebEx-20190221-2.JPG
-a----        2/21/2019  12:14 PM         165229 Job001_WebEx-20190221-3.JPG
-a----        2/21/2019  12:12 PM         100058 Job001_WebEx-20190221.JPG

PS C:Usersvvangor001documentsScripts - Local>

要确定$JobNum是什么样子,运行这个命令:

PS C:Usersvvangor001documentsScripts - Local> $JobNum | Get-Member

TypeName: System.String
Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone(), System.Object ICloneable.Clone()
...

在上面的例子中,我们可以看到$JobNum是一个字符串。

最新更新