【问题标题】:Update a batch file from another batch file从另一个批处理文件更新一个批处理文件
【发布时间】:2012-12-04 15:28:35
【问题描述】:

尊敬的 * 成员,

请帮我处理这个批处理文件。我想使用“SET /P INPUT=%=%”给出的答案并让它永久更新另一个批处理文件。

这是第一个运行以从用户那里获得答案的批处理文件

@echo off
cls
echo.
echo .................................................................
echo ..... Specify what the name of the Store is, this will send .....
echo ............... alerts to abd@abc.co.za ..............
echo ................................................................. 
echo.
pause
:option
cls
color 5E
echo. 
echo "............   Press 1 to specify what the store name is......"
echo "............   Press 2 to exit the program   ................."
echo. 
SET /P M=Type from the menu above 1 or 2 then press ENTER:
IF %M%==1 GOTO SEND                                           
IF %M%==2 GOTO EOF  

:SEND
cls
color 0A
set INPUT=
set /P INPUT=Enter Store Name: %=%                            
if "%INPUT%"=="" goto input
echo "You said that the store name is: %INPUT%"

:: Have the user confirm his/her choice
SET /P ANSWER=Is the name correct (Y/N)?     
echo You chose: %ANSWER%                                      
if /i {%ANSWER%}=={y} (goto :yes)                             
if /i {%ANSWER%}=={yes} (goto :yes)                           
goto :no
:yes
echo You pressed YES!... The name is updating     
goto name
:no
echo You pressed NO!... The program will exit
pause
cls
goto eof
:name
::set /A store=%INPUT%
echo %INPUT% >> notify_support.bat
::Terminate the program
:EOF

如您所见,我正在努力指定应该“回显 %INPUT% >> notify_support.bat”的位置。这是取自第二个批处理文件的代码

@echo off
call senditquiet -s smtp.gmail.com -port 587 -u rsupp0rt@gmail.com -protocol ssl -p access -f rsupp0rt@gmail.com -t 888@gmail.com -subject "Store ABC" -body "Hello there, There is an issue logged at the store.<br>Best regards." 

当第一个批处理文件运行时,它会更新第二个批处理文件,但只是将其转储到文件末尾。

我需要 INPUT ECHO 来替换第二个批处理文件中的“Store ABC”。

请帮忙,我对批处理文件比较生疏。

【问题讨论】:

    标签: batch-file batch-processing


    【解决方案1】:
    echo %INPUT% >> notify_support.bat
    

    该行包含&gt;&gt;,表示“在文件末尾转储”。您可以使用单个&gt; 覆盖现有文件内容。这样,您可以重新生成整个文件(反正只有 2 行)。

    另一种解决方案是实际解析现有文件并替换该文本。您可以使用for /F ... 来做到这一点,它允许您遍历文件的行。然后,您可以根据现有文件的(更改的)内容生成一个新文件。缺点是这种文件解析方法特别适用于每行具有相同格式的字段和分隔符的数据文件(如 CSV 文件)。它不太适合解析批处理文件或程序源文件等“复杂”文件。

    【讨论】:

    • 嗨@GolezTrol,我应该让第二个批处理文件为空并让第一个批处理文件解析它。好像第一个文件正在为我写第二个文件,使用 > 解决方案?
    • 如果您选择实际解析批处理文件,则必须生成第二个文件,该文件随后会被重命名,否则您将覆盖当时正在阅读的文件。 (不确定,顺便说一句。也许当您运行for /F 时会立即读取该文件。)无论如何,它更难实现,依赖于第二个文件的存在 并且 依赖于存在Store ABC 标记,这意味着您不能重复该过程。
    • 所以我建议根本不解析它。你可以直接覆盖它。但为了做到这一点,第一个批处理文件必须确切地知道第二个文件中的内容。这样做的好处是实现起来要容易得多,甚至可以第一次生成第二个文件;它不必存在。第一个文件需要包含第二个批处理文件的“模板”可能是一个缺点,但由您决定是否可以接受。
    • 嗨@GolezTrol,我使用了echo >,只是让它替换了那里的所有内容。我今天做了更多关于使用 for /F 的阅读,它有局限性。如果有人有一个例子说明如何使用 for /F 会很有趣,我会尝试自己,如果成功,我会在这里发布。谢谢大家的帮助