我正在尝试使用批处理文件创建一个文件列表(大约4000个)但没有扩展名,一些文件名包含-
或_
或空格我想保持它们相同,然后我将复制并粘贴Excel中的列表并运行我在此网站上找到的宏,使用该列表上的名称创建具有不同扩展名的单个文件。我希望我有道理。
到目前为止,这是我的尝试:
for /f %%a in ('dir /b *.dsg') do @echo %%~na >txt1.txt
但是这个只创建一个只有一个名字的列表。
答案 0 :(得分:1)
这个简单任务的批处理代码是:
@echo off
del txt1.txt 2>nul
for /F "delims=" %%I in ('dir *.dsg /A-D /B 2^>nul') do echo %%~nI>>txt1.txt
命令 DEL 用于删除可能已存在的文件txt1.txt
,并将错误消息输出重定向到处理 STDERR 到设备 NUL < / strong>在当前目录中不存在该文件时禁止它。
接下来,命令 DIR 在单独的命令进程中由 FOR 执行。 DIR 仅列出与*.dsg
匹配的所有文件的名称,因为/A-D
因为/B
(非目录属性)而导致>
。
如果当前目录中没有* .dsg文件,则 DIR 输出的错误消息将通过将其重定向到设备 NUL 来抑制。当Windows命令解释器解析 FOR 命令行时,必须使用插入符^
对重定向运算符>
进行转义,以将其解释为文字字符。稍后执行 DIR 命令行delims=
将被解释为重定向运算符。
DIR 输出的列表由 FOR 逐行解析。选项I
禁用使用空格/制表符作为分隔符拆分每一行。因此,分配给循环变量%%~nI
始终是从 DIR 的输出中读取的整行。
ECHO 输出以处理 STDOUT 是最后一个点左边的字符串,即没有文件扩展名的文件名。此输出将重定向到一个文件,并将该行附加到现有文件内容。
>>
和重定向运算符del /?
之间的空格也将由 ECHO 输出,因此也会作为尾随空格写入文件。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
echo /?
for /?
@Autowired
public Environment env;
String propertyValue= env.getProperty(key);
另请阅读Microsoft有关Using Command Redirection Operators。
的文章答案 1 :(得分:0)
@ user8033911,根据您的最新评论,似乎没有理由不能将文件扩展名替换为另一个文件扩展名作为同一过程的一部分。
直接在命令提示符窗口中输入的以下代码应显示.dsg
替换为.new
。
For /F "EOL=/Delims=/" %A In ('Where/F .:*.dsg') Do @Echo %A to "%~dpnA.new"
如果您仍然无法理解下面的评论,请说明您遇到困难。