在批处理文件中删除文件名前9个字符

时间:2014-10-21 16:22:24

标签: batch-file

我需要在Windows批处理文件中删除文件名中的前9个字符。

我需要删除字符的文件名格式是

0009mmdd_abcd_abcdefgh_00009_yyyymmddhhmmss.dat

我尝试使用以下内容但不起作用

setlocal enabledelayedexpansion
for /f %%a in ('dir /b *.dat') do (
  SET oldName = %%a
  SET newName = %oldName:~9%
  echo %%a
  echo %oldName%
  echo %newName%
  echo !newname!
)

它获得的输出是

SET oldName = 00091017_abcd_abcdefgh_00009_20141021111145.dat
 SET newName = ~9
 echo 00091017_abcd_abcdefgh_00009_20141021111145.dat
 echo
 echo
 echo !newname!
)
00091017_abcd_abcdefgh_00009_20141021111145.dat
ECHO is on.
ECHO is on.
ECHO is on.

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您真正的问题是在第一个下划线之前剥离字符串:

setlocal
for /f "tokens=1*delims=_" %%a in ('dir /a-d /b *.dat') do (
 echo(ren "%%a_%%b" "%%b"
)

注意:假设要删除第一个下划线的部分。

指示仅用于echo用于测试目的。将echo(ren更改为ren以实际重命名。

a-d已添加到dir命令以排除目录名。

答案 1 :(得分:0)

SET oldName = %%a
SET newName = %oldName:~9%
             ^ Space included in value
           ^   Space included in variable name

因此,您要定义两个名为%oldName %%newName %的变量。试试

@echo off
    setlocal enabledelayedexpansion
    for /f "delims=" %%a in ('dir /a-d /b *.dat') do (
      SET "oldName=%%a"
      SET "newName=!oldName:~9!"
      echo %%a
      echo !oldName!
      echo !newname!
    )