批处理文件无法正常工作,除非我正在观看

我已经寻找了解决方案,但这很奇怪,我无法准确找出问题所在。批处理文件无法正常工作,除非我正在观看

我有一个批处理文件,看起来很简单。在有两个文件的目录中,它应该删除一个,复制另一个文件,然后将其重命名为刚刚删除的文件被命名的内容。除了重命名之外,一切都似乎正常工作。它几乎看起来脚本运行两次,但我找不到任何这方面的实际证据。请看下面:

SET filepath="\\server-name\directory with a space\" 

SET oldFile=filename.csv

SET curFile=filename_*.csv

REM ===Delete current filename.csv===

IF EXIST %filepath%%oldFile% DEL %filepath%%oldFile%

REM ===Copy all versions of .csv files that begin with filename_ to the Archive folder===

IF EXIST %filepath%%curFile% COPY /y %filepath%%curFile% %filepath%%Archive

REM ===Rename the .csv file beginning with filename_ to filename.csv===

IF EXIST %filepath%%curFile% RENAME %filepath%%curFile% %oldFile%

如果我手动运行这个,它似乎工作正常。但是,当我让它从计划任务调用时,它似乎运行两次...也就是删除filename.csv,将文件名_ *。csv复制到正确的位置,但似乎删除了第二个文件而不是重命名它。

正如我所说,我真的不清楚正在做什么。我试着将结果记录在输出文件中,但内部没有任何帮助。

任何人都可以看到我失踪的任何东西吗?

在此先感谢。

回答:

我终于找到了解决方案。原来在旧的服务器上运行了一个任务的副本,这是我们的新环境从中迁移而来的。它与新服务器上的服务器运行的时间完全相同,这就是为什么在任务设置为运行之前或之后尝试运行它的任何方式都能够完美运行。禁用旧版本的任务解决了该问题。

非常感谢那些对我的命令提供反馈和建议的人!

回答:

检查

IF EXIST %filepath%%curFile% COPY /y %filepath%%curFile% %filepath%%Archive 

注意archive似乎有领先% - 那是不是意味着是一个目录“存档”或archive集的东西你不向我们展示,因此它应该是...%filepath%%Archive%

的后果(?缺少/杂散%)是该文件将被复制到一个名为archive文件或命名archive如果该目录已经存在的目录。

就个人而言,我会使用

SET "filepath=\\server-name\directory with a space" 

其中引号分隔该字符串被分配(因此没有杂散尾随空格被分配给变量),然后构造使用“%VAR1源/目的地名%\%var2%“,它确保不会出现双重",并且该目录很明显(但这是风格问题)。

回答:

这是引用路径的最佳做法。在这种情况下,涉及空间的地方,这是一个要求。从变量定义中省略引用并在使用变量时在需要时提供它们更容易。

SET filepath=\\server-name\sharename\directory with a space\ 

IF EXIST "%filepath%%oldFile%" DEL "%filepath%%oldFile%"

以我的经验,最好是离开目录中的路径没有尾部的反斜杠结束。另外,UNC路径应该有一个共享名。

SET "filepath=\\server-name\sharename\directory with a space" 

IF EXIST "%filepath%\%oldFile%" (DEL "%filepath%\%oldFile%")

以上是 批处理文件无法正常工作,除非我正在观看 的全部内容, 来源链接: utcz.com/qa/267121.html

回到顶部