1

所以我有这个批处理文件来备份一些程序并在需要时恢复它们。每次备份这些程序时,我都会自动创建具有当前日期的文件夹。到目前为止,我已经设置好了,因此您可以输入一个变量作为备份的当前文件夹日期之一,如果输入正确,它将显示“ 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)
4

2 回答 2

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/Pjustenter会使变量保持不变,而不是清除它。
  • 检测无输入;再次响应并提示
  • 匹配从 到 输入的字符串的任何行list.txt- 完全匹配/b开始/e和结束/i,但不区分大小写。
    • 如果需要,可以再次通过管道FIND匹配日期类型行。
  • 如果输入的数据在文件中没有找到,报告并再次提示
  • 在消息中添加了恢复条目CMS Restored
于 2013-08-07T16:51:44.817 回答
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
于 2013-08-07T14:29:30.513 回答