【问题标题】:Batch Removal of multiple Unicode codes (ie. %20) from filenames从文件名中批量删除多个 Unicode 代码(即 %20)
【发布时间】:2014-07-03 13:10:59
【问题描述】:

我经常处理包含 30,000-50,000 个单独文件的文件组,其中许多文件名中包含 unicode 代码(即 %20、%5a、%5b 等)。为了正确处理这些文件,我需要将这些字符替换为下划线。

我有一个脚本用于一次替换其中一个代码,但必须运行多个脚本来清理列表并且总是会遗漏一些。

我使用的脚本,以%20为例如下:

@echo off
setlocal EnableDelayedExpansion

for /f "delims=" %%I in ('dir /b ^| find "%20"') do (
set var01=%%I
set var02=!var01:%%5c=_!
call :ren
)
:ren
ren %var01% %var02%

这对每个代码都适用,但我希望能够找到 %** 来查找所有代码并立即替换它们。这是可以通过相当简单的蝙蝠来完成的事情,还是我需要更专业的工具?

感谢您的帮助

【问题讨论】:

  • 您必须处理所有可能的十六进制编码值,虽然可以通过一些批处理脚本来完成,但检查所有 256 个值会相当慢。我认为您会找到一个第三方重命名工具,它可以处理该任务并快速运行。 @aacini 可能会帮助您使用非常有效的内存驻留数组,如果您的文件名不太长(这会占用环境空间)

标签: windows batch-file unicode filenames batch-rename


【解决方案1】:
@echo off
setlocal EnableDelayedExpansion
:: remove variables starting $ 
For %%b IN ($) DO FOR  /F "delims==" %%a In ('set %%b 2^>Nul') DO SET "%%a="
FOR %%a IN (0 1 2 3 4 5 6 7 8 9 a b c d e f) DO (
 FOR %%b IN (0 1 2 3 4 5 6 7 8 9 a b c d e f) DO (
  SET "$%%a%%b=%%%%a%%b"
 )
)
for /f "delims=" %%I in ('dir /b /a-d^| find "%%"') do (
 SET "var1=%%I"
 FOR /f "tokens=2delims==" %%x IN ('set $') DO SET "var1=!var1:%%x=_!"
 IF "%%I" neq "!var1!" ECHO(REN "%%I" "!var1!"
)
GOTO :EOF

这应该可以解决您的问题。

所需的 REN 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(REN 更改为REN 以实际重命名文件。

【讨论】:

  • 效果很好,提取了我在测试目录中遇到的所有代码,替换了单个文件名中的多个代码,并且比我的单个替换代码工作得更快。
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 2019-07-29
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
相关资源
最近更新 更多