我尝试修复的一些背景知识。我们每天创建的文件会被转储到当天创建的文件夹中。其中一些文件在它们前面创建了一个0。所以,例如0123456。 我试图想出一个从这些文件中删除0的批处理脚本。我想出了这个:
@echo off
ECHO Checking HNS for Pics that start with a "0"
For /R "D:\Shared\Quality Photos\TEST2\TEST\" %%a in (0*.*) do ren "%%a" " *.*"
删除0但用空格替换它。所以,我将这一行添加到代码中,它出错:
For /R "D:\Shared\Quality Photos\TEST2\TEST\" %%a in ( *.*) do ren "%%a" %%a
关于如何解决这个问题的想法?
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /r "%sourcedir%" %%a IN (0*.*) DO (
SET num=%%~na
CALL ECHO(REN "%%a" "%%num:~1%%%%~xa"
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
为了测试目的,所需的REN命令仅为ECHO
。 在您确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
方法:将num
设置为文件的名称部分(%%~na
),然后重命名该文件,删除第一个字符并附加扩展名(%%~xa
)
答案 1 :(得分:0)
如果你想删除所有前导零,即使有多个也是如此,你可以试试这个:
for /F "delims=" %%F in ('
dir /B /S "D:\Shared\Quality Photos\TEST2\TEST\0*.*"
') do (
for /F "tokens=* delims=0" %%N in ("%%~nxF") do (
if not "%%N"=="" ren "%%F" "%%N"
)
)
内部for /F
循环从文件名中删除所有前导分隔符,即0
。
仅在出现基本名称仅由零组成且没有文件扩展名的文件时才需要if not "%%N"==""
部分。
您不应对在循环枚举的目录(树)中重命名,复制或(重新)移动的文件使用for
(/R
)循环,因为文件可能处理两次或根本不处理。请参阅this post了解原因。使用for /F
和dir /B
(/S
)是一个更好的选择,因为在循环开始处理任何项之前枚举整个目录(树)。 (在您的特定情况下,由于重命名的文件不再与模式匹配,因此总是只有一个前导0
,因此不存在问题。)