Powershell强制将ConvertFrom Json输出转换为字符串,然后可用于所有字符串操作,包括文件命名

Powershell强制将ConvertFrom Json输出转换为字符串,然后可用于所有字符串操作,包括文件命名,powershell,replace,unicode,string-conversion,unicode-literals,Powershell,Replace,Unicode,String Conversion,Unicode Literals,正如我在问题标题中提到的,我想将ConvertFrom Json命令的输出转换为字符串,这样,我得到的字符/字符串应该是可用的,这样它就可以插入到DateTime字符串中作为另一个字符的替换 目前,我有以下代码来获取当前日期时间: $DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh+mm+ss") 现在,在上面的代码中,我想强制将加号替换为冒号,这样生成的DateTime字符串就可以用于文件命名,因此我希望outputafter替换如下

正如我在问题标题中提到的,我想将ConvertFrom Json命令的输出转换为字符串,这样,我得到的字符/字符串应该是可用的,这样它就可以插入到DateTime字符串中作为另一个字符的替换

目前,我有以下代码来获取当前日期时间:

$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh+mm+ss")
现在,在上面的代码中,我想强制将加号替换为冒号,这样生成的DateTime字符串就可以用于文件命名,因此我希望outputafter替换如下:

07-11-2020_12:59:13
现在,我尝试将此代码用于强制替换,但不起作用:

$colon = ('{ "str": "\uA789" }' | ConvertFrom-Json)
$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh+mm+ss")
$DTCurr = $DTCurr -replace "\+",$colon
Echo $DTCurr
这给出了输出:07-11-2020_02@{str=꞉}06{str=꞉}28这是荒谬和意外的。我可以保证$colon确实会打印:当传递给Echo时


有人能告诉我我做错了什么并帮助我实现这一目标吗?

如果我误解了这一点,很抱歉,但我认为这样做可以简化你的最终目标

$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh:mm:ss")
还是这个

$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh+mm+ss")
$colonDT = $DTCurr -replace "\+",":"
但如果您想按自己的方式执行,它之所以要打印该输出,是因为它正按照您的要求执行操作。您要用一个名为str的属性值为:。的对象替换+,您需要改为执行此操作

$colon = ('{ "str": "\uA789" }' | ConvertFrom-Json)
$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh+mm+ss")
$colonDT = $DTCurr -replace "\+",$colon.str
Echo $colonDT

如果我错了,您需要更多的帮助,请告诉我。

如果我误解了这一点,很抱歉,但我认为这样做可以简化您的最终目标

$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh:mm:ss")
还是这个

$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh+mm+ss")
$colonDT = $DTCurr -replace "\+",":"
但如果您想按自己的方式执行,它之所以要打印该输出,是因为它正按照您的要求执行操作。您要用一个名为str的属性值为:。的对象替换+,您需要改为执行此操作

$colon = ('{ "str": "\uA789" }' | ConvertFrom-Json)
$DTCurr = (Get-Date).tostring("dd-MM-yyyy_hh+mm+ss")
$colonDT = $DTCurr -replace "\+",$colon.str
Echo $colonDT
如果我不正确,您需要更多帮助,请告诉我。

解决了您的问题;让我补充一下:

博士

使用JSON表示的唯一原因似乎是获取一个Unicode字符超出ANSI/ASCII范围的字符串,即꞉ 修饰符字母冒号,看起来就像ASCII范围:冒号,但不是

如果我们假设您需要这个JSON绕道(您不需要),最简单的解决方案是:

$colonSubstitute = '"\uA789"' | ConvertFrom-Json
不需要JSON迂回,因为您可以将Unicode代码点直接转换为[char]:

您可以将其强制转换为[string]实例,尽管这通常不是必需的,因为PowerShell具有自动、灵活的类型转换,请参见以下内容:

$colonSubstitute = [string] [char] 0xA789
PowerShell[Core]v6+直接支持Unicode转义序列,类似于JSON的内部双引号字符串…,也称为,使用语法'u{n},其中n是字符的Unicode代码点:

# PowerShell [Core] v6+ escape sequence
# Same as:         "$([char] 0xA789)"
$colonSubstitute = "`u{A789}"
注意:与[char]强制转换不同,`u{n}语法还支持Unicode BMP之外的字符,即代码点大于u+FFFF 0xFFFF的字符;例如,`u{1F913}for解决了您的问题;让我补充一下:

博士

使用JSON表示的唯一原因似乎是获取一个Unicode字符超出ANSI/ASCII范围的字符串,即꞉ 修饰符字母冒号,看起来就像ASCII范围:冒号,但不是

如果我们假设您需要这个JSON绕道(您不需要),最简单的解决方案是:

$colonSubstitute = '"\uA789"' | ConvertFrom-Json
不需要JSON迂回,因为您可以将Unicode代码点直接转换为[char]:

您可以将其强制转换为[string]实例,尽管这通常不是必需的,因为PowerShell具有自动、灵活的类型转换,请参见以下内容:

$colonSubstitute = [string] [char] 0xA789
PowerShell[Core]v6+直接支持Unicode转义序列,类似于JSON的内部双引号字符串…,也称为,使用语法'u{n},其中n是字符的Unicode代码点:

# PowerShell [Core] v6+ escape sequence
# Same as:         "$([char] 0xA789)"
$colonSubstitute = "`u{A789}"

注意:与[char]强制转换不同,`u{n}语法还支持Unicode BMP之外的字符,即代码点大于u+FFFF 0xFFFF的字符;例如,`u{1F913}因为也许你还没有完全理解这个问题。在Windows中,文件命名约定中不允许直接使用冒号,但使用我在问题中提到的这个Unicode字符,它可以完全像冒号一样进行解释,但可以愚弄Windows,使其认为它不是冒号,可以用于文件重命名,我正想这样。让我们来看看我知道还有什么不清楚的地方。在我看到这个新评论之前,我只是做了一个忍者编辑。你为什么要在文件名中使用冒号?有更好的日期时间格式来组织文件。最后一部分应该做你最初想要做的。我想我对Linux/Unix狂热有点太多了:它们确实允许任何字符,包括c文件名中的冒号继承自GitBash和Msysgits,在我对Batch/Cmd感到失望后,我想用Powershell对其进行替换,所以我开始了这次冒险,感谢您的帮助,它成功了。有点离题,但我建议您坚持ISO 8601标准或稍微改变一下
为您的文件名指定一个名称。unicode冒号可以工作,但有点粗糙。“纯”示例类似于20201106T1600。因为我们都是人类,我想这对眼睛来说并不容易,所以我会选择2020-11-06_1400或20201106_1400或其他变体。也许你没有完全理解这个问题。在Windows中,不允许在文件命名约定中直接使用冒号,但使用我在问题中提到的这个Unicode字符,它可以完全像冒号一样进行解释,但可以愚弄Windows,使其认为它不是冒号,可以用于文件重命名,我正是希望如此。如果还有什么不清楚的,请告诉我。在我看到这个新评论之前,我做了一个忍者编辑。你为什么要在文件名中使用冒号?有更好的日期时间格式用于组织文件。最后一节应该做您最初打算做的事情。我想我对Linux/Unix狂热有点太多了:它们确实允许在GitBash和Msysgits中继承的文件名中包含任何字符(包括冒号),我想用Powershell替换这些字符,在我对Batch/Cmd感到失望之后,我开始了这次冒险,谢谢你的帮助,它成功了。有点离题,但我建议你坚持ISO 8601标准,或者对你的文件名稍加修改。unicode冒号可以工作,但有点粗糙。“纯”示例类似于20201106T1600。因为我们都是人类,我想这对眼睛来说并不容易,所以我会选择2020-11-06_1400或20201106_1400或其他变体;我的荣幸。很高兴听到这有帮助,@VickyDev;我的荣幸。