lote substituindo o caractere de apóstrofo

1

Eu tenho um script (usando cmd.exe w8) que recupera o caminho do papel de parede de HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper

Em seguida, coloco o caminho do papel de parede em uma variável, mas se o caminho do papel de parede contiver esse caractere (U + 2019), ele será substituído por ' (U + 0027).

Isso está mexendo com o meu comando xcopy que eu uso depois.

Exemplo:

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

o caminho no registro é

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

mas salvará o caminho como

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

Observe os apóstrofos no nome do arquivo

    
por Bob T 28.06.2017 / 16:27

2 respostas

4

for substitui (U + 2019) por ' (U + 0027)

Você pode contornar isso usando chcp para alterar a página de código UTF-8:

chcp 65001

Para demonstrar, criei o seguinte arquivo de lote 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

E o seguinte arquivo:

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

Saída da execução de 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

Você pode ver que não é substituído ao usar uma página de código UTF-8.

Leitura Adicional

por 29.06.2017 / 01:54
0

Uma solução fácil para esse problema seria simplesmente renomear o arquivo para algo que não continha o apóstrofo nele. No entanto, há algo mais que você poderia fazer para manter o apóstrofo no nome do arquivo.

Você pode tentar substituir o apóstrofo depois de salvar o caminho do arquivo em uma variável. Aqui está um exemplo.

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

A saída deste script seria C:\Your’path here , você poderia adaptar isso ao seu script para substituir o ' por . No entanto, se isso não funcionar, você pode ter um problema com o conjunto de caracteres que está usando. Espero que isso tenha sido útil:)

    
por 28.06.2017 / 18:53

Tags