[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[技术讨论] 在powershell执行重定向后的文件, 包含中文会报错

求高手指点一下, 怎样在powershell中成功回显批处理中的中文,

下面的代码能成功执行, 并在powershell控制台回显信息
@'
@echo off
echo abcd
'@ | Out-File -Encoding default "bat.bat"
.\bat.bat
-------------------------------------------------------
但是下面的代码, 就不行了, 会报错
@'
@echo off
echo abcd
echo 中国
'@ | Out-File -Encoding default "bat.bat"
.\bat.bat
------------------------------------------------------
改为 -Encoding ascii 后, 能执行, 但是中文字显示乱码
改为 -Encoding utf8 后, 仍然报错

ps here string的换行符是\n 而不是\r\n; 批处理对\n换行符 支持不佳。
可以这样
  1. @'
  2. @echo off
  3. echo abcd
  4. echo 中国
  5. '@ -replace '(?<!\r)\n',"`r`n"| Out-File -Encoding default "bat.bat"
复制代码
1

评分人数

    • 5i365: 多谢指点技术 + 1
微信:flashercs
QQ:49908356

TOP

回复 2# flashercs


    想再请教一下高手, 您是怎样看到的换行符是\n? 从什么工具里调试看到的?

TOP

本帖最后由 flashercs 于 2021-11-23 09:55 编辑

回复 3# 5i365


    ps cmdlet
  1. Format-Hex -Path .\bat.bat
复制代码
或者用winhex
还有一点,这个here string在 powershell 与 powershell_ise 的换行符是不一致的,powershell中是\n ,powershell_ise中是 \r\n
微信:flashercs
QQ:49908356

TOP

本帖最后由 5i365 于 2021-11-23 12:42 编辑

回复 4# flashercs


    多谢!
@echo off
start "" notepad
echo 我是中国人
上面的信息输出为下面的信息, 没有找到\n

----
           Path: C:\Users\Administrator\Desktop\a.bat

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   40 65 63 68 6F 20 6F 66 66 0D 0A 73 74 61 72 74  @echo off..start
00000010   20 22 22 20 6E 6F 74 65 70 61 64 0D 0A 65 63 68   "" notepad..ech
00000020   6F 20 CE D2 CA C7 D6 D0 B9 FA C8 CB 0D 0A        o ÎòêÇÖD1úèË..

TOP

回复 5# 5i365


    0D 是 \r, 0A 是\n
微信:flashercs
QQ:49908356

TOP

回复 6# flashercs


    学习了, 多谢

TOP

回复 6# flashercs


    大侠你好, 替换换行符也乱码了, 批处理中是在找卷标为win的盘符, 中国二字输出为乱码, 但是在powershell ise中没有乱码, 看来还有哪里要改
,把下面的代码, 另存为test.ps1右键中选择使用powershell运行,  

@'
@echo off
for %%a in (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A) do (
vol %%a:|findstr /i /e win&&echo %%a
) 2>null
echo 中国
'@ -replace '(?<!\r)\n', "`r`n" | Out-File -Encoding default b.bat
.\b.bat
cmd /c pause

TOP

回复 8# 5i365


    你的test.ps1保存编码是utf-8, 就这样了。
ps1 编码建议保存为utf-8 with bom 或 ANSI 就不会乱码
微信:flashercs
QQ:49908356

TOP

返回列表