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

Posted

技术标签:

【中文标题】如何在powershell中将变量放入文件名【英文标题】:How to put a variable into a filename in powershell 【发布时间】:2021-12-11 04:24:13 【问题描述】:

我正在尝试将变量附加到文件名的开头。我见过的解决方案都使用“+”来连接,但这给了我错误。我怀疑是该变量没有被识别为字符串。但我不知道如何解决这个问题。也许这不是问题。

这是一次尝试:

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

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

这是另一个。我在 $JobNum 中添加了一个字符串以尝试强制 powershell 将其视为一个字符串,我首先在文件上放置了一个静态作业编号,然后尝试替换它。

$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 

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

感谢任何帮助。

附加信息: $职位编号 |获取会员

名称 MemberType 定义


LinkType CodeProperty System.String LinkTypeget=GetLinkType; 模式 CodeProperty System.String Modeget=Mode; ModeWithoutHardLink CodeProperty System.String ModeWithoutHardLinkget=ModeWithoutHardLink; 目标代码属性 System.String Targetget=GetTarget; 创建方法 void Create() CreateSubdirectory 方法 System.IO.DirectoryInfo CreateSubdirectory(string path) 删除方法 void Delete(), void Delete(bool recursive) EnumerateDirectories 方法 System.Collections.Generic.IEnumerable[System.IO.DirectoryInfo] EnumerateDirec… EnumerateFiles 方法 System.Collections.Generic.IEnumerable[System.IO.FileInfo] EnumerateFiles(), S... EnumerateFileSystemInfos 方法 System.Collections.Generic.IEnumerable[System.IO.FileSystemInfo] EnumerateFile… Equals Method bool Equals(System.Object obj) GetDirectories 方法 System.IO.DirectoryInfo[] GetDirectories(), System.IO.DirectoryInfo[] GetDirec… GetFiles 方法 System.IO.FileInfo[] GetFiles(), System.IO.FileInfo[] GetFiles(string searchPa... GetFileSystemInfos 方法 System.IO.FileSystemInfo[] GetFileSystemInfos(), System.IO.FileSystemInfo[] Ge... GetHashCode 方法 int GetHashCode() GetLifetimeService 方法 System.Object GetLifetimeService() GetObjectData 方法 void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System… GetType 方法类型 GetType() InitializeLifetimeService 方法 System.Object InitializeLifetimeService() MoveTo 方法 void MoveTo(string destDirName) 刷新方法 void Refresh() ToString 方法字符串 ToS​​tring() 属性 属性 System.IO.FileAttributes 属性 get;set; CreationTime 属性日期时间 CreationTime get;set;

【问题讨论】:

什么是 $Path?是字符串还是对象? 【参考方案1】:

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

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

PS C:\Users\vvangor001\documents\Scripts - Local> $JobNum = "Job001"
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local> Get-ChildItem .\*.jpg

    Directory: C:\Users\vvangor001\documents\Scripts - 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:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local> Get-ChildItem .\*.jpg | Rename-item -NewName  $JobNum + "_" + $_.Name 
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local>
PS C:\Users\vvangor001\documents\Scripts - Local> Get-ChildItem .\*.jpg


    Directory: C:\Users\vvangor001\documents\Scripts - 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:\Users\vvangor001\documents\Scripts - Local>

要确定 $JobNum 的样子,请运行以下命令:

PS C:\Users\vvangor001\documents\Scripts - Local> $JobNum | Get-Member


   TypeName: System.String

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

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

【讨论】:

嗨。 $JobNum 是一个文件夹名称,所以我认为它是一个字符串,但我不知道。如果我回应它,​​我会得到“78780”。如果它是一个对象,我将如何更改我的代码以使用 Get-Member?像这样?获取子项 99999* |重命名项目 -newname $_.name -replace "99999_", $JobNum | Get-Member 或者,更好的是,有没有办法将它转换为字符串,因为这就是我尝试使用它的方式? 您能否运行$JobNum | Get-Member 并发布完整的输出,以便我们查看属性、方法等?根据结果​​,我们将更好地了解如何将其转换为字符串,无论是使用烘焙方法(例如 .ToString)还是从对象中提取特定属性(例如 Name)。 另一个可能很方便运行的命令是:$JobNum | Select-Object -Property * 这将显示这些属性的属性和值。 这两个命令产生的输出比我在评论中发布的要多。是否有一个特定的属性我可以发布它的值来澄清事情?或者,如果我们只是假设这不是字符串,有没有办法将其转换为字符串?谢谢 嗯...好问题。我做了一些谷歌搜索,但我没有看到一个好的解决方案。您可以通过在帖子底部附加命令的输出来更新您的原始问题吗?标题类似于“附加信息......”?否则,只是暂时将其发布到 Google Drive、DropBox 等,然后发布链接。我会看一下输出,看看我是否可以给你一个更好的答案,当我们完成后,你可以删除链接。听起来怎么样?

以上是关于如何在powershell中将变量放入文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PowerShell 中将 curl 结果作为变量获取

如何在 Zeppelin 的 javascript 中将变量放入 z ZeppelinContext?

如何在 PowerShell 中将文件作为流逐行处理

如何从 Scala Json 字符串中将 Json 放入 JS 变量中?

如何在 PowerShell 中将计算值写入 SQL INSERT/UPDATE

如何在powershell中将嵌套的任意关联数组值设置为.psd1文件?