2016-07-13 8 views
0

У меня есть файлы случайных имен файлов и расширений в папке с другим случайным именем файла, которое содержит расширение * .htm. Я хочу переименовать все имена файлов каждого случайного файла в папке в соответствии с одним файлом * .htm, сохраняя при этом правильное расширение для каждого случайного файла.Переименуйте все файлы в папке, используя пакетную или powershell, из пакета

Таким образом, когда пакетный файл запускается, файл, например, «My File Name.HTM» будут обнаружены и следующие файлы будут переименованы в:

  • «Test.doc» переименовывается в " Мой Name.doc Файл»

  • "anyfile.jpg" переименовывается в "Мой файл Name.jpg"

  • "text.txt" переименовывается в "Мой Файл name.txt"

Я попытался

Rename "*.*" "*.htm" 

без успеха. Файл * .HTM может быть любым неизвестным именем файла, но всегда будет содержать расширение HTM, и он всегда будет единственным файлом с расширением HTM в папке. Затем я запустим командный файл из командной строки.

+1

ли Вы хотите сделать это для одного папке или рекурсивно? –

+0

Только одна папка. Спасибо –

ответ

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.

+1

Пробовал это, но ничего не делал, нет сообщения об ошибке или указания относительно проблемы. –

+0

Это очень странно. Я проверил решение, прежде чем публиковать его. – n01d

+0

Да, такая же проблема, как в одном выше, я подозреваю. Не знаю, почему он не работает. Thanks –

1

Сжатые пакетный файл:

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

Те же предостережения, как ответ n01d в. Кроме того, не помещайте пакетный файл в тот же каталог.

Edit:

Вот пример сеанса, показывающий, что пакетный файл переименовывает все fiiles к имени файла .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 
+0

Элегантное решение в концепции. Но делает противоположное тому, что мне нужно. Это решение превращает HTM-файл в имя файла того, что еще находится в папке, мне нужно сделать обратное и изменить все остальные файлы на то же имя файла, что и HTM-файл. Пакетный файл не находится в одной папке, и существует только один файл с тем же расширением. Есть ли вероятность получить это, чтобы переименовать все остальные файлы вместо htm-файла? Заранее спасибо. Phaedrus Спасибо за –

+0

Вы пробовали? Он работает здесь. –

+0

Просто, чтобы объяснить, как это работает: первая строка устанавливает переменную 'name' в имя файла .htm. Вторая строка переименовывает все файлы, чтобы иметь имя «имя» и их исходное расширение. Он переименовывает.htm, но это абсолютно доброкачественно, поскольку он переименовывает его с точно таким же именем. –