Cmd到powershell替换-特殊字符

Cmd到powershell替换-特殊字符,powershell,batch-file,ascii,apostrophe,Powershell,Batch File,Ascii,Apostrophe,我正在创建一个脚本,它将复制一个文件,重命名它,然后查看内部以删除某些特殊字符。其中一个特殊字符是某种ASCII撇号,我不能用键复制它。我可以复制粘贴它,但是替换功能不起作用 打开“文件>搜索奇怪的撇号”并替换为“无”。我想用一个普通的撇号来代替它,但我不知道怎么做,目前最大的问题是我不能让它“看到”这个奇怪的撇号,它会出现在我正在修改的自动生成的文件中。非常感谢您的帮助。谢谢:) 文件中的撇号:' 正常撇号:' 这是我隔离出来测试的批处理的一部分 @echo off

我正在创建一个脚本,它将复制一个文件,重命名它,然后查看内部以删除某些特殊字符。其中一个特殊字符是某种ASCII撇号,我不能用键复制它。我可以复制粘贴它,但是替换功能不起作用

打开“文件>搜索奇怪的撇号”并替换为“无”。我想用一个普通的撇号来代替它,但我不知道怎么做,目前最大的问题是我不能让它“看到”这个奇怪的撇号,它会出现在我正在修改的自动生成的文件中。非常感谢您的帮助。谢谢:)

文件中的撇号:'

正常撇号:'

这是我隔离出来测试的批处理的一部分

        @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接受两组不同的引号:

  • 双引号
  • 单引号
另外,所有这些引号都出现在大多数Windows ANSI代码页(12521250125712531254125512561258)中,因此它们可以在
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中正确呈现

附录:我发现更多的候选人带有引号(仅显示结果)