我有一个包含所有类型文件的文件夹。假设我的文件夹路径是E:/temp
。
我只想为.avi
类型文件创建一个 txt 文件,并将该 txt 文件命名为电影的名称。因此,如果我的.avi
文件夹中有 20 个剪辑文件,我想打开 20 个 txt 文件,并且每个 txt 文件都将以一个剪辑命名。
另外,我需要在 txt 文件中写入(对于所有 txt 文件来说都是相同的)单词“HAPPY”
使用批处理文件的脚本是什么?
答案1
您需要使用FOR
来迭代要处理的元素。请参阅如何循环遍历批处理文件中与通配符匹配的文件了解详情。
解决该部分后,您将需要创建.txt
文件的文件名。命令行文档FOR
可以在这里帮助我们:
In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
最后一个条目是我们想要的。我们想截断.avi
,所以我们~n
在变量中使用 来仅获取名称。这就是 的来源%%~nf.txt
。
我们从%%f
当前文件名开始。然后我们用 截断扩展名%%~nf
并添加.txt
... 完成:%%~nf.txt
最后一个难题是当您尝试在一行中解决所有问题时,例如:
FOR %%f IN (*.avi) DO ECHO HAPPY > %%~nf.txt
这行不通,因为 shell 会解释>
并立即开始输出到该文件,这不是我们想要的。我们希望ECHO
对每个文件都进行处理,所以我只是将其拆分成多行。
@ECHO OFF
REM Iterate over all *.avi file in the current directory
FOR %%f IN (*.avi) DO (
REM Cut off the extension from %%f, tack on .txt and
REM use it as the filename for our HAPPY output
ECHO HAPPY > %%~nf.txt
)
答案2
创建名为的文本文件快乐.txt含有“快乐的“。创建名为制作快乐包含这个:
for %%i in (*.avi) do copy happy.txt "%%i.txt"
跑步使快乐。新的文本文件将具有双重扩展名,但如果有必要,也可以通过其他方法解决这个问题。