Board logo

标题: [文本处理] 在批处理中调用 powershell 发现速度很慢,在找问题原因。 [打印本页]

作者: xczxczxcz    时间: 2018-10-29 20:55     标题: 在批处理中调用 powershell 发现速度很慢,在找问题原因。

本帖最后由 xczxczxcz 于 2018-10-29 20:56 编辑

如下面这条 查找 与 00.bat 同目录下的 00.txt 的哈希值。
  1. for /f "tokens=2 delims=: " %%e in ('powershell "get-filehash '00.txt' -Algorithm SHA1|FL"^|findstr /i "Hash"') do echo %%e
复制代码
====================
若用 certutil 命令很快。同样在处理网页内容时,用批命令处理虽繁琐点,但速度快。POWERSHELL 可以过滤,转码,文档截取等可以用管道一行命令处理完,但速度不快。偶现在一直找不到提速的方法。
求加速方法? 批和PS 混编。
作者: Batcher    时间: 2018-10-29 21:21

用的哪个版本?升级到5.x有效果没
作者: xczxczxcz    时间: 2018-10-29 21:44

回复 2# Batcher


    Windows 10 17134 最新版 PS 5.1.17134.228
  1. $psversiontable
复制代码
老大,分析一下。
作者: xczxczxcz    时间: 2018-10-29 21:48

单纯用PS速度也不错,但比 纯P 还是慢那点。
作者: yhcfsr    时间: 2018-10-29 22:18

本帖最后由 yhcfsr 于 2018-10-29 22:24 编辑

这个没办法,CMD加载POWERSHELL命令时需要时间,我的体验是平均1-1.5S左右
可以BAT调用PS脚本这种双文件方式.
如果非要单文件BAT,可以将PS脚本的命令全部放到BAT里面,不过要做些改变.有点烦琐
作者: xczxczxcz    时间: 2018-10-29 22:50

回复 5# yhcfsr

是的。偿试 把PS 单独写一行。会快那么一点点。
如果把 PS的所有脚本内容搬到 批中。真的很麻烦。至少现在偶感觉麻烦。那个 $ 感觉不好处理。

调用 PS外部脚本,还没试它的结果能不能正确返回 批中。当然可以采用输出到文本的方式。不过这样就多了时间差的问题。如PS脚本还没完,批已运行到末行。还没试,纯假设。

2600个网页截取内容转码过滤,开始用了47分钟。太慢。经过两3天的 help 各种参数。现在也可以在20分钟内处理完。但纯P只要5-6分钟。
ps cmdlet 太多,真的不好找出最佳命令。
   
目前还不好完全脱离 批命令.
作者: Batcher    时间: 2018-10-30 12:43

回复 6# xczxczxcz


    如果需要在bat的for或goto循环内部频繁调用powershell,那确实比较影响性能。
作者: yhcfsr    时间: 2018-10-30 18:32

回复 6# xczxczxcz


    POWERSHELL转BAT确实有多此一举的感觉.
小文件处理BAT有一定优势.
大数据处理,BAT是无论如何也比不上POWERSHELL的
POWERSHELL的编程有一定技巧,很小的改动,效率可能天壤之别.
多用.NET的命令,尝试用多线程处理任务.
作者: xczxczxcz    时间: 2018-10-31 09:53

回复 8# yhcfsr

昨天用纯PS写了个,处理550个网页,3-4秒全部搞定。速度很快。
作者: xczxczxcz    时间: 2018-10-31 09:57

回复 7# Batcher


    老大,PS 中如何输入一个或多个空行。这个我真的不知道。网络上都是一些去空行的。类似批处理中的 echo;>xxx的功能。
作者: Batcher    时间: 2018-10-31 11:53

回复 10# xczxczxcz


是这个意思吗?
  1. "bathome" | Out-File 1.txt
  2. "" | Out-File -Append 1.txt
  3. "net" | Out-File -Append 1.txt
复制代码

作者: xczxczxcz    时间: 2018-10-31 12:04

回复 11# Batcher


    你这是添加空格或添加NET  我想要在文章段落末尾添加空行。比如文章段落中间有个空行一样。不是添加空格。
作者: xczxczxcz    时间: 2018-10-31 12:07

本帖最后由 xczxczxcz 于 2018-10-31 12:15 编辑

回复 11# Batcher


    我错了,  “” |OUT-FILE 这个可以。

out-file 容易出乱码,要指定编码   我用  add-content  很少乱码。
作者: Batcher    时间: 2018-10-31 13:10

回复 13# xczxczxcz


    是的,Out-File 默认使用 Unicode 编码,可以用 -Encoding Default 指定使用系统默认的 ANSI 编码
作者: yhcfsr    时间: 2018-10-31 14:02

本帖最后由 yhcfsr 于 2018-10-31 19:52 编辑

回复 10# xczxczxcz
  1. $PSDefaultParameterValues['Out-File:Encoding'] = 'default';#设置文件编码
  2. 'abc'>>d:\1.txt;
  3. ''>>d:\1.txt;
  4. 'abdc'>>d:\1.txt;
复制代码

作者: yhcfsr    时间: 2018-10-31 19:53

回复 13# xczxczxcz


我看到你要求用ANSI,我更新了下15楼代码.
作者: 5i365    时间: 2022-1-8 09:26

回复 15# yhcfsr

不错, 可以修改默认编码, 学习了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2