使用批处理复制多个文件

时间:2014-12-09 20:05:33

标签: batch-file cmd copy

我正在编写一个用于控制我的电影档案的批处理程序(Personel usage)。这就是我想要复制文件夹的目的。

:_Kopya
set "TRGT=%~1" & set "KPY-GLN[1]=%~2" & set "KPY-GLN[2]=%~3" & set "KPY-GLN[3]=%~4"

REM Checking user input and defining variables.
for /l %%s in (1,1,3) do (
  if DEFINED KPY-GLN[%%s] (
    for /f "tokens=1-2 delims=:" %%a in ("!KPY-GLN[%%s]!") do (
      call :_Kontrol "%%a" "%%b" "" "" "aaaaa[%%s]" "bbbbb[%%s]" "" ""
      if "!TEST!"=="0" goto :EOF
    )
  )
)

REM Copying folders.
for /l %%s in (1,1,3) do (
  if NOT DEFINED bbbbb[%%s] set bbbbb[%%s]=!aaaaa[%%s]!
  for /l %%a in (!aaaaa[%%s]!,1,!bbbbb[%%s]!) do (
    call :_ReadLine "%MURL%" "%%a" "LINE"
    if EXIST "!TRGT!\!LINE:~20!" rd /s /q !TRGT!\!LINE:~20!
    robocopy /s /e "!LINE!" "!TRGT!\!LINE:~20!" >NUL 2>&1
  )
)
goto :EOF

这就是我打电话的方式,

call :_Kopya "C:\" "123:125" "124:130" "125"

这意味着将文件编号从123复制到125,从124复制到130125

它工作正常,但我想解决一个问题。当我调用此函数的方式时,我显示其复制文件编号124 2次,文件编号125 3次。我该如何解决这个问题?

PS1: %MURL%是一个文本文件,包含这些文件的本地地址。它的类似M:\Movies\000y.001y\The.Lord.of.the.Rings.The.Return.of.the.King.(2003){0167260}[00087]

PS2: :_ReadLine这是一个读取特定行并将此行的值添加到LINE变量的函数。

1 个答案:

答案 0 :(得分:1)

@ECHO Off
SETLOCAL
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="

:: Parameters are adirectory range*
:: where range may be a single number or start:finish

SET "directory=%~1"

:loop
SHIFT
IF "%~1"=="" GOTO :eof
FOR /f "tokens=1,2delims=:" %%a IN ("%~1") DO (
 IF "%%b"=="" (CALL :kopythis %%a) ELSE (FOR /L %%c IN (%%a,1,%%b) DO CALL :kopythis %%c)
)
GOTO loop

GOTO :EOF

:kopythis
IF DEFINED $%1 GOTO :EOF
SET $%1=Y
ECHO(COPY whatever with parameters %directory% and %1
GOTO :eof

这应该做你似乎需要的。我将让您了解如何根据提供的参数构建所需的任何复制机制的详细信息。

请注意,使用这种方法,引用参数是可选的,除非第一个参数不包含分隔符,否则第一个参数是可选的。它还允许任意数量的范围参数。