Как переименовать и переместить файлы в новый каталог

Я хотел бы переименовать загружаемые на другой сервер файлы с расширения .txt на .txt_mvd и переместить их в другой каталог для архивирования в пакетном режиме Windows. Может ли кто-нибудь помочь с тем, каким должен быть пакетный сценарий Windows?

Спасибо.


person Jerry    schedule 03.02.2012    source источник
comment
Пробовали использовать Windows powershell. Это должно облегчить вам задачу.   -  person jake    schedule 04.02.2012


Ответы (1)


Вот код

FOR  /R C:\your_folder %%d  IN  (*.txt)  DO  (
    ren %%d %%~nd.txt_mvd
)

%%d — это полное имя файла + путь
%%~nd возвращает только имя файла без расширения
Используя параметр /R, он будет сканировать папку и подпапку

ОБНОВЛЕНИЕ 1

Следующий код должен работать должным образом.
Я добавил IF, который игнорирует вложенные папки.

FOR  /R E:\your_folder\ %%d  IN  (*.*)  DO  (
    IF %%~dpd==E:\your_folder\ (
        ren %%d %%~nd.txt_mvd
    )
)

ОБНОВЛЕНИЕ 2

Фиксированный код

FOR  /R E:\your_folder\ %%d  IN  (*.txt)  DO  (
    IF %%~dpd==E:\your_folder\ (
        ren %%d %%~nd.txt_mvd
    )
)

ОБНОВЛЕНИЕ 3
Вот более обобщенная и параметризованная версия скрипта.
Измените начальный параметр по своему усмотрению (первые 4 строки кода).
Сначала переименуйте этот скрипт выбранные вами файлы (1-й параметр) в исходной папке (3-й параметр), измените расширение на новое (2-й параметр), а затем переместите переименованные файлы в выбранную вами папку (4-й параметр).

set Extension_of_file_you_want_to_renamne_and_move=txt
set New_extension_of_moved_files=txt_mvd

set Folder_that_contain_your_files=C:\Your_starting_folder\
set Folder_where_to_move_your_files=C:\Your_destnation_folder\

FOR  /R %Folder_that_contain_your_files% %%d  IN  (*.%Extension_of_file_you_want_to_renamne_and_move%)  DO  (
    IF %%~dpd==%Folder_that_contain_your_files% (
    IF %%~xd==.%Extension_of_file_you_want_to_renamne_and_move% (
        ren "%%~d" "%%~nd.%New_extension_of_moved_files%"
        move "%%~dpnd.%New_extension_of_moved_files%" "%Folder_where_to_move_your_files%"
        )
    )
)

при изменении параметра НЕ добавляйте пробел.
Поэтому НЕ изменяйте параметр следующим образом:

set Folder_that_contain_your_files = c:\myFolder      <--- WRONG, WON'T WORK, there are unneeded space

вместо этого напишите параметр БЕЗ лишнего пробела:

set Folder_that_contain_your_files=c:\myFolder      <--- OK, THIS WILL WORK, there are no extra spaces

ОБНОВЛЕНИЕ 4
Исправлен код, я добавил несколько кавычек, без них код не будет работать, если имя папки содержит пробелы.

set Extension_of_file_you_want_to_renamne_and_move=txt
set New_extension_of_moved_files=txt_mvd

set Folder_that_contain_your_files=C:\Your_starting_folder\
set Folder_where_to_move_your_files=C:\Your_destnation_folder\

FOR  /R "%Folder_that_contain_your_files%" %%d  IN  (*.%Extension_of_file_you_want_to_renamne_and_move%)  DO  (
    IF "%%~dpd"=="%Folder_that_contain_your_files%" (
    IF %%~xd==.%Extension_of_file_you_want_to_renamne_and_move% (
        ren "%%~d" "%%~nd.%New_extension_of_moved_files%"
        move "%%~dpnd.%New_extension_of_moved_files%" "%Folder_where_to_move_your_files%"
        )
    )
)
person Max    schedule 03.02.2012
comment
Спасибо Макс, за код. Мне удалось переименовать файлы, но он переименовывает все файлы с расширением .txt в .txt_mvd в текущем и всех подкаталогах. Я только хотел изменить новые файлы, которые поступают в текущий каталог, и изменить расширение, а затем переместить его в каталог архива. Можно ли это изменить? Спасибо еще раз. - person Jerry; 04.02.2012
comment
Извините, но код не сработал. Он изменил расширения других файлов, включая .exe, на .txt_mvd. Я предполагаю, что в вашем коде E:\your_folder\ является моей текущей папкой? Где указать папку для перемещения измененных файлов расширения? Не могли бы вы объяснить логику и куда мне нужно поместить мой текущий каталог и куда мне нужно поместить каталог архива? Благодарю вас! - person Jerry; 05.02.2012
comment
@richard: извините, была ошибка. я исправил это - person Max; 05.02.2012
comment
Привет, Макс, в этом коде, который является моим текущим каталогом и каким должен быть каталог для перемещения переименованных файлов? Спасибо. - person Jerry; 05.02.2012
comment
@Richard: я только что обновил решение более общей версией кода, здесь есть явный параметр для начальной папки, папки назначения и т. д. - person Max; 06.02.2012
comment
Привет @Max, я получаю сообщение об ошибке: DO был неожиданным в это время. и он не переименовывал и не перемещал файл. Я изменил параметры следующим образом: set Ext=txt set RenExt=txt_mvd set OrigFolder=C:\Test\ set MvdFolder=C:\Test\Moved FOR /R %C:\Test% %%d IN (*.%TXT %) DO ( IF %%~dpd==%C:\Test% ( IF %%~xd==.%TXT% ( ren %%~d %%~nd.%TXT_MVD% move %%~dpnd.% TXT_MVD% %C:\Test\Moved% ) ) ) Это правильно или я не правильно изменил параметры? Спасибо, - person Jerry; 06.02.2012
comment
@richard: я исправил код, была ошибка в имени папки с пробелами - person Max; 06.02.2012
comment
Извините, но все еще получаю сообщение об ошибке: Неверный синтаксис команды. - person Jerry; 06.02.2012
comment
Я не могу исправить какую-либо другую ошибку... она работает на моей машине :-|. Вы поставили обратную косую черту \ в конце имени папки? Без обратной косой черты это не сработает. - person Max; 07.02.2012
comment
можно ли сделать то же самое для нескольких типов файлов, например. .DOC и .XLS с той же логикой? - person Jerry; 07.02.2012
comment
@Richard: самый простой способ сделать это для нескольких типов файлов — создать несколько пакетных файлов :-) Или, если вам нужно сделать это для любого другого типа файла, тогда можно дополнительно параметризовать пакетный файл и передать все параметр как параметр команды, например вызов команды c:›my_file_renamen.cmd txt txt_mvd - person Max; 07.02.2012
comment
спасибо за помощь. Вы были отличным помощником и наставником. С наилучшими пожеланиями, - person Jerry; 07.02.2012