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

追问老师一下,遇到下面的问题报错,如何处理?
原文增加了一行JJ=H+2 ,字典里面的H=TDXDLL1(4,0,1,0),+=TDXDLL1(35,X,Y,0)   
运行后报错
    $+=TDXDLL1(35,X,Y,0)    : 无法将“$+=TDXDLL1(35,X,Y,0)   ”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名
称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ $+="TDXDLL1(35,X,Y,0)   "
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: ($+=TDXDLL1(35,X,Y,0)   :String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

TOP

回复 28# idwma

感谢老师支持,完美解决!

TOP

回复 26# qixiaobin0715


    写成dll也行,麻烦老师了

TOP

本帖最后由 idwma 于 2024-11-8 09:06 编辑

最后一个链接失效了,只测了前面的
变量名随便输的,如果和文件里的有冲突还要改一下
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $aaaa='字典.txt'
  3. $bbbb='原文.txt'
  4. $dddd='结果.txt'
  5. gc $aaaa|?{$_ -match '='}|%{$cccc=$_ -split '=';iex('$'+$cccc[0]+'="'+$cccc[1]+'"')}
  6. $table=@{}
  7. gc $bbbb|?{$_ -match '='}|%{
  8.     $s=$_.trim()
  9.     while(
  10.         [regex]::matches($s,"\w+(?=(\((?:[^()]+|(?<Open>)\(|(?<-Open>)\))+(?(Open)(?!))\)))")|%{
  11.             $i=$_.groups[0].value+$_.groups[1].value
  12.             $table[$_.groups[0].value]=$_.groups[0].value+$_.groups[1].value
  13.             if($i -match '^\w+\([^)]+\)$'){
  14.                 $s=$s -replace [regex]::Escape($i),('$table["{0}"]' -f $_.groups[0].value)
  15.             }
  16.             1
  17.         }
  18.     ){}
  19.     while(
  20.         [regex]::matches($s,'\$\w+\[\"([^]]+)\"\]')|%{
  21.             $g=iex "$_"
  22.             $i=iex('$'+$_.groups[1])
  23.             if($i -ne $null){
  24.                 $k=$g -split '[(,)]'
  25.                 $table['c']=1
  26.                 $j=[regex]::replace(
  27.                     $i,
  28.                     '(?<=[(,])[A-Z]\w*(?=[,)])',
  29.                     {$k[$table['c']++]}
  30.                 )
  31.                 $s=$s -replace [regex]::Escape("$_"),$j
  32.                 1
  33.             }else{
  34.                 $s=$s -replace [regex]::Escape("$_"),$g
  35.                 1
  36.             }
  37.         }
  38.     ){}
  39.     $cccc=$s -split '='
  40.     iex('$'+$cccc[0]+'="'+$cccc[1]+'"')
  41.     [regex]::replace(
  42.         $s,
  43.         '(?<=[(,])\w+(?=[,)])',
  44.         {
  45.             $a=$args[0].groups[0]
  46.             if(test-path('Variable:'+$a)){iex('$'+$a)}else{$a}
  47.         }
  48.     )
  49. }|sc $dddd
复制代码

TOP

本帖最后由 aloha20200628 于 2024-11-7 15:52 编辑


楼主后来提供的示例文件和要求,与开始定义的原文/字典规则出现了冲突,并加入了函数表达式整体置换的要求,如此,原文不是纯粹的原文,字典不是纯粹的字典,而且依据变量替换的顺序或依据函数表达式整体替换的顺序会导出不同的结果

TOP

好像有点看明白了,多层嵌套式参数替换,使用批处理应当不适合,最好想想其它方法。

TOP

回复 23# TXTUSER


    你举的例子和实际数据不一样,很难帮到你啊

TOP

20楼附件处理后 DLL1(17,SIGNALS_USER(4567,2),0,0)
17、0、0这3个数是如何得到的?

TOP

回复 22# idwma
结果和原文一样的,没有替换成功

TOP

本帖最后由 idwma 于 2024-11-6 19:02 编辑

原文有两行为什么结果只留一行
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $aaaa='字典.txt'
  3. $bbbb='原文.txt'
  4. $dddd='结果.txt'
  5. $eeee=gc $bbbb
  6. gc $aaaa|%{$cccc=$_ -split '=';$eeee=$eeee -replace $cccc[0],$cccc[1]}
  7. sc $dddd $eeee
复制代码

TOP

本帖最后由 qixiaobin0715 于 2024-11-6 14:44 编辑

原来是股票啊,真搞不懂这些函数的关系。你这就不是单纯的替换了。

TOP

本帖最后由 TXTUSER 于 2024-11-8 13:01 编辑

回复 19# qixiaobin0715
老师,我重新传了附件,
这次简化了一下
请帮助解决

TOP

回复 17# TXTUSER
原文中的P1是怎么回事呢?

TOP

回复 16# qixiaobin0715
附件中的结果就是真实的需要

TOP

回复 15# qixiaobin0715


    字典中的X\Y分别对应原文中的数组变量

TOP

返回列表