【问题标题】:Undo changes on batch file termination在批处理文件终止时撤消更改
【发布时间】:2014-08-01 22:19:06
【问题描述】:

如果批处理文件被用户终止,我是否可以撤消批处理文件所做的所有更改?例如,如果我要附加文本文件并添加文本、重命名文件、通过运行批处理文件来删除文件......如果用户终止批处理文件,有没有办法在它被终止之前撤消所有更改用户?或者无论如何我不能让用户在运行时终止批处理文件?

谢谢

【问题讨论】:

  • 没有。批处理文件没有“回滚”或“撤消”,也没有办法阻止批处理文件被终止。
  • @KenWhite:有一种解决方法:沙箱。问题是:不知道有没有可以批量控制的。这样做是:在沙箱中运行批处理,完成后,将更改导出到系统。当意外终止时,沙盒中的所有更改都将丢失。
  • @Stephan:这不会在批处理文件中撤消;它在应用之前在沙箱中运行您的更改,这是一项不同的任务。批处理文件中没有“撤消”;可能有其他解决方案,但这不是问题。 (根据help center 指南,问这个问题将是一个通用的“工具推荐”问题,很可能是题外话。)
  • @KenWhite 因此是“一种解决方法”。效果将是他想要的,也许“沙盒想法”让他对自己的问题有了另一种看法。我认为大多数用户都不知道沙箱甚至存在,至少“沙箱”是他可以用谷歌搜索的东西。而且我不是推荐软件,而是提示另一个概念,这可能会有所帮助,因为(正如您已经说过的)没有“批量解决方案”可能。
  • 您可以在批处理文件的开头备份文件,只有在批处理文件完成后才删除它们,方法是将删除过程放在批处理文件的底部。

标签: windows batch-file cmd undo


【解决方案1】:

很大程度上取决于您的用户的成熟程度以及他们可以访问哪些设施。

例如,您可以创建一个由用户批处理执行的不可见批处理。关于如何执行此操作的许多示例。

或者您可以在批处理中创建新文件,然后将现有文件替换为新文件(或者甚至使用全新文件集创建替换目录)作为批处理中的最后一个操作。

【讨论】:

  • 感谢大家的回复。我想用户会很老练,技术知识很好,但我只是想让它变得万无一失。再次感谢
【解决方案2】:

您可以避免普通用户通过这种方式使用Ctrl-C取消批处理文件:

@echo off
setlocal

if "%~1" equ "NonCancelable" goto NonCancelable
echo Original!
start "" /B "%~F0" NonCancelable
echo Terminating original...
exit

:NonCancelable
echo I am non cancelable!
echo/
set "var="
set /P "var=Try to cancel me! (enter Exit to end): "
if /I "%var%" neq "exit" goto :NonCancelable
echo Terminating non cancelable...

当然,用户可以点击窗口红叉关闭窗口...

【讨论】:

  • 谢谢大家的回复
猜你喜欢
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 2010-10-28
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 2010-10-18
相关资源
最近更新 更多