2

Мне часто приходится менять один файл на другой, не перезаписывая оригинал.

Допустим, есть два файла, foo_new.dll и foo.dll . Я обычно переименовываю их следующим образом:

  1. foo.dll -> foo_old.dll ,
  2. foo_new.dll -> foo.dll ,
  3. [сделать что-то с замененным файлом],
  4. foo.dll -> foo_new.dll ,
  5. foo_old.dll -> foo.dll .

Это нормально для замены одного файла, но это становится утомительным при замене нескольких файлов одновременно.

Существует ли утилита Windows (7 и предпочтительно XP) или метод, который упрощает эту задачу и хорошо работает при обмене несколькими файлами?

Я бы предпочел иметь возможность использовать его из FreeCommander, но Windows Explorer тоже подойдет.

2 ответа2

1

Если вы измените соглашение об именах файлов, то вы можете легко управлять заменой нескольких файлов через RENAME с подстановочными знаками.

Вместо того, чтобы называть ваши файлы foo_new.dll , называйте их foo.dll.new . После первоначального обмена исходный foo.dll будет называться foo.dll.old .

Тогда вы можете использовать:

rem First swap in the new files

  rem The following command appends .old to all files with .dll extension (foo.dll -> foo.dll.old)
  ren *.dll *?.old

  rem The following command removes all .new extensions (foo.dll.new -> foo.dll)
  ren *.new *.

rem Now you can work with the new replacements

rem Finally swap out the new files and restore the old ones

  rem Add .new to the dll files (foo.dll -> foo.dll.new)
  ren *.dll *?.new

  rem Remove .old extensions (foo.dll.old -> foo.dll)
  ren *.old *.

См. Как команда Windows RENAME интерпретирует подстановочные знаки? для полного объяснения того, как RENAME обрабатывает групповые символы.

Одним из ограничений вышеизложенного является то, что предполагается, что у вас есть замена для каждого DLL-файла в вашем каталоге.

Простое расширение с помощью команды FOR можно использовать для замены подмножества DLL-файлов (только тех, для которых определен * .dll.new). Вероятно, проще всего поместить команды в пару пакетных сценариев.

Используйте следующий пакетный файл swapInNew.bat для замены новых файлов:

@echo off
for %%F in (*.new) do (
  move "%%~nF" "~nF.old"
  move "%%F" "%%~nF"
)

Теперь вы можете работать с файлами замены по мере необходимости

Наконец, используйте следующий пакетный файл restoreOld.bat для восстановления старых файлов:

@echo off
for %%F in (*.old) do (
  move "%%~nF" "%%~nF.new"
  move "%%F" "%%~nF"
)
0

Для (1)

>for /f "delims=" %f in ('dir *.cmd /a-d /on /b') do @ren %f %~nf_old%~xf

Для (2)

>for /f "delims=" %f in ('dir *_new.cmd /a-d /on /b') do @(@set nf=%~nf & @ren %f %nf:~0,-5%%~xf)

Для (3)

rem Anything You Can Do!

Для (4)

>for /f "delims=" %f in ('dir *.cmd /a-d /on /b') do @ren %f %~nf_new%~xf

Для (5)

>for /f "delims=" %f in ('dir *_old.cmd /a-d /on /b') do @(@set nf=%~nf & @ren %f %nf:~0,-5%%~xf)

Жаль, что есть особая необходимость в разработке конкретного сценария Любая идея для улучшения приветствуются. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .