【问题标题】:Copy files and output the target path of the overriden files复制文件并输出覆盖文件的目标路径
【发布时间】:2016-01-11 16:35:54
【问题描述】:

我想编写一个批处理,将给定源路径中的所有文件复制到给定输出路径,并绘制实际更改的文件的目标路径。 XCOPY 几乎就是这样做的。它绘制源路径。

我想使用 PowerShell 会更容易,但我宁愿将它保存在 bat 文件中。

【问题讨论】:

  • 您要专门“更改”还是“更改或创建”?
  • o-o 方法 &c 被覆盖,文件被覆盖。

标签: batch-file xcopy


【解决方案1】:

扩展 Sumit 对 /F 选项的建议 - 您可以使用 FOR /F 仅解析目标文件。不需要批处理脚本。它可以是交互式命令行上的单行。

for /f "delims=> tokens=2" %A in ('xcopy /f "someSourcePath\*.txt" "someDestinationPath"') do @echo %A

以上内容将在每行输出中包含一个不需要的前导空格。如果需要,您可以使用额外的 FOR /F 来删除前导空格。

for /f "delims=> tokens=2" %A in ('xcopy /f "someSourcePath\*.txt" "someDestinationPath"') do @for /f "tokens=* delims= " %B in ("%A") do @echo %B

不管怎样,最后的文件数也会被删除。

如果将命令放在批处理脚本中,则将所有 % 加倍为 %%。

如果您有我的JREPL.BAT regular expression text processing utility,解决方案会更简单——这是一个纯脚本实用程序(混合 JScript/batch),可以在 XP 以后的任何 Windows 机器上本地运行。

xcopy /F "someSourcePath\*.txt" "someDestinationPath" | jrepl "> (.*)" $1 /jmatch

如果您想在最后保留文件数,那么您可以使用更简单的变体

xcopy /F "someSourcePath\*.txt" "someDestinationPath" | jrepl "^.*> " ""

【讨论】:

    【解决方案2】:

    xcopy中的F开关可以打印源路径和新目标路径

    考虑这个例子

    xcopy * DRIVE-LETTER:\New\ /F
    

    会以这种格式输出

    F:\OLD-FOLDER\DSCN.JPG -> F:\New\DSCN.JPG
    F:\OLD-FOLDER\DSCN1.JPG -> F:\New\DSCN1.JPG
    

    【讨论】:

    • 有什么办法只获取目标路径?也许将它传递给另一个命令?
    • 检查 dbenham 的 answer 以获得自定义输出。
    【解决方案3】:

    这个脚本有两个参数:源目录和目标目录 这是一个功能示例。 (您需要自定义输出以满足您的需要。)脚本不检查错误。您可能(或可能不)希望这样做。

    @SETLOCAL ENABLEDELAYEDEXPANSION
    @ECHO OFF
    
    REM
    
    SET "SRC_PATH=%~1"
    SET "DST_PATH=%~2"
    
    MKDIR "%DST_PATH%"
    
    REM  Copy the files
    FOR %%f IN (%SRC_PATH%\*.*) DO (
        SET "SRC_FILE=%%~f"
        SET "DST_FILE=%DST_PATH%\%%~nxf"
    
        @ECHO SOURCE FILE: !SRC_FILE!
        @ECHO DEST FILE  : !DST_FILE!
        COPY "!SRC_FILE!" "!DST_FILE!"
    )
    
    REM  Recursively descend into the subdirectories
    FOR /D %%d IN (%SRC_PATH%\*.*) DO (
        SET "SRC_SUBDIR=%%~d"
        SET "DST_SUBDIR=%DST_PATH%\%%~nxd"
    
        @ECHO SOURCE DIR: !SRC_SUBDIR!
        @ECHO DEST DIR  : !DST_SUBDIR!
        cmd /c %~s0 "!SRC_SUBDIR!" "!DST_SUBDIR!"
    )
    

    更改 ECHO 语句以执行您需要的操作。

    【讨论】:

    • 这可能无法处理隐藏目录。
    • 另外,您必须处理是否复制文件的决定。 copy、xcopy 和 robocopy 都不是用来处理选择性复制单个文件的。
    猜你喜欢
    • 2011-05-19
    • 2022-01-04
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多