移动文件并重命名重复项

时间:2016-09-08 15:44:45

标签: batch-file

我需要将文件从C:\users\users name\documents\sound recordings\目录移动到我们的网络驱动器P:\transcription\users name\。如果文件存在于P:\transcription\users name目录中,我需要自动重命名文件。我是一个新手,只能编写简单的批处理文件,而我编写的文件移动文件将覆盖目录中同名的文件。谢谢

1 个答案:

答案 0 :(得分:0)

这可能有所帮助。

它将显示要使用结果文件名移动的文件。如果它适用于您,请删除行echo !src!%%~nxa - !dst!!file!并从rem move !src!%%a !dst!!file! >nul

中删除 rem 关键字
@echo off

SetLocal EnableDelayedExpansion

set "wildcard=*.*" & rem files to search for
set "skipUsers=Guest Administrator" & rem users not to copy files

:: get users
set/a offset=0
for /F "skip=2 tokens=2 delims=," %%1 in ('wmic useraccount get name^,sid /format:csv') do (
  set/a offset+=1, USER_MAX=offset
  set "USER[!offset!]=%%1"
)

for /L %%i in (1,1,%USER_MAX%) do (
  set/a skip=0, numFiles=0
  set "currentUser=!USER[%%i]!"
  set "src=C:\!currentUser!\documents\sound recordings\"
  set "dst=P:\transcription\!currentUser!\"

  rem get time stamp
  for /f "tokens=2 delims==" %%A in ('wmic os get localdatetime /value') do set "Tm=%%A"
  set "timeStamp=!Tm:~0,4!!Tm:~4,2!!Tm:~6,2!_!Tm:~8,2!!Tm:~10,2!!Tm:~12,2!"

  for %%a in (%skipUsers%) do if /I "!currentUser!" equ "%%a" set/a skip=1
  if !skip! neq 0 ( rem avoid copying blacklist users
    echo !currentUser!: Skipping
  ) else (
    <nul set/P="!currentUser!: Moving files"
    pushd !src!

    dir /ad !dst! >NUL 2>NUL || md !dst! & rem create destination folder if it doesn't exist

    for %%a in (%wildcard%) do (
      set "file=%%~nxa"
      if exist "!dst!!file!" set "file=%%~na_!timeStamp!%%~xa" & rem rem if file exist, append a time stamp suffix to avoid overwriting
      echo !src!%%~nxa - !dst!!file!
      rem move !src!%%~nxa !dst!!file! >nul
      set/a numFiles+=1
    )
    echo : !numfiles! files moved
    popd
  )
)

EndLocal
exit/B
相关问题