0

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

abc 123 恢复文件名iwanttokeep.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 上并使用批处理文件来执行此操作。

任何帮助,将不胜感激。

亚当

4

2 回答 2

0

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

@echo off &setlocal

for %%a in (*.pdf) do (
set "oldName=%%a"
setlocal enabledelayedexpansion
set "newName=!oldName:~8!"
Ren "!oldname!" "!newName!"
endlocal
)
endlocal
于 2013-05-11T14:44:06.767 回答
0

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

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

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

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

命令上的/b选项dir只为您提供目录列表的裸版本,除了名称之外什么都没有,因为这显然是您感兴趣的全部。

于 2013-05-11T16:02:24.297 回答