Re huaqingyuan:
关于问题A,因为不了解你的具体需求,所以只写了一个空泛的框架,如果要符合你的要求,应该需要修改某些细节。
关于问题B,我的代码提供的是将命令输出结果保存为环境变量的通用办法,当然存在其他的解决方法,只不过这种更简单一些;至于eval.exe的细节我不是很清楚。
以下附录二者源代码,完整内容请下载文件
打开附件(第一次使用文件上传功能,如果出错请见谅)
::OP.BAT
@ECHO OFF
SET TABLE=sample.dat
IF == GOTO OPHELP
IF NOT EXIST %TABLE% GOTO OPERROR1
:OPMAIN
FIND " %1 " %TEMP%\RECORD.BAT
IF NOT ERRORLEVEL 1 GOTO OPLIST
IF NOT ERRORLEVEL 2 GOTO OPAPPEND
GOTO OPERROR2
:OPLIST
ECHO Record "%1" matched.
ECHO.
ECHO >%1.BAT @ECHO OFF
ECHO >>%1.BAT ECHO 姓名: %1
ECHO >>%1.BAT ECHO 姓别: %%1
ECHO >>%1.BAT ECHO 年龄: %%2
ECHO >>%1.BAT ECHO 爱好: %%3 %%4 %%5 %%6 %%7 %%8 %%9
CALL %TEMP%\RECORD.BAT
ECHO.
ECHO Record "%1" displayed.
DEL %TEMP%\RECORD.BAT
DEL %1.BAT
GOTO OPEND
:OPAPPEND
ECHO Record "%1" NOT matched!
ECHO.
IF == GOTO OPEND
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9 >> %TABLE%
ECHO.
ECHO Record "%1" appended.
GOTO OPEND
:OPHELP
ECHO.
ECHO Sample of Table Operation.
ECHO Usage: %0 record-key
ECHO or: %0 record-key data1 data2 data3
ECHO.
GOTO OPEND
:OPERROR1
ECHO.
ECHO Data file "%TABLE%" NOT exist!
ECHO.
GOTO OPEND
:OPERROR1
ECHO.
ECHO Failed to match record "%1"!
ECHO.
GOTO OPEND
:OPEND
SET TABLE=
::GETVALUE.BAT
@ECHO OFF
IF NOT == GOTO GVMAIN
:GVHELP
ECHO.
ECHO Get result of command with environment variable.
ECHO Usage: %0 command
ECHO Exaple: %0 CD
ECHO.
GOTO GVEND
:GVMAIN
SET COMMAND=%1 %2 %3 %4 %5 %6 %7 %8 %9
COPY SETENV.DAT %TEMP%\SETENV.BAT > NUL
%COMMAND% >> %TEMP%\SETENV.BAT
CALL %TEMP%\SETENV.BAT
IF == GOTO GVEND
ECHO Value of variable is %#VAR#%.
DEL %TEMP%\SETENV.BAT
SET COMMAND=
SET #VAR#=
:GVEND
Re huaqingyuan:
Regarding question A, because I don't know your specific requirements, I only wrote a general framework. If it needs to meet your requirements, some details should be modified.
Regarding question B, the code I provided is a general way to save the command output result as an environment variable. Of course, there are other solutions, but this one is simpler; as for the details of eval.exe, I'm not very clear.
The following appends the source codes of the two. For the complete content, please download the file
Open the attachment (I'm using the file upload function for the first time, please forgive me if there is an error)
::OP.BAT
@ECHO OFF
SET TABLE=sample.dat
IF == GOTO OPHELP
IF NOT EXIST %TABLE% GOTO OPERROR1
:OPMAIN
FIND " %1 " %TEMP%\RECORD.BAT
IF NOT ERRORLEVEL 1 GOTO OPLIST
IF NOT ERRORLEVEL 2 GOTO OPAPPEND
GOTO OPERROR2
:OPLIST
ECHO Record "%1" matched.
ECHO.
ECHO >%1.BAT @ECHO OFF
ECHO >>%1.BAT ECHO 姓名: %1
ECHO >>%1.BAT ECHO 姓别: %%1
ECHO >>%1.BAT ECHO 年龄: %%2
ECHO >>%1.BAT ECHO 爱好: %%3 %%4 %%5 %%6 %%7 %%8 %%9
CALL %TEMP%\RECORD.BAT
ECHO.
ECHO Record "%1" displayed.
DEL %TEMP%\RECORD.BAT
DEL %1.BAT
GOTO OPEND
:OPAPPEND
ECHO Record "%1" NOT matched!
ECHO.
IF == GOTO OPEND
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9 >> %TABLE%
ECHO.
ECHO Record "%1" appended.
GOTO OPEND
:OPHELP
ECHO.
ECHO Sample of Table Operation.
ECHO Usage: %0 record-key
ECHO or: %0 record-key data1 data2 data3
ECHO.
GOTO OPEND
:OPERROR1
ECHO.
ECHO Data file "%TABLE%" NOT exist!
ECHO.
GOTO OPEND
:OPERROR1
ECHO.
ECHO Failed to match record "%1"!
ECHO.
GOTO OPEND
:OPEND
SET TABLE=
::GETVALUE.BAT
@ECHO OFF
IF NOT == GOTO GVMAIN
:GVHELP
ECHO.
ECHO Get result of command with environment variable.
ECHO Usage: %0 command
ECHO Exaple: %0 CD
ECHO.
GOTO GVEND
:GVMAIN
SET COMMAND=%1 %2 %3 %4 %5 %6 %7 %8 %9
COPY SETENV.DAT %TEMP%\SETENV.BAT > NUL
%COMMAND% >> %TEMP%\SETENV.BAT
CALL %TEMP%\SETENV.BAT
IF == GOTO GVEND
ECHO Value of variable is %#VAR#%.
DEL %TEMP%\SETENV.BAT
SET COMMAND=
SET #VAR#=
:GVEND