2014-12-17 2 views
1

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

Код я написал

@echo off 
SET src=c:\link.txt 
set dest=c:\files 
FOR /F "delims=" %%a IN (%link%) DO COPY "%%a" "%dest%\%%~nxa" /-Y 
pause 

Любая помощь, чтобы улучшить это ???

ответ

0

Нечто подобное должно работать. Он проверяет каждый отдельный файл и продолжает добавлять номера до тех пор, пока не будет определено уникальное имя.

Нижеприведенный скрипт сохранит исходное имя, если оно не существует в dest, но в будущих вызовах оно будет добавлять последовательный номер. Например:

  • Первого звонок: MyFile.txt
  • Второй вызов: MyFile-2.txt
  • Третий вызов: MyFile-3.txt

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

@echo off 
SETLOCAL EnableExtensions 

REM Source file which contains a list of full file names. 
REM This filename should _not_ be in quotes. 
SET src=c:\link.txt 

REM Directory to copy the files to. 
REM This should _not_ be in quotes. 
REM Entire declaration wrapped in quotes to prevent accidental spaces on the end. 
set "dest=c:\files" 

FOR /F "usebackq tokens=* delims=" %%a IN ("%src%") DO (
    ECHO Processing: %%a 
    CALL :DoCopy "%%a" 0 
) 
pause 

ENDLOCAL 
GOTO :EOF 


:DoCopy 
REM First parameter is the file name. 
REM Second parameter is the number to append on matches. 
SET /A Append=%~2+1 

SET FileToCheck="%dest%\%~nx1" 
IF NOT "%Append%"=="1" (
    REM If we get here a duplicate name exists. 
    REM Append the number to the end. 
    SET FileToCheck="%dest%\%~n1-%Append%%~x1" 
) 

IF NOT EXIST %FileToCheck% (
    REM Does not exist, copy it. 
    COPY "%~1" %FileToCheck% /-Y 
    GOTO :EOF 
) ELSE (
    REM File does exist. 
    REM Keep going until we have a unique value. 
    CALL :DoCopy "%~1" %Append% 
    GOTO :EOF 
) 
+0

В этом коде есть некоторые проблемы, файлы не копируются в папку. Я как бы новичок в этом, вы могли бы помочь мне разобраться в этом? – geeko

+0

@geeko - Работал для меня как есть. Я немного обновил ответ с некоторыми инструкциями и чтобы он отображал файлы по мере их обработки. Посмотрите, что это дает вам. –

+1

Я не вижу определения системной переменной 'link'. Так что '... %% a IN ("% link% ") DO ...' должно быть '... %% a IN ("% src% ") DO ...' И использовать 'CALL: DoCopy "%% ~ a" 0', чтобы гарантировать правильное имя файла, независимо от того, что оно появляется с или без окружающих двойных кавычек в файле _source_ 'c: \ link.txt' – JosefZ

Смежные вопросы