基于文本文件作为标识符构建菜单

时间:2017-08-25 15:25:13

标签: batch-file cmd menu

我希望智能化我的批处理文件,当用户决定切换时,不要在菜单中包含当前数据库 - 看起来有点傻,选择你已经在使用的东西。

该脚本扫描workingdir路径中的文本文件,并将其用作软件不同配置的标识符。它取代了软件的标准快捷方式,因此客户可以选择他们想要连接的位置 - 或继续使用当前的'组态。

这一切都完全符合我的要求,只是让它在顾客看来更聪明一点。

在用于访问其他数据库的软件中,您只需使用另一个workingdir的内容覆盖workingdir内容,但使用configs指向其他位置。切换时,当前设置被备份到自己名称的特殊目录,然后另一个被复制出自己的目录并覆盖当前工作目录。

我所追求的是(希望)一些调整,这些调整将向用户显示他们正在使用的配置以及他们是否决定切换' NOT'看当前的一个作为选择。

现在发生了什么&它很好,但它很笨重,它会告诉他们他们正在使用什么数据库

您正在使用Essex_Medical数据库 继续(1)或开关(2)

如果他们切换,他们可以选择其他选项但仍然可以选择当前的那个,我认为对客户看起来很草率。

切换到Essex_Medical数据库1 切换到纽卡斯尔医疗2 继续(1)(2)

我去了,但我的大脑模糊了。我想我需要扫描通过可用的文本文件来识别选项,从变量设置输入菜单,并且从输入开关选项中省略当前使用的一个,我希望这有意义吗?这是代码......

@echo off
color 8b
mode con: cols=80 lines=30
title Multi Database Switcher

rem setting working dir variable
set progdata=C:\ProgramData\Company\WorkingDir

cd %progdata%

for /r %%a in (*.txt) do (
rem spdir 'special directory to hold client specific config file & 
rem folders'
set spdir=C:\ProgramData\Company\%%~na
set current=%%~na
)

:menu
CLS
echo.
echo                    --------------------------------------------------
echo                    [1] -- Continue Using %current%'s DataBase
echo                    --------------------------------------------------
echo.
SET /P "Input=Continue(1)/Switch to Another Database(2):"
if '%Input%'=='1' goto continue
if '%Input%'=='2' goto menu2
goto :menu
:menu2
CLS
echo.
echo                    --------------------------------------------------
echo                    [2] -- Switch to the 'Essex_Medical' Database
echo                    [3] -- Switch to the 'Newcastle_Surgery' Database
echo                    --------------------------------------------------
ECHO.
echo Choose a number...
echo.
SET /P "Input=(2)/(3):"
if '%Input%'=='2' goto Essex_Medical
if '%Input%'=='3' goto Newcastle_Surgery
goto :menu2

:continue
start "" "C:\Temp\Shortcut.lnk" & exit

:Essex_Medical
robocopy %progdata% %spdir% /MIR >nul 2>&1 & robocopy C:\ProgramData\Company\Essex_Medical %progdata% /MIR >nul 2>&1
start "" "C:\Temp\Shortcut.lnk" & exit

:Newcastle_Surgery
robocopy %progdata% %spdir% /MIR >nul 2>&1 & robocopy C:\ProgramData\Company\Newcastle_Surgery %progdata% /MIR >nul 2>&1
start "" "C:\Temp\Shortcut.lnk" & exit
编辑清楚

软件程序使用一组文件夹&一个位置的配置文件c:\ programdata \ company \ workingdir。在workingdir有3或4个子文件夹&一个cfg文件。它们包含有关要使用的数据库的软件信息。

我有一个想要访问其他数据库的客户端,通过使用不同的文件夹集和配置文件(所有相同名称等)编写workingdir的内容,可以轻松完成,具有不同的数据库详细信息等。

为了方便切换,我的脚本使用workdir中的文本文件来识别不同的数据库,通常是其他外科手术essex_surgery,newcastle_surgery,这样当用户激活脚本时,它会告诉他们来自workingdir你正在使用的数据库是什么从文本文件的调用。他们可以继续或切换。当他们切换时,当前工作目录被备份到一个单独的文件夹,如果需要切换回来,可以调用。它只是将robocopy镜像到当前命名文件夹,然后用选定的文件夹集写入。

我的牛肉是,当你切换时,当前数据库是切换到的选择,它看起来很傻,为什么选择你已经在使用的东西。

2 个答案:

答案 0 :(得分:0)

类似的东西:

set "current=Newcastle_Surgery"
(
  echo.
  echo                    --------------------------------------------------
  echo                    [2] -- Switch to the 'Essex_Medical' Database
  echo                    [3] -- Switch to the 'Newcastle_Surgery' Database
  echo                    --------------------------------------------------
  echo.
)|find /v "%current%"

答案 1 :(得分:0)

也许如果我们填充这样的数组:

@echo off
color 8b
mode con: cols=80 lines=30
title Multi Database Switcher

rem setting working dir variable
set "progdata=C:\ProgramData\Company\WorkingDir"

cd "%progdata%"
setlocal enableDelayedExpansion
for /r %%a in (*.txt) do (
rem spdir 'special directory to hold client specific config file & 
rem folders'
rem Populate the array with existent files
set /a idx+=1
set "spdir[!idx!]=C:\ProgramData\Company\%%~na"
set "current[!idx!]=%%~na"
)

:menu
CLS
rem Display array elements 
echo                    --------------------------------------------------
for /L %%i in (1,1,%idx%) do (
    set "msg=[%%i] - !current[%%i]!"
echo.
echo                       !msg!
echo.
echo                    --------------------------------------------------
)

echo(
echo  Please choose a number to continue ...
set /p "Input="
For /L %%i in (1,1,%idx%) Do (
    If "%INPUT%" EQU "%%i" (
        echo robocopy "%progdata%" "!spdir[%%i]!" /MIR 
        rem >nul 2>&1 & 
        echo robocopy "!spdir[%%i]!" "%progdata%" /MIR
rem     )>nul 2>&1
        echo start "" "C:\Temp\Shortcut.lnk" & pause 
        rem & exit
    )
)  
goto :menu