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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 因为可以在for循环(double for/F%%L for/F%Skip%)中使用,而不使用变量for/F skipe=%%L?_Batch File_Cmd - Fatal编程技术网

Batch file 因为可以在for循环(double for/F%%L for/F%Skip%)中使用,而不使用变量for/F skipe=%%L?

Batch file 因为可以在for循环(double for/F%%L for/F%Skip%)中使用,而不使用变量for/F skipe=%%L?,batch-file,cmd,Batch File,Cmd,如何在不使用设置变量的情况下,在for循环中使用double进行循环,而不为某些变量(如skip=%%L)设置变量 这个问题可能与此相关,但它不符合我的需要。这不是帮助我的方法。我正在寻找的是一种在(内部)中使用以下循环的方法一个For/F循环,用于skip=%%L循环内的巡回变量,不使用任何变量Forskip=??\u变量,仅skip=%%L 有没有办法做到这一点? :循环 对于/f%%L in('调用集/a“\u一些\u计数\u变量\u-=1”)执行以下操作( 设置“\u for_lo


如何在不使用设置变量的情况下,在for循环中使用double进行循环,而不为某些变量(如
skip=%%L
)设置变量

这个问题可能与此相关,但它不符合我的需要。这不是帮助我的方法。我正在寻找的是一种在(内部)中使用以下循环的方法一个For/F循环,用于
skip=%%L
循环内的巡回变量,不使用任何变量For
skip=??\u变量,仅
skip=%%L

  • 有没有办法做到这一点?
:循环
对于/f%%L in('调用集/a“\u一些\u计数\u变量\u-=1”)执行以下操作(
设置“\u for_loop\u L=^tokens^=*^skip^=%%L^delims^=^^eol^=”&&(
对于('type file\u multiplelines.log')中的/f%\u for\u循环\u L%%%f(
这里有更多代码!…使用%%L和%%f!
)))

我需要按照以下代码工作:

:循环
对于/f%%L in('调用集/a“\u一些\u计数\u变量\u-=1”)执行以下操作(
对于('type file\u muti\u lines.log')中的/f^标记^(
这里有更多代码!…使用%%L和%%f!
))


接受的答案将产生以下代码:


:循环
对于('type file\u muti\u lines.log')中的/f skip^=^%1^^^^^^^标记^=*^^^^^^^^^^^^^^^^=^^^^^^^^^^^^^^^^^^^^=%f(
这里有更多使用%1和%%f的代码,如果“%1”==“1”转到,则阻止无限循环:下一步
对于/f%%L in('调用集/a“\u一些\u计数\u变量\u-=1”),执行调用:循环%%L
)

根据进一步的评论和编辑的问题:

set/a(一些)计数(变量)减去(一)=(一些)计数(变量)-1
:循环
对于/f“tokens=*skip=%\u一些\u计数\u变量\u更少\u一个\u%delims=eol=“%%f in('type file\u multiplelines.log')do(
echo=;%_一些_计数_变量_减去u一%;%f;| findstr/lvie“特定的_字符串”&&goto:loop
如果不是“\u一些\u计数\u变量\u少一个”=“!\u cnt!”(设置/a“\u cnt+=1”&&goto:loop)
后藤:下一个
)
:下一个
不管现在发生什么。
当在
\u cnt
等于
\u一些\u计数\u变量\u较少\u一个\u之前找到“特定\u字符串”时,此代码将产生一个无限循环

如果不定义变量或调用子例程,我看不到实现这一点的方法。

根据进一步的评论和编辑的问题:

set/a(一些)计数(变量)减去(一)=(一些)计数(变量)-1
:循环
对于/f“tokens=*skip=%\u一些\u计数\u变量\u更少\u一个\u%delims=eol=“%%f in('type file\u multiplelines.log')do(
echo=;%_一些_计数_变量_减去u一%;%f;| findstr/lvie“特定的_字符串”&&goto:loop
如果不是“\u一些\u计数\u变量\u少一个”=“!\u cnt!”(设置/a“\u cnt+=1”&&goto:loop)
后藤:下一个
)
:下一个
不管现在发生什么。
当在
\u cnt
等于
\u一些\u计数\u变量\u较少\u一个\u之前找到“特定\u字符串”时,此代码将产生一个无限循环

如果不定义变量或调用子例程,我看不出有什么方法可以做到这一点。

我想您可以在
for
循环中编写与
skip=%%L
等效的代码

setlocal enabledelayedexpansion
设置_cnt=0
对于/f“tokens=*delims=eol=“%%f in('type file\u muti\u lines.log')do(
设置/a_cnt+=1
if/i!\u cnt!GEQ%\u一些\u计数\u变量(
对于/f%%L in('调用集/a“\u一些\u计数\u变量\u-=1”)执行以下操作(
echo=;%%~L;%%f;| findstr/lvie“特定字符串”&&goto:next
)
)
)
:下一个

未测试但我认为在测试“特定字符串”之前会跳过一些“计数”变量-1行。我不确定在找到“特定字符串”的1个实例后是否希望
goto:next
--您的代码的这一部分我不清楚。

我想您可以在
for
循环中编写相当于
skip=%%L
的代码

setlocal enabledelayedexpansion
设置_cnt=0
对于/f“tokens=*delims=eol=“%%f in('type file\u muti\u lines.log')do(
设置/a_cnt+=1
if/i!\u cnt!GEQ%\u一些\u计数\u变量(
对于/f%%L in('调用集/a“\u一些\u计数\u变量\u-=1”)执行以下操作(
echo=;%%~L;%%f;| findstr/lvie“特定字符串”&&goto:next
)
)
)
:下一个

未测试但我认为在测试“特定字符串”之前会跳过一些“计数”变量-1行。我不确定在找到“特定字符串”的1个实例后是否希望
goto:next
--我不清楚代码的这一部分。

FOR
命令使用了与其他批处理命令不同的解析器,这导致了这样一个事实,即nor DELATED EXPLATION FOR参数都不会在选项中展开。
您的
SET
构造无法解决此问题,它将失败,因为可能为空的变量\u for\u loop\L甚至在您第一次设置它之前就会展开

只有百分比扩展起作用,因为这是在FOR解析器激活之前计算的

在你的情况下,你需要

for /f %%L in ('call set /a "_some_count_varible_-=1"') do (
    call :subfunc %%L
)
exit /b

:subfunc
for /f tokens^=*^ skip^=%1^ delims^=^ eol^= %%F in ('type file_mutiplelines.log') do (
    ...
)
但此处不建议使用子函数,因为调用函数总是一个缓慢的操作。

我建议使用@avery_larry的解决方案,使用
IF..GEQ…
方法FOR
命令使用与其他批处理命令不同的解析器,这导致了这样一个事实,即对于选项中的参数,nor延迟展开都不会展开。
您的
SET
构造无法解决此问题,它将失败,因为可能为空的变量\u for\u loop\L甚至在您第一次设置它之前就会展开

只有百分比扩展起作用,因为这是在FOR解析器激活之前计算的

在你的情况下,你需要

for /f %%L in ('call set /a "_some_count_varible_-=1"') do (
    call :subfunc %%L
)
exit /b

:subfunc
for /f tokens^=*^ skip^=%1^ delims^=^ eol^= %%F in ('type file_mutiplelines.log') do (
    ...
)
但此处不建议使用子函数,因为调用函数总是一个缓慢的操作。
我推荐@av的解决方案