搜索然后复制到位置 - 如果退出则重命名

时间:2012-11-06 15:30:59

标签: search batch-file copy dos rename

好的我需要一个批处理文件,它可以完成以下操作,但就我而言,我似乎无法让它工作。

  1. 在整个C:\驱动器中搜索所有 *.PST 文件
  2. 将这些文件复制到网络驱动器位置( j:\@PCBackup\PST
  3. 如果存在多个具有相同名称的文件,请重命名而不是覆盖
  4. 如果存在以下内容:

    c:\archive.pst
    c:\user\archive.pst
    

    输出类似于:

    :\@PCBackup\PST\archive1.pst
    :\@PCBackup\PST\archive2.pst
    

    这可能吗?

1 个答案:

答案 0 :(得分:0)

可以按照以下方式完成:

@echo off

FOR /F "usebackq delims=;" %%I IN (`dir C:\*.pst /s /b`) DO (
    IF NOT EXIST "j:\@PCBackup\PST\%%~nxI" (
        CALL :COPYFILE "%%I"
    ) ELSE (
        CALL :RENAME "%%I"
    )
)

GOTO :EOF

:COPYFILE
COPY "%1" "j:\@PCBackup\PST"
GOTO :EOF

:RENAME
FOR /L %%N IN (1, 1, 1000) DO (
    IF NOT EXIST "j:\@PCBackup\PST\%~n1%%N%~x1" (
        COPY "%1" "j:\@PCBackup\PST\%~n1%%N%~x1"
        GOTO :EOF
    )
)

请注意,在最后一个FOR循环中,我正在尝试查找发生文件名冲突时要使用的下一个文件名。我已将最大计数器值设置为1000,这应该足以防止所有类似的文件名问题。