Cmd到powershell替换-特殊字符
我正在创建一个脚本,它将复制一个文件,重命名它,然后查看内部以删除某些特殊字符。其中一个特殊字符是某种ASCII撇号,我不能用键复制它。我可以复制粘贴它,但是替换功能不起作用 打开“文件>搜索奇怪的撇号”并替换为“无”。我想用一个普通的撇号来代替它,但我不知道怎么做,目前最大的问题是我不能让它“看到”这个奇怪的撇号,它会出现在我正在修改的自动生成的文件中。非常感谢您的帮助。谢谢:) 文件中的撇号:' 正常撇号:' 这是我隔离出来测试的批处理的一部分Cmd到powershell替换-特殊字符,powershell,batch-file,ascii,apostrophe,Powershell,Batch File,Ascii,Apostrophe,我正在创建一个脚本,它将复制一个文件,重命名它,然后查看内部以删除某些特殊字符。其中一个特殊字符是某种ASCII撇号,我不能用键复制它。我可以复制粘贴它,但是替换功能不起作用 打开“文件>搜索奇怪的撇号”并替换为“无”。我想用一个普通的撇号来代替它,但我不知道怎么做,目前最大的问题是我不能让它“看到”这个奇怪的撇号,它会出现在我正在修改的自动生成的文件中。非常感谢您的帮助。谢谢:) 文件中的撇号:' 正常撇号:' 这是我隔离出来测试的批处理的一部分 @echo off
@echo off
set YYMMDD=%DATE:~-2,2%%DATE:~-7,2%%DATE:~-10,2%
set DDMMYYYY=%DATE:~-10,2%%DATE:~-7,2%%DATE:~-4,4%
set YYYY-MM-DD=%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2%
powershell -Command "(gc 'C:\LOCATION\Client_List_%DDMMYYYY%.csv') -replace '’', '' | Out-File 'C:\LOCATION\Client_List_%DDMMYYYY%.csv'"
Echo Done
我认为这是一个奇怪的反勾字符。至少是这样的 如果我这样做:
$text = "Weird ’ Normal ' Backtick ` Weird ’ "
$text.Replace("’","")
它给了我这个:
Weird Normal ' Backtick Weird
这行吗
powershell -Command "(gc 'C:\LOCATION\Client_List_%DDMMYYYY%.csv').replace('’’', '') |
Out-File 'C:\LOCATION\Client_List_%DDMMYYYY%.csv'"
通过加倍一个正常的回勾,它使脚本从字面上理解角色。将奇怪的撇号加倍似乎做了同样的事情,至少在我的测试中是这样
set "fileIn=C:\LOCATION\Client_List_%DDMMYYYY%.csv"
set "fileOu=C:\LOCATION\Client_List_%DDMMYYYY%.csv"
powershell -c "(gc '%fileIn%').Replace('‘‘','').Replace('’’','')|Out-File '%fileOu%'"
那个奇怪的撇号”
是U+2019
右单引号,应该是一个结束引号。它可以与不同的开场白搭配使用。在上面的示例中,”
是U+2018
左单引号
说
引号用于指定文字字符串。你可以附上
单引号(“
)或双引号中的字符串
(“
)
事实上,PowerShell接受两组不同的引号:
- 双引号
- 单引号
ANSI
-saved.bat
script-中使用,除了后一个引号
U+201B
单个高反9引号。在这种情况下,使用$([char]0x201B)
而不是'.''
,如下所示:
rem cast [char] to `[string]` ↓↓↓↓↓↓↓↓
powershell -c "(gc '%fileIn%').Replace( [string]$([char]0x201B) , '')"
rem ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
rem [char] can't be empty so specify `[string]` ↓↓↓↓↓↓↓↓
powershell -c "(gc '%fileIn%').Replace( $([char]0x201B) , [string]'')"
rem ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
或如下:
rem cast [char] to `[string]` ↓↓↓↓↓↓↓↓
powershell -c "(gc '%fileIn%').Replace( [string]$([char]0x201B) , '')"
rem ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
rem [char] can't be empty so specify `[string]` ↓↓↓↓↓↓↓↓
powershell -c "(gc '%fileIn%').Replace( $([char]0x201B) , [string]'')"
rem ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
分析和解释
下一个PowerShell代码片段显示了Unicode数据库的摘录(字符名以引号结尾或包含撇号
):
(来自修改的Get-CharInfo
cmdlet的输出。)原始Get-CharInfo
模块可从下载
下一个PowerShell脚本通过显示一些有效(在我的区域设置中无效)的引号组合来完成上述结果:
$arrSingleQuotes=
“U+0027撇号”,
“U+2018左单引号”,
“U+2019右单引号”,
U+201A单个低-9引号,
“U+201B单高反-9引号”,
“U+2018(左/右)单引号U+2019”,
“U+2019(右/左)单引号U+2018”
“$arrSingleQuotes(任意组合)”
$arrSingleQuotes
$arrDoubleQoutes=
“U+0022引号”,
“U+201C左双引号”,
“U+201D右双引号”“,
“U+201E双低-9引号”,
“U+201C(左/右)双引号U+201D”,
“”“U+201D(右/左)双引号U+201C”“”
“$arrDoubleQoutes(任意组合)”
$Arrqoutes
$noQuotes=@”
«U+00AB左指双角度引号
»U+00BB右指双角度引号
U+201F双高-9引号
⹂ U+2E42双低-9引号
èU+2039单左指角引号
›U+203A单直角引号
“U+301D反向双素数引号
“U+301E双素引号
〟U+301F低双素引号
՚U+055A亚美尼亚撇号
"@
“$noQuotes”
$noQuotes
输出:
PS D:>D:\PShell\SO\41488245\u quotes.ps1
$arrSingleQuotes(任意组合)
“U+0027撇号”
“U+2018左单引号”
“U+2019右单引号”
“U+201A单个低-9引号”
“U+201B单高-9引号”
“U+2018(左/右)单引号U+2019”
“U+2019(右/左)单引号U+2018”
$arrDoubleQoutes(任意组合)
“U+0022引号”
“U+201C左双引号”
“U+201D右双引号”
“U+201E双低-9引号”
“U+201C(左/右)双引号U+201D”
“U+201D(右/左)双引号U+201C”
$noQuotes
«U+00AB左指双角度引号
»U+00BB右指双角度引号
U+201F双高-9引号
⹂ U+2E42双低-9引号
èU+2039单左指角引号
›U+203A单直角引号
“U+301D反向双素数引号
“U+301E双素引号
〟U+301F低双素引号
՚U+055A亚美尼亚撇号
请注意⹂ Unicode数据库中存在U+2E42双低-9引号
,并在PowerShell ISE中正确呈现
附录:我发现更多的候选人带有引号(仅显示结果)