我需要在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.
非常感谢任何帮助。
答案 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!
)