SCRIPT将文件复制到另一个文件夹,如果名称文件具有相同的名称,请重命名

时间:2017-05-18 15:15:58

标签: batch-file copy

我有一个非常好用的脚本,但是,有些用户有一些同名的.pst,我不想覆盖它,我需要的是,如何在进程中或之前重命名文件。经过这个过程。谢谢

package system

config system 'system'
    option hostname 'test-system'

package network

config interface 'lan'
    option ifname 'eth0'
    option proto 'none'

package another_package

config etc 'etc'
    option name 'val'

2 个答案:

答案 0 :(得分:1)

您需要采取预防措施:

  • 不处理目标文件夹
  • 正确处理已编号的文件。

以下批次在括号(1)中添加类似数字的资源管理器 测试了不同的文件夹和扩展名。
如果文件名已经存在,则递归调用子:CopyInc,递增直到新名称空闲。

@echo off
taskkill /IM outlook.exe
Set "Dest=c:\FronMig\pst"
Set "Base=C:\*.pst"
Mkdir "%Dest%" 2>NUL

For /f "delims=" %%P in (
  'dir /b/s/a-d "%Base%" ^|Findstr /IBLV /C:"%Dest%" '
) Do (echo %%P
  Set "Cnt=0"
  Set "Name="
  For /f "tokens=1,2 delims=()" %%B in ("%%~nP") Do Set Cnt=%%C&Set "Name=%%B"
  rem >> "c:\FronMig\pathdata.txt" Echo:%%~fP
  Call :CopyInc "%%P" "%Dest%\%%~nxP"
) 
start outlook.exe
pause 
Goto :Eof

:CopyInc
If not exist %2 (
    Copy %1 %2 &&Echo Copied %1 %2
    Goto :Eof
) else (
    Echo Already present: %2
)
Set /A Cnt+=1
If not defined Name Set "Name=%~n2 "
Set "NewName=%~dp2%Name%(%Cnt%)%~x2"
Echo Try: copy %1 "%NewName%"
Call :CopyInc "%NewName%"

答案 1 :(得分:0)

这将检查文件config.txt是否退出,如果它将文件复制到另一个文件夹并同时重命名它。

IF EXIST "C:\Test\config.txt"(copy /y C:\temp\config.pst C:\Somepath\config_copied.txt)