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",并使用特殊的!
分隔符代替%
,以享受延迟扩展的好处。
如果我有一个包含 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",并使用特殊的!
分隔符代替%
,以享受延迟扩展的好处。