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

[问题求助] poweshell 合并不同编码文本

[复制链接]
 楼主| 发表于 2024-5-15 16:18:26 | 显示全部楼层
本帖最后由 娜美 于 2024-5-15 16:35 编辑

回复 30# aloha20200628
  1. powershell "gc *.txt -readcount 1000 -enc 'utf8'|ac 'all.tmp'"
复制代码
我套不进去,   脑壳不够用
发表于 2024-5-15 17:24:15 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-5-15 17:28 编辑

回复 31# 娜美

管道是效率大杀器尤其是对大数据,尽量不用...

  1. @echo off &setlocal &del /q "allinOne.txt" "bug.txt" 2>nul
  2. for /f "delims=" %%F in (b.txt) do if not exist "%%~F" (echo,"badFile -- %%F"&echo,%%F>>"bug.txt") else (
  3.         for /f "tokens=1 delims=_" %%a in (' coder.exe -s -a gc -f "%%~F" ') do (
  4.                 echo,        /// %%~F ///>>"allinOne.txt"
  5.                 if /i "%%a"=="utf-8" (
  6.                         powershell "$s=gc '%%~F' readcount 1000 -enc 'utf8';ac 'allinOne.txt' $s"
  7.                 ) else if /i "%%a"=="utf-16" (
  8.                         powershell "$s=gc '%%~F' readcount 1000 -enc 'unicode';ac 'allinOne.txt' $s"
  9.                 ) else if /i "%%a"=="ansi" (more "%%~F">>"allinOne.txt")
  10.         )
  11.         echo,>>"allinOne.txt"
  12. )
  13. endlocal&pause&exit/b
复制代码
 楼主| 发表于 2024-5-15 19:42:55 | 显示全部楼层
本帖最后由 娜美 于 2024-5-15 19:53 编辑

回复 32# aloha20200628

有问题,  只合并了ANSI编码文本,  UTF8  UTF16编码文本一个都没有被合并进去
似乎是这2 powershell写法原因

powershell "$s=gc '%%~F' readcount 1000 -enc 'utf8';ac 'allinOne.txt' $s"
powershell "$s=gc '%%~F' readcount 1000 -enc 'unicode';ac 'allinOne.txt' $s"


似乎是读取变量文件和ac问题
$s=gc '%%~F' readcount 1000
发表于 2024-5-15 20:50:11 | 显示全部楼层
回复 33# 娜美

为何从[io:file]高效方法回退管道模式呢
 楼主| 发表于 2024-5-15 21:02:31 | 显示全部楼层
本帖最后由 娜美 于 2024-5-15 21:13 编辑

回复 34# aloha20200628

[io:file] 依靠内存模式
虽然也快  但抑制不了内存挤满问题




[io:file] 逐行读取模式   
速度4mb/s左右


速度30mb/s左右, 肯定是最快最佳方案,  但是代码套不进去
powershell "gc *.txt -readcount 1000 -enc:'default' | ac -enc:default 'all.tmp'"

另外more 也有些问题,要弃用, 大一点100mb文件会卡住不动

-- More (0%) --
发表于 2024-5-15 21:37:01 | 显示全部楼层
回复 35# 娜美

用以下5行代码替换32楼代码中的5-9行,再试吧...

  1.                 if /i "%%a"=="utf-8" (
  2.                         powershell " gc '%%~F' readcount 1000 -enc 'utf8'|ac 'allinOne.txt' "
  3.                 ) else if /i "%%a"=="utf-16" (
  4.                         powershell " gc '%%~F' readcount 1000 -enc 'unicode'|ac 'allinOne.txt' "
  5.                 ) else if /i "%%a"=="ansi" (powershell " gc '%%~F' readcount 1000|ac 'allinOne.txt' ")
复制代码
 楼主| 发表于 2024-5-15 23:23:27 | 显示全部楼层
本帖最后由 娜美 于 2024-5-15 23:32 编辑

回复 36# aloha20200628
大哥哥32楼那个可以了
大哥哥请看看  套进这个里面 似乎返回一些错误

  1. @echo off &setlocal &del /q "allinOne.txt" "bug.txt" 2>nul
  2. for /f "delims=" %%F in (b.txt) do if not exist "%%~F" (echo,"badFile -- %%F"&echo,%%F>>"bug.txt") else (
  3.         for /f "tokens=1-2 delims=-" %%a in (' uchardet.exe "%%~F" ') do (
  4.                 if /i "%%a" neq "unknown" (echo,        /// %%~F ///>>"allinOne.txt")
  5.                 if /i "%%a"=="utf" if "%%b"=="8" (
  6.                         powershell " gc '%%~F' -readcount 1000 -enc 'utf8'|ac 'allinOne.txt' "
  7.                 ) else if /i "%%a"=="utf" if "%%b"=="16" (
  8.                         powershell " gc '%%~F' -readcount 1000 -enc 'utf16'|ac 'allinOne.txt' "
  9.                 )
  10.                 if /i "%%a"=="ascii" (
  11.                         powershell " gc '%%~F' -readcount 1000 -enc 'ascii'|ac 'allinOne.txt' "
  12.                 ) else if /i "%%a"=="gb18030" (
  13.                         powershell " gc '%%~F' -readcount 1000 -enc 'default'|ac 'allinOne.txt' "
  14.                 ) else if /i "%%a"=="unknown" (
  15.                         echo,"unknown -- %%F"&echo,%%F>>"bug.txt"
  16.                 )
  17.         )
  18.         echo,>>"allinOne.txt"
  19. )
  20. endlocal&pause&exit/b
复制代码
  1. Get-Content : 无法绑定参数“Encoding”。无法将值“utf16”转换为类型“Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding”。错误:“无法将标识符名称 utf16 与有效的枚举器名称相匹配。请指定以下枚举器名称之一,然后重试:
  2. Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, UTF32, Ascii, Default, Oem, BigEndianUTF32”
  3. 所在位置 行:1 字符: 47
  4. +  gc 'UTF16BE-UNIX编码.txt' -readcount 1000 -enc 'utf16'|ac 'allinOne.tx ...
  5. +                                               ~~~~~~~
  6.     + CategoryInfo          : InvalidArgument: (:) [Get-Content],ParameterBindingException
  7.     + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.GetContentCommand
复制代码
发表于 2024-5-15 23:38:16 | 显示全部楼层
回复 37# 娜美

37楼代码第8行改为下行即可...
  1. powershell " gc '%%~F' -readcount 1000 -enc 'unicode'|ac 'allinOne.txt' "
复制代码
 楼主| 发表于 2024-5-16 08:15:16 | 显示全部楼层
回复 38# aloha20200628


   噢,真晕呀,我竟然没注意到这个,可能试多了晕了吧。好了,追求得到完满结束,多谢大哥哥哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:08 , Processed in 0.019050 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表