1

У меня есть скрипт (использующий 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

Обратите внимание на апострофы в имени файла

2 ответа2

4

for замены (U+2019) на ' (U+0027)

Вы можете обойти это, используя chcp, чтобы изменить кодовую страницу 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.


Дальнейшее чтение

0

Простым решением этой проблемы было бы просто переименовать файл, чтобы в нем не было апострофа. Однако есть еще кое-что, что вы можете сделать, чтобы оставить апостроф в имени файла.

Вы можете попробовать заменить апостроф после сохранения пути к файлу в переменной. Вот пример.

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 , вы можете адаптировать его в свой сценарий, чтобы заменить ' с . Однако, если это не работает, у вас могут быть проблемы с набором символов, который вы используете. Надеюсь, это было полезно :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .