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

回复 2# ivor


一个很诡异的问题.代码在ISE中,第一次执行,显示如下错误
然后,再运行一次又正常了.
  1. 找不到“replace”的重载,参数计数为:“3”。
  2. 所在位置 C:\Users\CF\Desktop\无标题2.ps1:3 字符: 2
  3. + ([regex]$pattern='(?=.*BENDE)(?=.*LASTF).*\r?\n?').replace([IO.File]: ...
  4. +  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5.     + CategoryInfo          : NotSpecified: (:) [], MethodException
  6.     + FullyQualifiedErrorId : MethodCountCouldNotFindBest
复制代码
另一个诡异的问题是,右键以powershell运行脚本,无论如何都会有上述的重载错误.

测试环境WIN10,PS版本如下:
  1. Name                           Value
  2. ----                           -----
  3. PSVersion                      5.1.17763.134
  4. PSEdition                      Desktop
  5. PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
  6. BuildVersion                   10.0.17763.134
  7. CLRVersion                     4.0.30319.42000
  8. WSManStackVersion              3.0
  9. PSRemotingProtocolVersion      2.3
  10. SerializationVersion           1.1.0.1
复制代码
QQ 33892006

TOP

本帖最后由 flashercs 于 2019-1-16 08:38 编辑

回复 17# yhcfsr


   去掉赋值表达式或把赋值表达式单独一行;
ISE第一次运行失败,但是变量[regex]$pattern已经建立,所以第二次运行是使用内存中已存在的变量$pattern
但是powershell,每次运行都是新的session,所以会失败.
就为了省几个换行符而压缩代码,没必要;难道磁盘空间不够用?
代码易读易维护才重要,越接近人类语言越好,就像写作文一样;机器能读懂,没有学过ps的也能读懂,日后维护也方便.
  1. ([regex]'(?=.*BENDE)(?=.*LASTF).*\r?\n?').replace([IO.File]::ReadAllText($filename), '', 1)
复制代码
2

评分人数

TOP

回复 18# flashercs

感谢老哥指点.膜拜^V^
QQ 33892006

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (1.txt) do (
  3.     set "s=%%i"
  4.     if !n! LSS 1 (
  5.         if "!s:BENDE=!" NEQ "!s!" (
  6.             if "!s:LASTF=!" NEQ "!s!" (set /a n+=1) else (echo;!s!)
  7.         ) else (echo;!s!)
  8.     ) else (echo;!s!)
  9. )
  10. pause
复制代码
  1. sed -r "0,/BENDE.*LASTF|LASTF.*BENDE/{//d}" 1.txt
复制代码
  1. PowerShell "(type 1.txt) -join \"`r`n\" -replace '^([\s\S]*?).*(?:BENDE.*LASTF|LASTF.*BENDE).*(?:\n|$)', '$1'"
复制代码
1

评分人数

TOP

回复 19# WHY

全局变量延迟不安全,会使文件中英文叹号(如果有的话)丢失.
1

评分人数

QQ 33892006

TOP

回复 20# yhcfsr


    没考虑那么多,各位已经有那么多方案了,纯批仅作为一种解题思路,看看就好。
非要尽可能考虑周全的话,也不是办不到:
  1. @echo off
  2. for /f "delims=" %%i in ('findstr /n .* 1.txt') do (
  3.     set "s=%%i"
  4.     setlocal enabledelayedexpansion
  5.     if not defined n (
  6.         if "!s:BENDE=!" NEQ "!s!" (
  7.             if "!s:LASTF=!" NEQ "!s!" (
  8.                 endlocal & set n=1
  9.             ) else (
  10.                 echo;!s:*:=!&endlocal
  11.             )
  12.         ) else (
  13.             echo;!s:*:=!&endlocal
  14.         )
  15.     ) else (
  16.         echo;!s:*:=!&endlocal
  17.     )
  18. )
  19. pause
复制代码

TOP

返回列表