Цикл, который добавляет имя файла при копировании одного и того же имени файла из разных папок в новую папку - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть следующий код для поиска определенного имени файла (ratings.zil) в нескольких папках и копирования их в новую папку:

for /R %f in (ratings.zil) do @IF EXIST %f copy "%f" "C:\here"

Но когда файл копируется в новую папку, он перезаписывается вместо добавления числа в конце каждого ratings.zil - т.е. ratings(1).zil, ratings(2).zil. Есть ли способ добавить цикл в приведенный выше код, который будет добавлять число после каждого файла?

Этот вопрос изначально был помечен как дубликат, за исключением того, что ответ на дубликат работает только тогда, когда вы копируете файл в той же папке.

1 Ответ

0 голосов
/ 20 ноября 2018

Вот слегка исправленная версия DBenhams answer .

@echo off
setlocal disableDelayedExpansion

if "%~2" equ "" echo Error: Insufficient arguments>&2&exit /b 1
set "source=%~f1"
set "target=%~f2"

md "%target%"
set /a cnt=0
for /r "%source%" %%F in (ratings.zil) do if "%%~dpF" neq "%target%\" (
  if exist "%%F" (
  if exist "%target%\%%~nxF" (
    set /a cnt+=1
    set "full=%%F"
    set "name=%%~nF"
    set "ext=%%~xF"
    setlocal enableDelayedExpansion
    copy "!full!" "!target!\!name!(!cnt!)!ext!" >nul
    endlocal
  ) else copy "%%F" "%target%" >nul
 )
)

Чтобы запустить это, вам нужно сохранить файл как-то вроде myRename.cmd, затем просто открыть cmd.exe и запустите его как:

myRename.cmd "C:\Source of files" "D:\Destination"

Если вы захотите поместить его в установленный каталог и иметь статическую папку назначения и сможете просто дважды щелкнуть по нему, то это будет делать:

@echo off
setlocal disableDelayedExpansion

set "target=C:\here"

md "%target%"
set /a cnt=0
for /r %%F in (ratings.zil) do if "%%~dpF" neq "%target%\" (
  if exist "%%F" (
  if exist "%target%\%%~nxF" (
    set /a cnt+=1
    set "full=%%F"
    set "name=%%~nF"
    set "ext=%%~xF"
    setlocal enableDelayedExpansion
    copy "!full!" "!target!\!name!(!cnt!)!ext!" >nul
    endlocal
  ) else copy "%%F" "%target%" >nul
 )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...