批处理文件变量

时间:2013-08-07 14:05:48

标签: variables batch-file

所以我有这个批处理文件来备份一些程序,并在需要时还原它们。每次备份这些程序时,我都可以自动创建具有当前日期的文件夹。到目前为止,我已将其设置为您可以输入变量作为备份的当前文件夹日期之一,当输入正确时,它将显示“ CMS恢复已完成!!! ”但是,如果没有输入或输入错误的日期它仍将显示“ CMS恢复已完成!!!

我将能够使用txt文件中的日期来验证此变量,因此只有txt文件中显示的日期才允许运行批处理文件的其余部分。我希望它能够告诉我txt文件中没有显示的无效日期将不允许批处理文件继续运行。

非常感谢任何帮助。 感谢

下面的批量文件

$:CMS
@ECHO OFF
cd\1\mybackup\
CLS
ECHO.
ECHO        CURRENT BACKUP DATES ON DISK
ECHO.
type list.txt
ECHO.
ECHO Input date to restore CMS and press Enter.
ECHO i.e. YYYY-MM-DD
SET /p VARIABLE=
xcopy /e /y c:\1\mybackup\%VARIABLE%\CMS c:\CMS
CLS
ECHO CMS Restored ! ! !
PAUSE
GOTO 2

下面的文本文件中的变量

2013-08-05
2013-08-06
2013-08-07
New Folder
New Folder (2)
New Folder (3)
New Folder (4)
New Folder (5)

2 个答案:

答案 0 :(得分:1)

@ECHO OFF
cd\1\mybackup\
CLS
:again
ECHO.
ECHO        CURRENT BACKUP DATES ON DISK
ECHO.
type list.txt | find "-"
ECHO.
ECHO Input date to restore CMS and press Enter.
ECHO i.e. YYYY-MM-DD
SET "VARIABLE="
SET /p VARIABLE=
if not defined variable echo Nothing entered?&goto again
type list.txt|findstr /i /b /e "%variable%" >nul
if errorlevel 1 echo Invalid date entered&goto again
xcopy /e /y c:\1\mybackup\%VARIABLE%\CMS c:\CMS
CLS
ECHO CMS Restored to %variable% ! ! !
...

注意:

  • 添加标签:again以重复提问
  • 通过FIND管道LIST.TXT只显示包含“ - ”的行(即日期)
  • 将变量设置为NOTHING为SET/P,只需输入将保留变量 不清楚,不清楚。
  • 检测没有输入;再次回复并提示
  • 匹配从list.txt到输入字符串的所有行 - 完整匹配/b开始/e并结束/i但不区分大小写。
    • 如果需要,可以再次通过FIND以匹配日期类型行。
  • 如果在文件中找不到输入的数据,则报告并再次提示
  • CMS Restored消息中添加了还原条目。

答案 1 :(得分:0)

尝试这样的事情来捕捉没有输入的日期。我编辑了添加代码以捕获无效日期(未经测试)。当然,它将在2100年失败,你需要决定是否需要更多自由裁量权。校正!

@ECHO OFF
cd\1\mybackup\
:Retry
CLS
ECHO.
ECHO        CURRENT BACKUP DATES ON DISK
ECHO.
type list.txt
ECHO.
ECHO Input date to restore CMS and press Enter.
ECHO i.e. YYYY-MM-DD
SET /p VARIABLE=
IF "%VARIABLE%"=="" ECHO.Please enter a date & PAUSE & GOTO :Retry
FOR /D %%A if (20??-*) DO IF EXIST "%%A" GOTO :DoCopy
ECHO.Please enter a valid date & PAUSE & GOTO :Retry

:DoCopy
xcopy /e /y c:\1\mybackup\%VARIABLE%\CMS c:\CMS
CLS
ECHO CMS Restored ! ! !
PAUSE
GOTO 2