Batch file 脚本将文件复制到另一个文件夹,如果文件名相同,请重命名它

Batch file 脚本将文件复制到另一个文件夹,如果文件名相同,请重命名它,batch-file,copy,Batch File,Copy,我有这个脚本,工作得很好,但是,有些用户有一些同名的.pst,我不想覆盖它,我需要的是,我如何在过程中重命名文件,或之前。。在这个过程之后。多谢各位 rem Copia de Archivos PST a Carpeta FronMig***** @echo off taskkill /IM outlook.exe if not exist c:\FronMig mkdir c:\FronMig if not exist c:\FronMig\pst mkdir c:\FronMig\p

我有这个脚本,工作得很好,但是,有些用户有一些同名的.pst,我不想覆盖它,我需要的是,我如何在过程中重命名文件,或之前。。在这个过程之后。多谢各位

rem Copia de Archivos PST a Carpeta FronMig*****

@echo off

taskkill /IM outlook.exe

if not exist c:\FronMig mkdir c:\FronMig

if not exist c:\FronMig\pst mkdir c:\FronMig\pst

c:

dir /b c:\*.pst /s > c:\FronMig\pathdata.txt

pause


for /f "tokens=1 delims=" %%a in (c:\FronMig\pathdata.txt) do (copy "%%a" c:\FronMig\pst) 


start outlook.exe

pause 

这将检查文件config.txt是否存在,如果存在,则会将文件复制到另一个文件夹并同时重命名

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

您需要采取预防措施:

  • 不处理目标文件夹
  • 正确处理已编号的文件
下面的批处理在括号(1)中附加了一个类似浏览器的编号
使用不同的文件夹和扩展名进行测试。
如果文件名已经存在,则会递归调用sub
: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%"

您如何知道哪个
.pst
来自哪个用户?哪个
.pst
来自哪个位置?在重命名
.pst
文件之前,它的名称是什么?使用dir/b c:*.pst/s>c:\FronMig\pathdata.txt pathdata.txt日志ideia是。。。例如,在C:\temp上创建test.pst(第一个文件),并将其移动到C:\temp02上的C:\pst创建test.pst(顺序第二个),然后将其移动到C:\pst,而不覆盖C:\pst中的所有test.pst。我需要找到一种方法来按顺序重命名第二个文件。谢谢Wojtek,问题是我想在没有任何用户交互的情况下这样做。这个想法是。。。例如,在C:\temp上创建test.pst(第一个文件),并将其移动到C:\temp02上的C:\pst创建test.pst(顺序第二个),然后将其移动到C:\pst,而不覆盖C:\pst中的所有test.pst。我需要找到一种方法来重命名sequenceAh中的第二个文件,但在运行脚本之前无法知道.pst文件的名称。或者,我如何按顺序复制和重命名文件,如。。太平洋标准时间。。file02.pst…感谢您的帮助,这是C:\pst\vitor的结果。retta@assuranceit.com.br.pst1个文件已复制。C:\Users\Retta\Documents\Arquivos do Outlook\vitor。retta@assuranceit.com.br.pst尝试:复制“C:\Users\Retta\Documents\Arquivos do Outlook\vitor”。retta@assuranceit.com.br.pst“”c:\FronMig\pst\vitor。retta@assuranceit.com.br(1) .pst“'”c:\FronMig\pst\vitor。retta@assuranceit.com.br(1) .pst“”未被识别为内部命令或外部命令,一种可操作的程序或批处理文件。按任意键继续。同样,只有一个文件被复制,并且在脚本没有创建pathdata.txt的那一刻它就没有被重命名。你能再次帮助我吗?谢谢你这么多。在测试时,我在
>
前面添加了Rem,只需将其删除即可。正在调查另一个问题。更改批次。如果你有错误,请将它们附加到问题的末尾。感谢你的帮助,现在没有错误,但是没有任何更改。脚本会在两个不同的文件夹中找到2个同名的.pst文件。脚本会将第一个.pst复制到c:\FronMig\pst,但在复制第二个.pst时,脚本仍会覆盖第一个.pst。谢谢