0

我在一个文件夹中有随机文件名和扩展名的文件,另一个随机文件名包含 *.htm 扩展名。我想重命名文件夹中每个随机文件的所有文件名以匹配一个 *.htm 文件,同时为每个随机文件保留正确的扩展名。

因此,当批处理文件运行时,将检测到诸如“My File Name.HTM”之类的文件,并将以下文件重命名为:

  • “test.doc”重命名为“我的文件名.doc”

  • “anyfile.jpg”重命名为“我的文件名.jpg”

  • “text.txt”重命名为“我的文件名.txt”

我努力了

Rename "*.*" "*.htm"

没有成功。*.HTM 文件可以是任何未知文件名,但始终包含 HTM 扩展名,并且它始终是文件夹中唯一具有 HTM 扩展名的文件。然后,我将从命令行运行批处理文件。

4

2 回答 2

1

一个简洁的批处理文件:

for %%f in (*.htm) do set name=%%~nf
ren * "%name%.*"

与 n01d 的答案相同的警告。另外,不要将批处理文件放在同一目录中。

编辑:

这是一个示例会话,显示批处理文件将所有文件重命名为 .htm 文件的名称:

D:\tmp\kktmp>dir
 Volume in drive D has no label.
 Volume Serial Number is 4EDE-41E1

 Directory of D:\tmp\kktmp

14/07/2016  12:06    <DIR>          .
14/07/2016  12:06    <DIR>          ..
14/07/2016  12:05                 0 Author Name - Book Title - The Billionaires Revenge.htm
14/07/2016  12:06                 0 Book Title - The Billiona - Author Name.azw3
14/07/2016  12:06                 0 Book Title - The Billiona - Author Name.epub
14/07/2016  12:06                 0 Book Title - The Billiona - Author Name.mobi
14/07/2016  12:06                 0 Book Title - The Billiona - Author Name.pdf
               5 File(s)              0 bytes
               2 Dir(s)  52,725,227,520 bytes free

D:\tmp\kktmp>type ..\t.bat
for %%f in (*.htm) do set name=%%~nf
ren * "%name%.*"

D:\tmp\kktmp>..\t.bat

D:\tmp\kktmp>for %f in (*.htm) do set name=%~nf

D:\tmp\kktmp>set name=Author Name - Book Title - The Billionaires Revenge

D:\tmp\kktmp>ren * "Author Name - Book Title - The Billionaires Revenge.*"

D:\tmp\kktmp>dir
 Volume in drive D has no label.
 Volume Serial Number is 4EDE-41E1

 Directory of D:\tmp\kktmp

14/07/2016  12:37    <DIR>          .
14/07/2016  12:37    <DIR>          ..
14/07/2016  12:06                 0 Author Name - Book Title - The Billionaires Revenge.azw3
14/07/2016  12:06                 0 Author Name - Book Title - The Billionaires Revenge.epub
14/07/2016  12:05                 0 Author Name - Book Title - The Billionaires Revenge.htm
14/07/2016  12:06                 0 Author Name - Book Title - The Billionaires Revenge.mobi
14/07/2016  12:06                 0 Author Name - Book Title - The Billionaires Revenge.pdf
               5 File(s)              0 bytes
               2 Dir(s)  52,724,703,232 bytes free
于 2016-07-13T14:20:44.647 回答
0

像这样的东西:

$files = Get-ChildItem -Path D:\TEST_123
$htmBaseName = $files | where {$_.Extension -eq '.htm'} | select -ExpandProperty BaseName

foreach ($f in $files) {
    if ($f.Extension -ne '.htm') {
        Rename-Item -Path $f.FullName -NewName ($htmFileName + $f.Extension)
    }
}

但要小心:如果有多个文件具有相同的分机。你会得到一个错误Cannot create a file when that file already exists

于 2016-07-13T14:11:26.747 回答