Batch file CMD Batch File读取目录中的文件,并使用名称中的内容创建新文件

Batch file CMD Batch File读取目录中的文件,并使用名称中的内容创建新文件,batch-file,cmd,batch-processing,Batch File,Cmd,Batch Processing,如果我有一个包含两个文件的目录,如下所示: 123456789_File1.pdf 123456789_File2.pdf 我需要运行一个批处理文件,让我只读取文件名,而不是它的路径。创建另一个具有相同名称和不同扩展名的文件,其内容仅为名称的前9个字符。下面是我尝试过的,我不明白为什么这是不正确的?我已经做了几个小时的研究,似乎它应该是简单的,我觉得我只是错过了一些东西 FOR /R C:\Test\Files %%F in (*.*) do (set content=%%~nF & e

如果我有一个包含两个文件的目录,如下所示: 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
)
请注意,就StackOverflow问题和答案而言,“这不正确”并不是对问题的准确描述,以供将来参考。对您的问题的精确描述是,在循环的每个迭代中,
%content%
似乎包含与循环的第一个迭代中完全相同的内容,而与
%F
的值无关

解决方案是启用“延迟扩展”并使用特殊的
分隔符而不是
%
,以便享受延迟扩展的好处。

这对我来说很有用:

@echo off
Setlocal EnableDelayedExpansion
FOR /R . %%F in (*.*) do (
    set content=%%~nF
    echo !content:~0,9! %%~nF.txt
)
请注意,就StackOverflow问题和答案而言,“这不正确”并不是对问题的准确描述,以供将来参考。对您的问题的精确描述是,在循环的每个迭代中,
%content%
似乎包含与循环的第一个迭代中完全相同的内容,而与
%F
的值无关

解决方案是启用“延迟扩展”并使用特殊的
分隔符而不是
%
,以便享受延迟扩展的好处