我正在编写批处理脚本,如果位置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
答案 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")
)