尝试递归地向所有文件添加文件扩展名时出错

时间:2016-10-14 18:00:38

标签: file recursion command-line file-extension

参考这篇文章recursively add file extension to all files,我试图以递归方式在许多单独的子文件夹中添加许多文件的扩展名。出现在我的子文件夹末尾的所有文件根本没有任何扩展名,我想给它们一个.html扩展名。

在使用cd更改为我想要使用的父目录后,我在命令提示符下尝试了以下内容:

find /path -type f -not -name "*.*" -exec mv "{}" "{}".html \;

但是,我收到以下错误:" FIND:无效的开关"

我是使用命令提示进行此类操作的新手,所以请原谅我的无知。我在想,也许我必须将/ path更改为我希望它查看的目录,但我尝试了无效。

我也尝试过以下命令:

find . -type f -exec mv '{}' '{}'.html \;

并收到以下错误:FIND:参数格式不正确

我正在运行Windows 10。

3 个答案:

答案 0 :(得分:0)

-not 是一种古老的逻辑否定形式;目前的表格是(感叹号)。它必须后跟一个布尔表达式。在这种情况下,您使用 -name 跟随它,这会导致命令行解析。 -name 是另一种选择,而不是有效的表达式运算符。

您需要在正则表达式中构建否定:否定句点,而不是整个名称。

我看到另一个强有力的指标:什么是 FIND ?你应该运行的命令是 find ; UNIX具有重要意义。在您使用的任何命令行中,键入 man find find --help 以获取选项和语义列表。我担心你在Windows下的 bash 并不是全功能的。

您熟悉Windows命令重命名吗?它的语法类似于UNIX mv ,但它可以在多个文件上使用。例如

rename [^.]* *.html

我认为适用于单个目录。

答案 1 :(得分:0)

-not版本中似乎无法使用find,请改用!

find /path -type f \! -name "*.*" -exec mv "{}" "{}".html \;

从查找手册:

  

-not expr

 Same as ! expr, but not POSIX compliant.

答案 2 :(得分:0)

向所有评论并留下答案的人道歉。我相信我不清楚我是否试图从windows cmd提示中专门使用它。我使用以下内容为子文件夹末尾的所有文件添加扩展名:

FOR /R %f IN (*.) DO REN "%f" *.html