【问题标题】:Rename folder in Windows with Unique ID使用唯一 ID 重命名 Windows 中的文件夹
【发布时间】:2017-12-25 23:50:32
【问题描述】:

我必须重命名目录中的一些图像,但我需要能够给它们一个唯一的编号。

所以文件夹名称如下。

Drawer~Folder~TAB~Field3~Field4~Field5~Field6

现在 Field5 需要是一个唯一的数字,有没有办法可以在命令提示符中完成?

【问题讨论】:

  • 为什么不只是顺序?在每次重命名之间,set /a Field5 += 1 和繁荣!唯一编号。

标签: batch-file cmd batch-processing


【解决方案1】:

这里有一个脚本,你可以修改它来做你想做的事情。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "x=1"
:while1
if %x% LEQ 11 (
    set "FileName=Drawer~Folder~TAB~Field3~Field4~%x%~Field6"
    echo %FileName%
    set /a x+=1
    goto while1
)
endlocal

正如所写,它会生成一个包含 10 个文件名的列表。

【讨论】:

  • 延迟扩展问题。 %x% 将始终为 1,因为它位于括号代码块中。简单的解决方法是将您的if 语句更改为if %x% gtr 10 exit /b。您还可以使用for /L 循环并摆脱您的set /a 语句。
  • @rojo 我运行了确切的代码,它适用于我在 Windows 10 上(但它停止在 9。)它在第 2 行有 enabledelayedexpansion
  • 是的,该脚本确实有ENABLEDELAYEDEXPANSION,但引用!x! 时并未使用它。此外,SET 命令中的 x 和 = 之间没有空格。它还需要使用!x! + 1
  • @Marichyasana 你对%x% 的扩展是正确的。我刚刚意识到goto 打破了括号并强制重新评估而不会延迟扩展。对于那个很抱歉。在另一件事上,如果您不使用 enabledelayedexpansion 标志,则应该去掉它。如果%filename% 包含任何感叹号,如果启用延迟扩展,它们将被破坏。引用"varname=value"set "filename=etc." 也是一个好主意。这避免了 %filename% 中的 & 和其他特殊字符的问题,而不在值中包含引号。
  • @lit set /a 不需要注意空格,也不需要在按名称引用变量时延迟扩展。您可以在循环中 set /a varname = varname + 1 并且该值将递增。检索该变量需要延迟扩展,但增加它不需要。无论如何,我发现赋值运算符是一个更简洁的选择。 set /a varname += 1
猜你喜欢
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 2014-04-04
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2015-05-10
相关资源
最近更新 更多