批处理文件随机创建预期文件的不可删除孪生体



我在黑暗中摸索了一下,所以如果我错过了一些基本的东西,请耐心等待。

我们需要在我们的部门实施新的项目管理流程。因此,我创建了一个批处理文件来询问项目的名称,然后复制模板文件结构并将其中的各种文件重命名为提供的名称,然后打开一个word文档。最初的问题是这一切都必须在网络驱动器上完成。理论上相当简单的东西,但是对于我的一位同事来说,它偶尔会做一些非常烦人的事情。它不是创建文件结构的一个副本,而是创建 2。它创建的第二个是无法访问的,也是不可删除的。我无法在自己的笔记本电脑上复制该错误,并且大约每 3 次中就会发生 1 次。我无法弄清楚为什么它会创建第二个文件,或者为什么一旦创建它就无法删除。谁能透露任何光芒?

这是我正在使用的文件的代码:

@echo off
pushd $networkdrivefolderProjects
SET initDir=$networkdrivefolderProjects
SET newDir=
SET /p ver=<"$networkdrivefolderprojectnum.txt"
SET /P newDir=Please enter the title of the new project: %=%
IF DEFINED newDir (
MD "$networkdrivefolderProjects%ver%. %newDir%"
SET initDir="%initDir%%ver%. %newDir%"
)
xcopy "$networkdrivefolderCreative Briefing Template" %initDir% /s/e
ren %initDir%"1. Campaign Initiation""Campaign Initiation Document.docx" "%newDir% Initiation Document.docx"
ren %initDir%"2. Campaign Development""Project Finances.xlsx" "%newDir% Project Finances.xlsx"
ren %initDir%"2. Campaign Development""1. Briefing""Creative Briefing Document.docx" "%newDir% Creative Briefing Document.docx"
ren %initDir%"2. Campaign Development""1. Briefing""Integrated CRM brief.xlsx" "%newDir% CRM Brief.xlsx"
ren %initDIR%"3. Final Assets and Sign Off Document""Sign off sheet.docx" "%newDir% Sign off sheet.docx"
SET /a newVer=%ver%+1
echo %newVer% > "$networkdrivefolderprojectnum.txt"
%initDir%"1. Campaign Initiation""%newDir% Initiation Document.docx"
popd
cls

由于无法在环境之外重现您的问题,因此我建议进行一些更改:

在紧跟在@echo on行之后插入setlocal命令,以便在例程结束时丢弃例程中的任何变量更改。

更改set语法,使其遵循set "var=value"公式。这意味着您没有大量的"字符需要平衡 - 只需在%var%之前和一个在所需字符串的末尾。就个人而言,我还会删除\作为目录名的最后一个字符,并在使用变量时根据需要插入它。

当您设置ver(一个合乎逻辑但不明智的名称,因为ver是一个内置命令(时,您应该立即写出新版本号,以便在用户被中断(电话呼叫、咖啡、被"托管"(时,当前号码被其他用户获取的可能性最小(在当前号码更新之前(。这可能最好由以下人员管理

(for /f %%a in (%filename%) do set whatever=%%a&set /a newnum=%%a+1&call echo %%newnum%%>%filename%)

最后,考虑如果newdir为空或包含非法/意外字符会发生什么情况。

最新更新