AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1892642
Accepted
LDAsh
LDAsh
Asked: 2025-04-18 09:55:43 +0800 CST2025-04-18 09:55:43 +0800 CST 2025-04-18 09:55:43 +0800 CST

Executando um arquivo BAT e acidentalmente encontrando um poema chinês obscuro

  • 772

Poema chinês obscuro encontrado acidentalmente (arquivo BAT)

Aconteceu uma coisa muito estranha. Executei isso em um arquivo em lote:

wmic timezone get caption>>tmp_ist.bak
time/date>>tmp_ist.bak

Isso foi por acidente, a hora/data era uma nota para mim por %TIME%>>, de qualquer forma o arquivo em lote parou e eu olhei no arquivo .bak e:

Legenda (UTC+09:30) Adelaide
桔⁥祳瑳浥挠湡潮⁴捡散瑰琠敨琠浩⁥湥整敲⹤਍湅整⁲桴⁥敮⁷楴敭›

...ficou mais estranho, isso se traduz em:

Laranja ⁥ 祳瑳絣 raspe a maré ⁴ pegue as rosas espalhadas e espalhe o tesouro ⁥ 琠 Hao ⁥ ṥṣṣṣṣṇṣṣṇṣ�

Ele disparou o timecomando e tentou entrar /date, quando isso é feito (no prompt) ele diz:

The system cannot accept the time entered.

Palavras não tão bonitas. Não faço ideia do que está acontecendo aqui!!!

batch-file
  • 2 2 respostas
  • 3096 Views

2 respostas

  • Voted
  1. Best Answer
    phuclv
    2025-04-18T12:00:16+08:002025-04-18T12:00:16+08:00

    O problema é devido ao uso misto que wmicsempre gera texto UTF-16 no formato de saída padrão

    Toda a saída WMIC é texto Unicode UTF16 com um BOM, converta isso para ASCII simples com TYPE ou MORE.
    por exemploWMIC OS LIST BRIEF |more >> "C:\demo.txt"

    https://ss64.com/nt/wmic.html

    桔⁥祳瑳浥挠湡潮⁴捡散瑰琠敨琠浩⁥湥整敲⹤਍湅整⁲桴⁥敮⁷楴敭›é U+6854 U+2065 U+7973 U+7473 U+6D65 U+6320 U+6E61 U+6F6E U+2074 U+6361 U+6563 U+7470 U+7420 U+6568 U+7420 U+6D69 U+2065 U+6E65 U+6574 U+6572 U+2E64 U+0A0D U+6E45 U+6574 U+2072 U+6874 U+2065 U+656E U+2077 U+6974 U+656D U+203Ao que resulta na seguinte sequência de bytes quando codificado em UTF-16 (LE)

    54 68 65 20 73 79 73 74 65 6D 20 63 61 6E 6E 6F 74 20 61 63 63 65 70 74 20 74 68 65 20 74 69 6D 65 20 65 6E 74 65 72 65 64 2E 0D 0A 45 6E 74 65 72 20 74 68 65 20 6E 65 77 20 74 69 6D 65 3A 20
    

    e ao tratar a mesma sequência de bytes como ASCII, torna-se

    The system cannot accept the time entered.
    Enter the new time:
    

    Aqui, estou usando o PowerShell para demonstrar isso com mais facilidade. A saída do timecomando é a esperada:

    PS D:\> cmd /c "time/date > time.txt" ^C
    PS D:\> Format-Hex .\time.txt
    
               Path: D:\time.txt
    
               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    
    00000000   54 68 65 20 73 79 73 74 65 6D 20 63 61 6E 6E 6F  The system canno
    00000010   74 20 61 63 63 65 70 74 20 74 68 65 20 74 69 6D  t accept the tim
    00000020   65 20 65 6E 74 65 72 65 64 2E 0D 0A 45 6E 74 65  e entered...Ente
    00000030   72 20 74 68 65 20 6E 65 77 20 74 69 6D 65 3A 20  r the new time:
    

    No entanto, a saída wmicé sempre UTF-16, por isso a FF FEassinatura BOM está no início. E quando você anexa a timesaída a esse arquivo, ele se torna completamente lixo devido à codificação incorreta.

    PS D:\> cmd /c "wmic timezone get caption > wmic.txt"
    PS D:\> Format-Hex wmic.txt
    
               Path: D:\wmic.txt
    
               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    
    00000000   FF FE 43 00 61 00 70 00 74 00 69 00 6F 00 6E 00  .þC.a.p.t.i.o.n.
    00000010   20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
    00000020   20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
    00000030   20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
    00000040   20 00 20 00 20 00 20 00 20 00 20 00 0D 00 0A 00   . . . . . .....
    00000050   28 00 55 00 54 00 43 00 2B 00 30 00 37 00 3A 00  (.U.T.C.+.0.7.:.
    00000060   30 00 30 00 29 00 20 00 42 00 61 00 6E 00 67 00  0.0.). .B.a.n.g.
    00000070   6B 00 6F 00 6B 00 2C 00 20 00 48 00 61 00 6E 00  k.o.k.,. .H.a.n.
    00000080   6F 00 69 00 2C 00 20 00 4A 00 61 00 6B 00 61 00  o.i.,. .J.a.k.a.
    00000090   72 00 74 00 61 00 20 00 20 00 0D 00 0A 00        r.t.a. . .....
    
    PS D:\> cmd /c "time/date >> wmic.txt" ^C
    PS D:\> Format-Hex wmic.txt
    
               Path: D:\wmic.txt
    
               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    
    00000000   FF FE 43 00 61 00 70 00 74 00 69 00 6F 00 6E 00  .þC.a.p.t.i.o.n.
    00000010   20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
    00000020   20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
    00000030   20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
    00000040   20 00 20 00 20 00 20 00 20 00 20 00 0D 00 0A 00   . . . . . .....
    00000050   28 00 55 00 54 00 43 00 2B 00 30 00 37 00 3A 00  (.U.T.C.+.0.7.:.
    00000060   30 00 30 00 29 00 20 00 42 00 61 00 6E 00 67 00  0.0.). .B.a.n.g.
    00000070   6B 00 6F 00 6B 00 2C 00 20 00 48 00 61 00 6E 00  k.o.k.,. .H.a.n.
    00000080   6F 00 69 00 2C 00 20 00 4A 00 61 00 6B 00 61 00  o.i.,. .J.a.k.a.
    00000090   72 00 74 00 61 00 20 00 20 00 0D 00 0A 00 54 68  r.t.a. . .....Th
    000000A0   65 20 73 79 73 74 65 6D 20 63 61 6E 6E 6F 74 20  e system cannot
    000000B0   61 63 63 65 70 74 20 74 68 65 20 74 69 6D 65 20  accept the time
    000000C0   65 6E 74 65 72 65 64 2E 0D 0A 45 6E 74 65 72 20  entered...Enter
    000000D0   74 68 65 20 6E 65 77 20 74 69 6D 65 3A 20        the new time:
    

    A saída ANSI é tratada como UTF-16, resultando em um resultado semelhante ao do bug " Bush escondeu os fatos " . Na pergunta, você apenas mostra o erro, >>mas provavelmente a saída inicial era dewmic

    Você pode usar alguns truques, como o pipingmore mencionado acima para converter wmica saída para ANSI

    wmic timezone get caption | more >> tmp_ist.bak
    

    De qualquer forma , o wmic foi descontinuado há muito tempo, os novos cmdlets do PowerShell devem ser usados ​​em seu lugar

    • 23
  2. Io-oI
    2025-04-20T09:53:54+08:002025-04-20T09:53:54+08:00

    "O problema ocorre devido ao uso do wmic, que sempre gera texto UTF-16 "

    Isso não é realmente verdade , porque wmicpode dar saída em codificações diferentes dependendo da que /formatvocê escolher.

    Não se trata apenas de usar wmic, mas do que você coloca depois de /format:[here].

    Diferentes opções de formato levarão a diferentes codificações de saída, o que pode afetar a forma como você lida com o resultado. A forma como a saída é gerada pode facilitar ou dificultar o processamento de strings, dependendo de para onde você a envia ou de como deseja usá-la.

    Formatos mais simples costumam ser mais fáceis de ler e analisar em scripts, enquanto formatos mais estruturados podem ser melhores para uso programático, mesmo que exijam lidar com coisas como UTF-16. Novamente, tudo depende do cenário e das ações que você tomar com a saída.


    • Veja você mesmo:
    @echo off
    
    >.\"tmp_ist.bak" cd /d "%~dp0"
    
    for /f usebackq^tokens^=4delims^=^<^> %%i in =;(`
         wmic timezone get caption /format:xml ^| find "VALUE"
       `);= do >.\"tmp_ist.bak" =;( echo/%%~i
            for %%G in =;(time,date);= do call echo/%%%%~G%%
        );=
    
    timeout -1 | type .\"tmp_ist.bak"
    

    • Aqui está o conteúdo do arquivo .\"tmp_ist.bak":
    (UTC-03:00) Brasilia
    22:51:05.46
    Sat 04/19/20
    

    • Você também pode obter a mesma saída usando:
    @echo off
    
    >.\"tmp_ist.bak" cd /d "%~dp0"
    
    for /f useback^tokens^=3* %%i in =;(`
        systeminfo ^| findstr /C:"Time Zone"
       `);= do >.\"tmp_ist.bak" =;( echo/%%~i %%~j
            for %%G in =;(time,date);= do call echo/%%%%~G%%
        );=
    
    timeout -1 | type .\"tmp_ist.bak"
    

    • Saída:
    (UTC-03:00) Brasilia
    23:12:46.99
    Sat 04/19/2025
    
    • 5

relate perguntas

  • preciso de ajuda para descobrir como fazer meu arquivo de lote parar de quebrar

  • Net Stop, como parar um segundo serviço enquanto o primeiro está ¨Parando...¨

  • Gerador de senha em lote

  • O Windows 2016 não executa o arquivo .bat

  • Como fazer um script em lote para fazer backup de um arquivo específico com uma pasta de destino exclusiva (windows) [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve