我基本上有很多文件,通常是.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并使用批处理文件来执行此操作。
任何帮助都将不胜感激。
亚当
答案 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
选项,只提供了一个只有名称的目录列表的裸版本,因为这显然是你感兴趣的所有内容。