批量文件逐行解释说明

时间:2014-02-13 09:09:47

标签: windows batch-file command-line cmd

-WHAT I NEED

如何创建一个解释外部指令(而不是批处理代码)并将它们放在变量中的批处理文件?


-WHAT I GOT

一个名为“Easy-Series”的sourceforge项目(为了更容易揭穿,here是每个依赖项和主文件的下载链接;当你输入外部命令时忽略崩溃,将在以后修复,但如果你可以解决它,请在评论中提及。)


- 我已经解决的问题

set 似乎没有用,因为我认为它只抓取以纯文本格式编码的文件的第一行......我是对的吗?如果没有,那么你可以理论化解决方案...

-EXAMPLES THORPLAIN THATOUGHLY

假设我有一个名为commands.txt的文本文件。我有一些 EXTERNAL 命令由解释器提供 INTERPRETED ,我将编写代码。我只需要“读取每一行并将每一行放在单独的变量中”部分。 ONCE AGAIN ,这些命令是 NOT 批处理命令, 这些是外部命令 我需要由翻译解释;

newfolder test
newfile test.txt
ping google.com

因为我已经告诉过你这个名为easycommandengine的“命令解释器”(旨在更容易使用Windows命令行)解释外部指令,我希望每一行都放在一个单独的变量中

line 1 = ecl_ecmdengine_line%linecount%
line 2 = ecl_ecmdengine_line%linecount%
line 3 = ecl_ecmdengine_line%linecount%
line 4 = ecl_ecmdengine_line%linecount%
and so on and so forth

我的意思是,比如,commands.txt第1行newfolder test保存在变量“ecl_ecmdengine_line1”中...... 1将是%linecount%变量。

如果你仍然不理解(tl; dr?):我在技术上意味着我想要一个批处理文件来读取带有指令的.txt文件,方法与cmd读取批处理文件的方式相同......

我也喜欢使用%linecount%变量的代码(我认为这已经是不言自明的了)工作......我太蠢了,不能制作for命令让我的思绪爆炸了...


-NOTES

如果您想自己在计算机上测试我的代码,HERE再次成为文件...

如果您认为我已经提供太多太少的信息,PM或评论此帖子,我会尽快修复它。

3 个答案:

答案 0 :(得分:0)

测试此 - 最后一个命令将列出变量:

@echo off
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%a in ("commands.txt") do (
set /a c+=1
set "command[!c!]=%%a"
)
set command[

答案 1 :(得分:0)

@echo off

    setlocal enableextensions disabledelayedexpansion

    set "numLines=0"
    for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" "commands.txt"') do (
        set "ecl_ecmdengine_line%%a=%%b"
        set /a "numLines+=1"
    )

    for /l %%a in (1 1 %numLines%) do (
        call echo line %%a is :%%ecl_ecmdengine_line%%a%%
    )

    setlocal enabledelayedexpansion
    for /l %%a in (1 1 %numLines%) do (
        echo line %%a is :!ecl_ecmdengine_line%%a!
    )
    endlocal   

如何从文件中读取行(findstr用于计算行数),以及如何在启用或不启用延迟扩展的情况下访问其内容。

答案 2 :(得分:0)

来自foxidrive和MC ND的先前答案可以解决您当前的问题,即从commands.txt加载到名为ecl_ecmdengine_line的{​​{3}}。但是,之后您需要处理存储在数组中的每一行,即:

@echo off
setlocal EnableDelayedExpansion

rem Load lines from commands.txt into ecl_ecmdengine_line array:
set numLines=0
for /F "delims=" %%a in (commands.txt) do (
   set /A numLines+=1
   set "ecl_ecmdengine_line!numLines!=%%a"
)

rem Process the lines in ecl_ecmdengine_line array:
for /L %%i in (1,1,%numLines%) do echo process line %%i: !ecl_ecmdengine_line%%i!

但是,以前的方法对我来说似乎是一种浪费。您可以从commands.txt文件中读取行并直接处理它们,而无需将它们存储在任何数组中。下面的批处理代码是此方法的一个示例,它还显示了如何处理命令:

@echo off

for /F "tokens=1*" %%a in (commands.txt) do call %%a %%b
goto :EOF

:newfolder
echo Creating newfolder for %*
exit /B

:newfile
echo Creating newfile for %*
exit /B

:ping
echo Executing ping with %*
exit /B