【问题标题】:Why is my bat script deleting itself when I run it为什么我的 bat 脚本在运行时会自行删除
【发布时间】:2016-06-21 17:50:01
【问题描述】:

我做了一个bat脚本如下

cd "D:\ACT\ACTBKUP"
del /Q *.* 

FORFILES /P E:\ACT_Backups /M *.zip /D +1 /C "cmd /c del @D:\ACT\ACTBKUP"

该脚本应该删除“D:\ACT\ACTBKUP”中的所有内容,然后将最新的 zip 文件夹从 E:\ACT_Backups 移动到同一文件夹。当我从 windows server 2012 运行这个脚本时,它就消失了。

谢谢

【问题讨论】:

  • 脚本在哪里?
  • 脚本位于桌面
  • 而且 Windows 安装在 C:\ 驱动器上,对吧?
  • 是的,脚本在c盘。
  • “不起作用”并没有告诉我任何事情。它实际上在做什么?

标签: batch-file windows-server-2012-r2


【解决方案1】:

要切换到位于不同驱动器上的目录,您需要使用cd /d 而不仅仅是cd。如果不这样做,目录将不会改变。

当您通过双击运行脚本时,batch 将当前目录视为脚本当前所在的目录。由于您没有将/d 选项与cd 一起使用,因此您在脚本所在的目录上运行del /Q *.*

要解决此问题,您有两种选择:

cd /d "D:\ACT\ACTBKUP"
del /Q *.*

del /Q "D:\ACT\ACTBKUP"


forfiles 中没有选项只能获取最新文件; /D +1 将返回最后修改日期为今天或更晚的所有文件。为了获得最新的文件而不是别的,你需要一个for /f 循环:
rem /b returns just the file name and /o:d sorts the files by date
rem Since newest_file gets set for each .zip file in the directory,
rem the last file set will be the newest
for /f "delims=" %%A in ('dir /b /o:d E:\ACT_Backups\*.zip') do set newest_file=%%A
copy %newest_file% D:\ACT\ACTBKUP

【讨论】:

  • 好的,这是我的最新版本。 del /Q D:\ACT\ACTBKUP FORFILES /P "E:\ACT_Backups" /M *.zip /D +1 /C "cmd copy @files D:\ACT\ACTBKUP" 但 forfiles 命令没有处理文件。我做错了什么?
  • 阅读 forfiles 帮助输出。没有@files。
  • @DennisHertzler - 另外,如果您只想要最新的文件,您需要将您的代码调整为我显示的内容。
  • @DennisHertzler,除了cmd 后面缺少的/C 选项和错误的变量名@files 而不是@file 命令行中的@file,我很确定这也是因为/D +1 选项;认为+1 表示在今天的日期(天)+ 1 或以后修改的项目=明天或以后修改的项目,所以它没有任何意义(除非你有时间机器;这是一个forfiles) 的愚蠢设计缺陷;我猜你想参考昨天或以后修改的项目,对吧?要实现这一点,请参阅this post of mine...
  • 我建议使用@path 而不是@file,因为您要在两个单独的驱动器之间复制文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2021-04-22
  • 2020-04-02
  • 1970-01-01
相关资源
最近更新 更多