0

好的,我需要一个执行以下操作的批处理文件,而在我的一生中,我似乎无法让它工作。

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

因此,如果存在以下情况:

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

输出将类似于:

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

这可能吗?

4

1 回答 1

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,这应该足以防止所有类似的文件名问题。

于 2012-11-06T16:38:42.140 回答