Переименовать все файлы в папке, используя пакет или PowerShell, запустить из пакета
У меня есть файлы случайных имен файлов и расширений в папке с другим случайным именем файла, которое содержит расширение *.htm. Я хочу переименовать все имена файлов каждого случайного файла в папке, чтобы они соответствовали одному файлу *.htm, сохраняя при этом правильное расширение для каждого случайного файла.
Таким образом, при запуске пакетного файла будет обнаружен файл, такой как "My File Name.HTM", и следующие файлы будут переименованы в:
"test.doc" переименован в "My File Name.doc"
"anyfile.jpg" переименован в "My File Name.jpg"
"text.txt" переименован в "My File Name.txt"
я пытался
Rename "*.*" "*.htm"
без успеха. Файл *.HTM может быть любым неизвестным именем файла, но всегда будет содержать расширение HTM, и это всегда будет единственный файл с расширением HTM в папке. Затем я запускаю командный файл из командной строки.
2 ответа
Краткий пакетный файл:
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
Что-то вроде этого:
$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
,