Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 批量替换文件中的多个文本_Powershell_Batch File_Cmd - Fatal编程技术网

Powershell 批量替换文件中的多个文本

Powershell 批量替换文件中的多个文本,powershell,batch-file,cmd,Powershell,Batch File,Cmd,我需要使用.bat替换文件中多个不同的文本实例 (注意:SQF只是一个服务器配置文件,编码不是问题) 我试过: powershell -Command "(gc Structures.sqf) -replace 'WOOD_WALL', 'CINDERBLOCK_WALL' | Out-File BrickMe.sqf" powershell -Command "(gc Structures.sqf) -replace 'e614ee17-4467-4d51-a3f2-d4faa61de89e

我需要使用.bat替换文件中多个不同的文本实例

(注意:SQF只是一个服务器配置文件,编码不是问题)

我试过:

powershell -Command "(gc Structures.sqf) -replace 'WOOD_WALL', 'CINDERBLOCK_WALL' | Out-File BrickMe.sqf"

powershell -Command "(gc Structures.sqf) -replace 'e614ee17-4467-4d51-a3f2-d4faa61de89e', 'a59f5b71-2b9a-45a2-85bb-ec29a47f78aa' | Out-File BrickMe.sqf"

powershell -Command "(gc Structures.sqf) -replace 'Wood Wall', 'Cinderblock Wall' | Out-File BrickMe.sqf"
但它只执行最后一个命令。木墙仍然存在

sed-e“s/木墙/煤渣墙/”-e“s/木墙/煤渣墙/”BrickMe.sqf
只创建一个名为BrickMe.sqf的空文件

我还尝试了VBScript,但没有成功。我宁愿让它能够在任何Windows机器上运行,只要代码能够处理文件大小,但我不知道如何替换不同文本的多个实例而不重复整个命令并花费很长时间

我也看过这个 但是不确定我的“WOOD_WALL”实例和文件名放在哪里

我在谷歌上找到了大量替换多个文件中的一段文本的结果,但在替换一个文件中的多段文本方面几乎没有任何结果

故事:
我正在运行一个Arma 3服务器,并在游戏中建立了一个木制的管理员基地,我希望将其转换为一个灰渣基地。我以前做过,但只是手动替换实例名、实例ID和实体名。如果可能,我想使用批处理文件并将其上载到
http://www.exilemod.com
帮助其他管理员。这些文件的大小通常不超过15兆字节


我对Windows批处理文件很在行,但我是PowerShell新手。

难怪您的操作没有成功

您总是采用原始输入文件,执行操作,并以覆盖上一操作的方式保存到同一输出文件

为了更好地理解分解的PowerShell部分:

(gc Structures.sqf) -replace 'WOOD_WALL', 'CINDERBLOCK_WALL' `
                    -replace 'e614ee17-4467-4d51-a3f2-d4faa61de89e', 
                             'a59f5b71-2b9a-45a2-85bb-ec29a47f78aa' `
                    -replace 'Wood Wall', 'Cinderblock Wall' | 
 Out-File BrickMe.sqf
由于
-replace
操作符是基于正则表达式的,因此第一次和第三次替换可以通过以下方式连接:

  • 将字符类
    [\u]
    下划线或空格放在
  • 捕获组
    ([[u])
  • 在替换字符串中使用捕获组
    $1
所有这些内容再次包装在cmd行中:

powershell -NoProfile -Command "(gc Structures.sqf) -replace 'WOOD([_ ])WALL', 'CINDERBLOCK$1WALL' -replace 'e614ee17-4467-4d51-a3f2-d4faa61de89e','a59f5b71-2b9a-45a2-85bb-ec29a47f78aa'|Out-File BrickMe.sqf"

我也看到了这一点,但我不明白如何从批处理文件中运行它:$filename=“textfile.txt”$outputfile=“$filename”+”.out“获取内容$filename”| Foreach对象{$\u-replace'[','a'`-replace'],'o'`-replace'\\\124;','u'}|设置内容$outputfile您询问的是批处理文件还是Powershell?它们不是一回事,标记定义也完全不同。你在找其中一个。您正在查找通过cmd运行的批处理文件,或在Powershell中运行的Powershell脚本。选择一个,然后适当地更正标签和问题。请停止垃圾标签。如果不先阅读标签定义,就不要抓住每一个听起来很熟悉的标签。还有,当我们对内容一无所知时,我们应该如何告诉你如何替换文本?我在找一个批处理文件。据我所知,您可以通过windows批处理文件运行PowerShell命令。这不对吗?为什么内容很重要?这只是一个文本文件。啊,宾果!这就是我想要的。谢谢。:)这就成功了。我想我的命令会堆叠保存,所以保存第一个更改,然后重新打开,执行第二个更改,然后重新保存,保持进度。Kudo对你说,如果你找到一个有帮助的答案,你应该考虑和/或
(gc Structures.sqf) -replace 'WOOD([_ ])WALL', 'CINDERBLOCK$1WALL' `
                    -replace 'e614ee17-4467-4d51-a3f2-d4faa61de89e', 
                             'a59f5b71-2b9a-45a2-85bb-ec29a47f78aa' | 
Out-File BrickMe.sqf
powershell -NoProfile -Command "(gc Structures.sqf) -replace 'WOOD([_ ])WALL', 'CINDERBLOCK$1WALL' -replace 'e614ee17-4467-4d51-a3f2-d4faa61de89e','a59f5b71-2b9a-45a2-85bb-ec29a47f78aa'|Out-File BrickMe.sqf"