【问题标题】:Overwriting file of the same name from a trimmed file从修剪后的文件中覆盖同名文件
【发布时间】:2019-03-31 08:38:58
【问题描述】:

到目前为止,我已经让我的代码为我工作。对文件进行修剪和重命名后,如果存在同名文件,则不会覆盖该文件。

这个批处理文件运行了多次,所以第一次运行,第二次它不能覆盖之前创建的文件,因为新修剪的文件名与之前创建的文件名相同。

由于这个文件名不是固定的,我不确定如何在运行命令之前删除它,因为该文件夹中会有其他具有相同扩展名(或缺少扩展名)的文件。

xcopy /d "%SystemDrive%\clfiles\*xp21.tap" 
"\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD
\MS200\*xp21*" /y

set Source="\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD\MS200"
for %%c in (%Source%\*xp21*) do (
    set MS200Trimmed=%%~nc
    set MS200Trimmed=!MS200Trimmed:~0,8!%
    ren "%%~c" !MS200Trimmed!
)

【问题讨论】:

  • 请改用move 命令。但是我并没有关注您如何认为在重命名命令之前无法删除它。如果重命名不起作用,您已经知道文件名是什么。只需在重命名命令之前发出删除命令:del !MS200Trimmed!。我假设您已启用延迟扩展。
  • 我之前尝试过移动命令,但没有成功,但可能我的格式不正确。我尝试在 (%Source%*xp21*) 中为 %%c 做 ( set MS200Trimmed=%%~nc set MS200Trimmed=!MS200Trimmed:~0,8!% move "%%~c" !MS200Trimmed!) 我不是确定如何在这些论坛上正确格式化,就像我最初的帖子一样......
  • SET 命令中有一个尾随百分比符号。
  • 是的,我确实延迟了扩展,也许我会发布我的整个代码,因为它可能会使它更容易。无论如何,我已经尝试过 del !MS200Trimmed!以前没有运气,我不确定我在这里缺少什么..
  • 您还应该引用任何文件名或路径。您没有引用 !MS200Trimmed! 变量。如果您应该向我们提供一个失败的文件名的真实示例,它也会对我们有所帮助。

标签: batch-file rename overwrite


【解决方案1】:

就在 "ren "%%~c" !MS200Trimmed!" 之前行,添加删除命令。

xcopy /d "%SystemDrive%\clfiles\*xp21.tap" 
"\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD
\MS200\*xp21*" /y

set Source="\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD\MS200"
for %%c in (%Source%\*xp21*) do (
    set MS200Trimmed=%%~nc
    set MS200Trimmed=!MS200Trimmed:~0,8!%
    del !MS200Trimmed! 
    ren "%%~c" !MS200Trimmed!
)

【讨论】:

  • 当我使用 del !MS200Trimmed!它给了我“存在重复的文件名,或者找不到文件”
  • 好的,真实世界的文件名。文件名以“C:\clfiles”中的“testms20_80791025_mfg_xp21.tap”开头,保留前 8 个字符并删除文件扩展名。这在 \\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD\MS200 目录中输出为“testms20”。当我使用 del !MS200!如您所示格式化,它输出 testms20_80791025_mfg_xp21.tap
  • 当我去使用del !MS200Trimmed!它会在我运行批处理的文件夹中查找要删除的文件,这就是它不工作的原因,我不确定它为什么这样做..
  • 尝试将其更改为“del %source%\!MS200Trimmed!”,以获得正确的路径。
【解决方案2】:

对我有用的是“del %Source%!ProbeMacro!”就在仁之前。我也想我终于找到了在这里发布的格式,让我的信息更容易理解:~)

    xcopy /d "%SystemDrive%\clfiles\*xp18.tap" 
    "\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD

    \MS_PROBE_MACROS" /y

    ren \\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD\MS_PROBE_MACROS\*xp18.tap "M*.tap"


    set Source="\\nphdata\Departments\M.E\N1040_MACHINING\OFFICE\PROGRAM_HOLD\MS_PROBE_MACROS"
    for %%e in (%Source%\M*.tap) do (
        set ProbeMacro=%%~ne
        set ProbeMacro=!ProbeMacro:~0,8!%
        del %Source%\!ProbeMacro!
    ren "%%~e" "!ProbeMacro!"
    )

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 2013-04-10
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多