删除" 0"从文件名的开头

时间:2017-03-07 22:16:22

标签: batch-file

我尝试修复的一些背景知识。我们每天创建的文件会被转储到当天创建的文件夹中。其中一些文件在它们前面创建了一个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

关于如何解决这个问题的想法?

2 个答案:

答案 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 /Fdir /B/S)是一个更好的选择,因为在循环开始处理任何项之前枚举整个目录(树)。 (在您的特定情况下,由于重命名的文件不再与模式匹配,因此总是只有一个前导0,因此不存在问题。)