批处理脚本文件以复制和重命名文件

时间:2018-11-07 17:39:22

标签: windows batch-file cmd

我正在编写批处理脚本,如果位置B中已经存在相同的文件,我将使用该脚本将位置A的源文件重命名为位置A的文件。

目前,我正在堆栈中使用另一个主题的代码段,但是它不适用于子文件夹中的文件,有人可以用下面的代码为我提供帮助,以便它同时适用于两个位置的所有文件和子目录吗?非常感谢!

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET sourcedir="D:\TEST\FROM"
SET destdir="D:\TEST\TO"
SET /a count=0
for %%c in (%sourcedir%\*.*) do (
 CALL :select
 ECHO copy "%%c" "%destdir%\%%~nc_!count!%%~xc" /s
)

GOTO :EOF

:select
SET /a count+=1
IF EXIST "%destdir%\%%c" GOTO select
GOTO :eof

2 个答案:

答案 0 :(得分:1)

将您的for循环替换为以下for循环:

for /R "%sourcedir%" %%c in (*.*) do (what you like)

此外,为什么还要下面的代码?

copy "%%c" "%destdir%\%%~nc_!count!%%~xc" /s

copy "%%c" %destdir%

通常,您可以写:

@ECHO OFF
SET sourcedir="D:\TEST\FROM"
SET destdir="D:\TEST\TO"
:: SET /a count=0
for /R "%sourcedir%" %%c in (*.*) do (
 :: SET /a count+=1
 IF NOT EXIST "%destdir%\%%c" (
    echo copy "%%c" %destdir%
 )
)

希望您对此表示满意,可能是Windows batch file with loop through subfolders的复本

答案 1 :(得分:0)

按照我目前所能达到的目标进行共享,可以满足我的需求,但是对于子文件夹仍然表现不佳:

@ECHO OFF
SET "sourcedir= "
SET "destdir= "
SET "HH=%TIME:~0,2%"
SET "MM=%TIME:~3,2%"
SET "SS=%TIME:~6,2%"
SET "_Time=%HH%%MM%%SS%"

FOR /R "%sourcedir%" %%G IN (*.*) DO (
 IF EXIST "%destdir%\%%~nG%%~xG" (
    COPY /V /Z "%%G" "%destdir%\%%~nG_duplicate_%_Time%%%~xG"
 ) ELSE (
    COPY /V /Z "%%G"  "%destdir%\%%~nG%%~xG")
)