如何使用 Windows 命令行递归复制和重命名同一目录中的文件

如何使用 Windows 命令行递归复制和重命名同一目录中的文件

如果可能的话,我想避免使用批处理文件。

基于这个答案关于递归重命名或移动,我提出了以下命令(用于将所有名为 web.foo.config 的文件复制到 web.config在同一目录中):

for /r %x in (*web.foo.config) do copy /y "%x" web.config

但是,这只会导致创建并覆盖每个 web.foo.config 实例。\web.config,而不是找到的路径中的 web.config。因此我尝试:

for /r %x in (*web.foo.config) do (SET y=%x:foo.config=config% && CALL copy /y "%x" "%y")

这会产生一个不良影响,即会将文件复制到名为“%y”的文件中。有没有办法%y在设置后强制进行评估……或者有更好的方法?

答案1

将所有名为 web.foo.config 的文件复制到同一目录中的 web.config

由于您不想使用批处理文件执行此操作,因此您可以从提升的命令提示符中使用以下命令来完成此操作。

这假定您从命令提示符运行命令时所在的目录是通过递归执行找到的文件的复制命令来遍历的目录。

*我在文件名开头保留了星号 ( ) web.foo.config,但如果确实需要查找具有该命名模式的文件,则可以在需要的地方添加它。

使用复制示例

FOR /F "TOKENS=*" %F IN ('DIR /B /S web.foo.config') DO COPY /Y "%~F" "%~DPFweb.config"

使用 Xcopy 示例

FOR /F "TOKENS=*" %F IN ('DIR /B /S web.foo.config') DO ECHO F | XCOPY /Y /F "%~F" "%~DPFweb.config"

更多资源

  • 为/F
  • FOR /?

    此外,FOR 变量引用的替换功能也得到了增强。现在您可以使用以下可选语法:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string
    

答案2

使用带有 /S 开关的 xcopy 以递归方式复制所有文件和目录。

在任何 Windows 命令提示符下:

xcopy *.* \destination /S

快捷方便。

相关内容