我有一个脚本(使用 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 代码页时不会被替换。
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 慢性肾衰竭- 更改活动控制台代码页。默认代码页由 Windows 区域设置决定。
答案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
,您可以将其改编到脚本中,将 替换为'
。’
但是,如果这不起作用,则可能是您使用的字符集存在问题。希望这对您有所帮助 :)