如何在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 方法字符串 ToString() 属性 属性 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?
如何从 Scala Json 字符串中将 Json 放入 JS 变量中?