CMD 批处理文件以读取目录中的文件并使用名称中的内容创建新文件

CMD Batch File to Read Files in Directory and Create new files with Content from the Name

如果我有一个包含 2 个文件的目录,如下所示: 123456789_File1.pdf 123456789_File2.pdf

我需要 运行 一个批处理文件,它只允许我读取文件的名称,而不是它的路径。创建另一个具有相同名称和不同扩展名的文件,其内容仅为名称的前 9 个字符。以下是我尝试过的方法,但我不明白为什么这是不正确的?我对一些看起来应该很简单的事情做了几个小时的研究,但我觉得我只是遗漏了一些东西。

FOR /R C:\Test\Files %%F in (*.*) do (set content=%%~nF & echo %content:~0,9%>> %%~nF.txt)

这对我有用:

@echo off
Setlocal EnableDelayedExpansion
FOR /R . %%F in (*.*) do (
    set content=%%~nF
    echo !content:~0,9! %%~nF.txt
)

为了将来的参考,请注意,就 Whosebug 问题和答案而言,"this is not correct" 并不是对问题的准确描述。您的问题的精确描述是,在循环的每次迭代中,%content% 似乎包含与循环第一次迭代中完全相同的内容,而不管 %%F 的值如何。

解决方法是启用"delayed expansion",并使用特殊的!分隔符代替%,以享受延迟扩展的好处。