位于子文件夹中的多个文件具有相似的名称和连续的D.C. _ 18 CA 2616 –00000001.txt
。想要找到0000*
之前的“破折号”字符并将其替换为连字符。
例如,从D.C. _ 18 CA 2616 –00000001.txt
到D.C. _ 18 CA 2616 -00000001.txt
已经尝试过...
@echo off
Setlocal enabledelayedexpansion
Set "Pattern=–"
Set "Replace=-"
For /R %%a in (*–*) Do (
set "File=%%~nxa"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)
Pause&Exit
答案 0 :(得分:0)
这是一个非常棘手的任务,因为破折号字符是Unicode代码点U + 2013。在默认的Windows命令处理器中,它使用437控制台代码页。 û
字符是代码页437中的字符号150。因此,似乎一个进程正在代码页1252中写入文件,而另一个进程正在使用代码页437读取文件。-关于问题{{3}的更好解释}
要解决此问题,我们可以在脚本开头使用chcp 1252
将437控制台代码页更改为1252。
由于我们正在处理Unicode字符,因此,如果您尝试将û
粘贴到基本文本文件编辑器中,它将直接将其更改为 en破折号。为了解决这个问题,我使用了编辑器here,并在编辑器中更改了编码(编码,字符集,西欧,OEM-US),以允许编辑器粘贴û
字符。 -有关问题notepad++的更多说明。
ChangeEnDashToDash.bat:
@echo off
setlocal EnableDelayedExpansion
chcp 1252>NUL
Rem | Get Each File Name
for /f "tokens=*" %%A in ('dir "*.txt" /b') do (
Rem | Get Each File Name
for /f "tokens=*" %%B in ('Echo %%A^| find /i "û"') do (
Rem | Save Original Name
Set "OriginalName=%%B"
Rem | Get New Name
SET "ModifiedName=!OriginalName:û=-%!"
Ren "!OriginalName!" "!ModifiedName!"
)
)
goto :EOF
下面的代码将简单地通过使用here将任何–
更改为-
。要获取.txt
文件,我们可以将for
与dir "*.txt" /b
一起使用循环。然后,使用Echo %%A^| find /i "û"
将仅显示带有–
的文件名。从那里我们可以设置一些字符串并重命名它们。
如果您还希望搜索子目录,请将dir "*.txt" /b
更改为dir "*.txt" /b /s
。我留下了一些rem
语句来帮助解释脚本过程。
要获取有关任何命令的帮助,请执行以下操作:
set /?
for /?
if /?
ren /?