Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Batch file 在fart.exe上循环并用变量替换搜索和替换文本_Batch File_Fart - Fatal编程技术网

Batch file 在fart.exe上循环并用变量替换搜索和替换文本

Batch file 在fart.exe上循环并用变量替换搜索和替换文本,batch-file,fart,Batch File,Fart,我有一个有点复杂的搜索和替换,我需要做。我正在使用一个批处理文件,该文件循环并执行fart.exe,我正在尝试将两个不同数组中的字符串输入“搜索”字段和“替换”字段 除了设置最终变量不起作用之外,其他一切都在工作,它们作为空字符串插入到命令中。如何将数组的值放入这些变量中 请注意,我搜索ID而不替换它的原因是因为这是我正在替换正确链接的验证的一部分 我的代码: setlocal EnableDelayedExpansion set i=0 for /F %%a in (merchants.tx

我有一个有点复杂的搜索和替换,我需要做。我正在使用一个批处理文件,该文件循环并执行fart.exe,我正在尝试将两个不同数组中的字符串输入“搜索”字段和“替换”字段

除了设置最终变量不起作用之外,其他一切都在工作,它们作为空字符串插入到命令中。如何将数组的值放入这些变量中

请注意,我搜索ID而不替换它的原因是因为这是我正在替换正确链接的验证的一部分

我的代码:

setlocal EnableDelayedExpansion

set i=0
for /F %%a in (merchants.txt) do (
   set /A i+=1
   set merArray[!i!]=%%a
)

for /F %%b in (merchant-ids.txt) do (
   set /A i+=1
   set idArray[!i!]=%%b
)

set n=%i%

for /L %%i in (0,1,%n%) do (
    set merDom=!merArray[%%i]!
    set merID=!idArray[%%i]!
    echo !merArray[%%i]!
    fart.exe -i -r "C:\css_js_test\*.css" http://%merDom%/merchant/%merId%/ http://www.example.com/merchant/%merId%/
)
pause

代码有三个问题。1) 在执行第二个
FOR/F
命令之前,需要将计数器变量重置回零。2) /l的
命令需要从1开始。3) 您需要对括号代码块中的所有变量使用延迟扩展。还请注意,您可以通过
fart
命令直接使用数组变量,而不是将它们分配给另一个环境变量

@echo off
setlocal EnableDelayedExpansion

set i=0
for /F "delims=" %%a in (merchants.txt) do (
   set /A i+=1
   set merArray[!i!]=%%a
)

set i=0
for /F "delims=" %%b in (merchant-ids.txt) do (
   set /A i+=1
   set idArray[!i!]=%%b
)

set n=%i%

for /L %%i in (1,1,%n%) do (
    fart.exe -i -r "C:\css_js_test\*.css" http://!merArray[%%i]!/merchant/!idArray[%%i]!/ http://www.example.com/merchant/!idArray[%%i]!/
)
pause
为了向您展示这在我的测试中是有效的,我只使用一个名为input.txt的文件作为输入。我正在从命令提示符运行所有内容,以便在运行批处理文件之前向您显示所有文件的内容。然后,我在末尾显示更改的输入文件的内容

C:\BatchFiles\FART\SO>type merchant.bat
@echo off
setlocal EnableDelayedExpansion

set i=0
for /F "delims=" %%a in (merchants.txt) do (
   set /A i+=1
   set merArray[!i!]=%%a
)

set i=0
for /F "delims=" %%b in (merchant-ids.txt) do (
   set /A i+=1
   set idArray[!i!]=%%b
)

set n=%i%

for /L %%i in (1,1,%n%) do (
    fart.exe -i "input.txt" http://!merArray[%%i]!/merchant/!idArray[%%i]!/ http://www.example.com/merchant/!idArray[%%i]!/
)

C:\BatchFiles\FART\SO>type merchants.txt
www.ibm.com
www.target.com

C:\BatchFiles\FART\SO>type merchant-ids.txt
101010
202020

C:\BatchFiles\FART\SO>type input.txt
http://www.ibm.com/merchant/101010/
http://www.target.com/merchant/202020/

C:\BatchFiles\FART\SO>merchant.bat
input.txt
Replaced 1 occurence(s) in 1 file(s).
input.txt
Replaced 1 occurence(s) in 1 file(s).

C:\BatchFiles\FART\SO>type input.txt
http://www.example.com/merchant/101010/
http://www.example.com/merchant/202020/

for/l从零开始,而第一个数组从1填充。由于在填充第二个数组之前,
i
未重置为零,因此数组不一致。IMO是否会更合理地获得一个包含两个商户ID字段的csv。因此,您决定对一些变量使用延迟扩展,而不是其他变量?你有什么理由认为这会奏效吗?你为什么还要费心制造额外的环境变量?只需将数组变量直接用于fart命令。@Squashman我对批处理不太熟练。我没有意识到我需要把它放在不同的地方。我还需要在哪里设置它?我使用环境变量的原因是直接使用数组变量也不起作用。@Squashman当我将数组变量直接添加到fart.exe命令时,输出包含!merArray[1,2,3等]@LotPings感谢您的输入,但是将i重置为零并没有解决我的问题。感谢您的代码重写!不幸的是,正在运行的fart.exe命令仍然不正确:fart.exe-i-r“C:\css\u js\u test*.css”http://!merArray[769]/商人!艾达瑞[769]!/其中769是每个命令的i。@ChipnCharge,我可以告诉你批处理文件代码本身非常可靠。如果放屁不起作用,你必须自己研究这个问题。我使用它的次数非常少,只是为了帮助那些似乎拒绝阅读帮助文件和谷歌搜索答案的人,但由于我不了解您试图使用它的范围,我恐怕无法提供太多帮助。我感谢您的帮助,但数组变量名被发送到fart.exe,不是数组变量值。这不是放屁本身的问题。到目前为止,我已经花了大约8个小时在谷歌上搜索答案,并在“放屁”上阅读。@ChipnCharge,你使用的是我给你的确切代码吗。否则,它将无法工作。如果您以某种方式混淆了您的示例,认为您可以将它们更改为您需要的内容,那么我会认为您所做的更改破坏了代码。我将更新我的答案,以向您表明它正在工作。我完全按照您曾经给我的方式运行它,但它没有做任何更改。所有结果都是“替换了0个文件中的0个事件”。我删除了“@echo off”,这样我就可以看到发给fart.exe的命令。这就是我得到屁值的地方。移除这些会破坏实际发生的事情吗?