使用源文件夹作为名称将文件从源目录树复制到新位置

时间:2014-03-20 23:44:17

标签: windows batch-file

我有一个文件和文件夹目录,例如:

\Parent
|-\Child
||-\Test
|||-\Content
|||-targetfile.ext.out
|-\AnotherChild
||-anothertargetfile.ext.out

我想将具有.ext.out的任何文件复制到另一个目录,但是使用目录结构重命名它。

EG:targetfile.ext.out将被复制到名为“ParentChildTestContent.ext.out”的已定义目录中,而“anothertargetfile.ext.out”将被复制到与“AnotherChild.ext.out”相同的已定义目录中”。可以删除.out以简化脚本。

3 个答案:

答案 0 :(得分:1)

只要您的文件夹结构不超过22个级别,这应该可以正常工作。

由于您尚未指出“source”文件夹是否为驱动器的根目录,因此假设您需要的最终名称仅包含“source”及其下方的文件夹,则使用pushd和{{1检索所需文件的相对路径,在反斜杠上拆分检索到的列表,并将部分连接到最终文件名。

xcopy

该脚本仅回显所需的@echo off setlocal enableextensions disabledelayedexpansion set "source=d:\temp\k" set "target=c:\somewhere" pushd "%source%" for /d %%w in ("." ) do for /f "tokens=1,* delims=:" %%x in ('xcopy /l /s "*.txt" "%temp%"' ) do for /f "tokens=1-22 delims=\" %%a in ("%%~y" ) do echo copy /y "%source%\%%~y" "%target%\%%~nxw%%a%%b%%c%%d%%e%%f%%g%%h%%i%%j%%k%%l%%m%%n%%o%%p%%q%%r%%s%%t%%u%%v" popd 命令以进行控制。如果输出正确,请删除copy命令。

答案 1 :(得分:0)

我会使用DIR / S / B来浏览目录及其子文件夹,并获得一个易于使用的结果:

@echo off
setlocal ENABLEDELAYEDEXPANSION

set "DEST=.\output"

REM Get complete absolute path for every interesting file
for /f %%a in ('dir /S /B .\Parent\*txt') do (
    REM Process name as desired
    set "newName=%%a"
    set "newName=!newName:\=_!"
    set "newName=!newName:*Parent_=!"

    copy %%a %DEST%\!newName!
)

答案 2 :(得分:0)

此脚本应该是健壮的 - 它使用名为repl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat下载

repl.bat放在与批处理文件相同的文件夹中或放在路径上的文件夹中。

d:\\target更改为您需要的文件夹 - 必须使用双\ 同时更改\parent

该脚本为复制创建一个名为temp.bat.txt的批处理文件,您可以在使用它之前在记事本中对其进行检查。

@echo off
dir /b /s /a-d "\parent\*.ext.out" |repl "..(.*)\\(.*)\\.*\.(.*\..*)" "copy \q$&\q \qd:\\target\\$2.$3\q" x >temp.bat.txt