我希望智能化我的批处理文件,当用户决定切换时,不要在菜单中包含当前数据库 - 看起来有点傻,选择你已经在使用的东西。
该脚本扫描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镜像到当前命名文件夹,然后用选定的文件夹集写入。
我的牛肉是,当你切换时,当前数据库是切换到的选择,它看起来很傻,为什么选择你已经在使用的东西。
答案 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