批量替换撇号字符

批量替换撇号字符

我有一个脚本(使用 cmd.exe w8)可以从中检索壁纸路径HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper

然后我将壁纸的路径放在一个变量中,但如果壁纸的路径包含这个字符(U+2019),它将被替换为'(U+0027)。

这会干扰我之后使用的 xcopy 命令。

例子:

FOR /F "usebackq tokens=2,* skip=2" %%L IN (
    `reg query "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper`
) DO SET _pathWallpaper=%%M

注册表中的路径是

C:\Users\User\AppData\Roaming\Mozilla\Firefox\Fond d’écran.bmp

但它会将路径保存为

C:\Users\User\AppData\Roaming\Mozilla\Firefox\Fond d'écran.bmp

注意文件名中的撇号

答案1

for'(U+0027)替换(U+2019)

您可以使用以下方法解决此问题慢性肾衰竭更改代码页 UTF-8:

chcp 65001

为了演示我创建了以下批处理文件test.cmd

@echo off
setlocal enabledelayedexpansion
echo use UTF-8 code page
chcp 65001
for /f "usebackq tokens=*" %%l in (`dir /b *.bmp`) do (
  echo %%l
  )
echo use default code page
chcp 850
for /f "usebackq tokens=*" %%l in (`dir /b *.bmp`) do (
  echo %%l
  )
endlocal

以及以下文件:

> dir /b *.bmp
Fond d’écran.bmp

运行输出test.cmd

> test
use UTF-8 code page
Active code page: 65001
Fond d’écran.bmp
use default code page
Active code page: 850
Fond d'écran.bmp

您可以看到,使用 UTF-8 代码页时不会被替换。


进一步阅读

答案2

解决此问题的一个简单方法是将文件重命名为不带撇号的名称。但是,您还可以采取其他措施来保留文件名中的撇号。

您可以尝试将文件路径保存到变量后替换撇号。以下是示例。

setlocal enabledelayedexpansion
set string=C:\Your'e path here
set find='
set replace=’
call set string=%%string:!find!=!replace!%%
echo %string%

此脚本的输出为C:\Your’path here,您可以将其改编到脚本中,将 替换为'但是,如果这不起作用,则可能是您使用的字符集存在问题。希望这对您有所帮助 :)

相关内容