2017-08-25 53 views
1

我正在寻找智能化我的批处理文件,以便在用户决定切换时不在菜单中包含当前数据库 - 看起来有点愚蠢,以至于选择了您已使用的东西。基于文本文件作为标识符的建立菜单

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

这一切都和我想要的完全一样,只是让它在顾客看起来更聪明一点。

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

我所追求的是(希望)一些调整,将显示用户他们正在使用什么配置,如果他们决定切换'不'看到当前作为选择。

现在会发生什么&其优良的,但它是笨重的,这将他们使用

什么数据库您使用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 
编辑为清楚起见

软件程序使用一组文件夹&在一个位置下的配置文件中:\ programdata \公司\工作目录。在workingdir中有3个或4个子文件夹&一个cfg文件。它们包含软件的相关信息,以便使用哪个数据库。

我有谁愿意访问其它数据库客户端,它很容易通过用不同的文件夹设置和配置文件(所有同名等)与不同的数据库信息等

要通过编写工作目录中的内容进行促进切换我的脚本使用工作目录中的文本文件来识别不同的数据库通常是其他手术essex_surgery,newcastle_surgery,以便当用户启动脚本时,它会告诉他们从工作目录中您使用的数据库仅来自文本文件被调用。他们可以继续或切换。当他们切换时,当前工作目录被备份到一个单独的文件夹,如果需要切换回来的话,它可以被重新调用。它只是将robocopy镜像电流转换为指定的文件夹,并用选定的文件夹集进行写入。

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

回答

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%" 
+0

问题是当前会改变取决于该文件夹设置的最后使用的所有的时间。 – Tika9o9

+0

?你的代码似乎已经掌握了这一点。 – Stephan

+0

如果用户决定切换当前设置仍然作为选择时,我不希望他们看到,我不希望他们有一个他们已经使用的东西的选择,没有任何意义。我正在考虑将所有选项作为变量,并使当前的选项不作为选项显示如何? – Tika9o9

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 
+0

谢谢,我试过了,似乎错过了选项来提出其他选择。 – Tika9o9

+0

还有什么其他选择?你能编辑你的问题并添加它们吗? – Hackoo

+0

他们在那里,选项2和3如果需要切换而不是继续 – Tika9o9

相关问题