Powershell或Batch可使用用户输入参数执行命令,并将其保存在文本文件中以备将来使用默认值

Powershell或Batch可使用用户输入参数执行命令,并将其保存在文本文件中以备将来使用默认值,powershell,batch-file,Powershell,Batch File,我有一个程序,我想用这样的行执行: gams.exe program.gms user-defined-variable1 user-defined-variable2 .......... 目前,我使用一个批处理文件,提示用户输入用户定义变量的输入字符串,例如: 代码: set /P scen_num="(What scenario number would you like to simulate?) " 输出: (您希望模拟什么场景编号?) 用户类型:1 我经常使用这个批处理文

我有一个程序,我想用这样的行执行:

gams.exe program.gms user-defined-variable1 user-defined-variable2 ..........
目前,我使用一个批处理文件,提示用户输入用户定义变量的输入字符串,例如:

  • 代码:

    set /P scen_num="(What scenario number would you like to simulate?) "
    
  • 输出:

    (您希望模拟什么场景编号?)

  • 用户类型:
    1
我经常使用这个批处理文件,并且有多个参数。我希望将最新的参数写入文本文件,以便下次运行批处理(或Powershell)文件时,提示中将显示以前使用的设置:

(您希望模拟什么场景编号?)1

因此,如果我想执行与上次完全相同的操作,我可以输入垃圾邮件

理想情况下,我希望能够批量完成这项工作,但如果批量无法完成这项工作,则Powershell是可以接受的

  • 如何输出/读取文本文件
  • 在键入任何内容之前,如何使提示已经包含指定的值

  • 另一个解决方案是进行配置批处理,以保存变量并调用set。您可以在设置完所有变量后添加类似的内容

    Program.bat
    
    :[ First variable acts to wipe file with single `>` ]
    echo set var1=%var1% > config.bat
    echo set var2=%var2% >> config.bat
    echo set var3=%var3% >> config.bat
    :[ etc ]
    
    这将创建一个如下所示的批:

    config.bat
    
    :[ setting variables to random data for examples sake.
    set var1=Hello
    set var2=I am
    set var3=text.
    
    您可以添加该选项以手动设置变量,也可以仅设置变量

    call config.bat
    
    如果您希望有多个默认设置,您可以通过将Program.bat调整为类似以下内容,将其作为单独的批处理脚本添加:

    Program2.bat
    
    echo set var1=%var1% > %name%.bat
    echo set var2=%var2% >> %name%.bat
    echo set var3=%var3% >> %name%.bat
    
    :[ Have the variables saved in config.bat set to retrievable variables ]
    call config.bat
    set 1=%var1%
    set 2=%var2%
    set 3=%var3%
    
    :[ Set the variables, if `enter` pressed set to retrievable variable ]
    
    echo Enter var1
    set /p var1=
     if not defined var1 (
       set var1=%1%
    )
    
    echo Enter var2
    set /p var2=
     if not defined var2 (
       set var2=%2%
    )
    
    echo Enter var3
    set /p var3=
     if not defined var3 (
       set var3=%3%
    )
    
    如果您选择将设置保存到批处理中,则将%name%设置为您想要的任何值,然后只需替换即可

    call config.bat
    :[ with ]
    call %name%.bat
    
    您确实提到了只需轻触enter键即可设置要设置默认值的变量,这可以通过以下方式完成:

    Program2.bat
    
    echo set var1=%var1% > %name%.bat
    echo set var2=%var2% >> %name%.bat
    echo set var3=%var3% >> %name%.bat
    
    :[ Have the variables saved in config.bat set to retrievable variables ]
    call config.bat
    set 1=%var1%
    set 2=%var2%
    set 3=%var3%
    
    :[ Set the variables, if `enter` pressed set to retrievable variable ]
    
    echo Enter var1
    set /p var1=
     if not defined var1 (
       set var1=%1%
    )
    
    echo Enter var2
    set /p var2=
     if not defined var2 (
       set var2=%2%
    )
    
    echo Enter var3
    set /p var3=
     if not defined var3 (
       set var3=%3%
    )
    

    我们可以将其作为(1)或(2)的副本关闭吗?您可能也感兴趣。什么是
    set 1=var1
    ,这个答案如何比我评论中列出的可能的副本更好?除非您的答案比现有答案更好,否则对于未搜索现有解决方案的用户的问题,无需提供重复答案。谢谢。这对我很有用。我确实搜索了现有的解决方案,但没有搜索到它们的组成部分。例如,如果用户未定义值,我没有想到将配置文件中的现有变量回显给用户,并将其与默认值组合。使用
    Set 1=%var1
    抵消
    Set/p var1
    ,使变量不会标记为空,也不会同时设置所有变量。我不确定他想要设置的条件,所以我的回答的目的是提供一种简单快速的方法,在没有定义的情况下将变量设置为默认值。我修正并在变量周围添加了
    %