从多个文件的开头删除字符

时间:2013-05-11 13:57:25

标签: batch-file

我基本上有很多文件,通常是.xls或.pdf格式,我需要从每个文件中删除前8个字符。标准格式如下:

abc 123 restoffilenameiwanttokeep.pdf

我想摆脱'abc 123'并且我有一些代码似乎适用于某些文件但不适用于其他文件,请参阅下文 -

@echo off
setlocal enabledelayedexpansion
LFNFOR On

for %%a in (*.pdf) do (
set oldName=%%a
set newName=!oldName:~8!
Ren "%%a" "!newName!"
)
endlocal

对于某些文件它可以工作,对于其他文件它已经删除了多达10个字符,我不知道为什么,是因为最后一个字符是空格?但如果是这样的话,为什么它与某些人合作而不是其他人呢这非常令人困惑。

我在使用Win XP并使用批处理文件来执行此操作。

任何帮助都将不胜感激。

亚当

2 个答案:

答案 0 :(得分:0)

建议略微更好的代码(支持!^):

@echo off &setlocal

for %%a in (*.pdf) do (
set "oldName=%%a"
setlocal enabledelayedexpansion
set "newName=!oldName:~8!"
Ren "!oldname!" "!newName!"
endlocal
)
endlocal

答案 1 :(得分:0)

看起来Peter Wright发现了这个问题。您需要将for循环更改为以下内容:

for /f "delims=" %%a in ('dir /b *.pdf') do (
...
)

/f选项与dir命令周围的单引号相结合,告诉for循环它需要执行dir并循环结果。< / p>

"delims="之后/f阻止它匹配单词之间的任何分隔符,否则%%a将只返回第一个空格分隔的单词。

/b命令上的dir选项,只提供了一个只有名称的目录列表的裸版本,因为这显然是你感兴趣的所有内容。