Что проще всего встроить в Windows для копирования и переименования файлов, когда переименование предполагает добавление некоторых перед расширением - PullRequest
0 голосов
/ 23 августа 2009

У меня есть каталог (источник) с кучей файлов и эти две библиотеки

file1.dll

file2.dll

Я хочу скопировать их по назначению, но на копии переименовать их

file1_a.dll

file2_a.dll

В основном добавляем _a к каждому скопированному dll

Мне нужен очень простой способ создания этого сценария с помощью командного файла. Не могу использовать Perl, потому что он не встроен в Windows.

Является ли VBS моим лучшим вариантом?

Я попробовал старый добрый

copy *.dll *64.dll 

но это было некуда.

Ответы [ 2 ]

4 голосов
/ 23 августа 2009

Используйте команду for:

for %f in (t*.dll) do copy SourceDir\%f  DestDir\%~nf_a.dll

Не забудьте использовать двойной% (%%), если используется в командном файле.

1 голос
/ 23 августа 2009

Чтобы добавить ответ Преета, следующий пакетный скрипт переименовывает все файлы, которые соответствуют маске, которую вы передаете. Вы можете либо:

  1. Добавить шаблон в конец имени файла (file1.dll ==> file1_a.dll).
  2. Вставить шаблон в начале имени файла (file1.dll ==> a_file1.dll).
  3. Заменить имя файла шаблоном и порядковым номером (file1.dll ==> mydll_1.dll; file2.dll ==> mydll_2.dll).

RenameAll.bat

@echo OFF

setlocal

@echo.
set /p PATTERN="Enter text pattern to add to file names: "
@echo %PATTERN%

:GETLOC
@echo.
@echo (A)ppend pattern to end of filename
@echo (I)nsert pattern at beggining of filename
@echo (R)eplace filename with pattern and sequence number
@echo ---------
@echo (Q)uit
@echo.
set /p LOCATION="Enter choice: "
@echo %LOCATION%

if /I '%LOCATION%' equ 'A' goto FILELOOP
if /I '%LOCATION%' equ 'I' goto FILELOOP
if /I '%LOCATION%' equ 'R' goto FILELOOP
if /I '%LOCATION%' equ 'Q' goto END
@echo Choice %LOCATION% invalid, try again.
goto :GETLOC

SET /A SEQ_NO=0

:FILELOOP
@echo Renaming file %1...
if %1.==. goto END
@echo %1
SET /A SEQ_NO=SEQ_NO+1
if /I '%LOCATION%' equ 'A' for %%i in (%1) do ren %%i "%%~ni%PATTERN%%%~xi"
if /I '%LOCATION%' equ 'I' for %%i in (%1) do ren %%i "%PATTERN%%%~ni%%~xi"
if /I '%LOCATION%' equ 'R' for %%i in (%1) do ren %%i "%PATTERN%%SEQ_NO%%%~xi"
SHIFT
goto FILELOOP

:END
@echo Rename batch complete.
::pause
endlocal

Если вы поместите ярлык для этого в вашу папку SendTo, вы можете выбрать файлы в проводнике Windows, щелкнуть правой кнопкой мыши и пропустить их через скрипт, чтобы переименовать все сразу. Немного поработав, вы можете скопировать это вместо переименования (или обоих).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...