-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或评论此帖子,我会尽快修复它。
答案 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