Windows批处理文件以添加了文件名的前缀,以复制其曾祖父母目录



我有这样的文件/目录结构:

C:Resultsname1runstring1output.csv
C:Resultsname2runstring2output.csv
C:Resultsname3runstring3output.csv
...

我想将每个output.csv复制到C:Results,其曾祖父母目录名称添加为文件的前缀,所以我有:

C:Resultsname1output.csv
C:Resultsname2output.csv
C:Resultsname3output.csv

我正在尝试使用下面发布的批处理代码,但它不太满意。
(我试图通过其他在线搜索将其拼凑在一起。)

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /A:D /S /B "C:Results*"') do (
    for %%y in ("%%a*.csv") do (
        call :GETPARENTPARENT "%%y" ret
        echo ret=!ret!
        move /Y "%%y" "!ret!"
        pause
    )
)
goto :EOF
:GETPARENTPARENT
set fileP=%1
echo received=%fileP%
for %%a in (%fileP%) do (
    set parent=%%~dpa
    cd !parent!....
    for /r %%a in (*.csv) do for %%b in ("%%~dpa.")
    do ren "%%~a" "%%~nxb%%~xa"
    set gparent=%%~dpa
    cd !gparent!..
    set PPPath=!cd!
    for %%x in ("!PPPath!") do (
        set "%~2=%%~dpnx"
    )
)
goto :EOF

我认为这将有效(确定时删除'echo'):

@echo off
setlocal enabledelayedexpansion
set baseFolder=C:Results
cd /D %baseFolder%
for /D %%D in (*) do (
    for /f "tokens=* delims=" %%A in ('dir /S /B "*.csv"') do (
        set "filename=%%~nxA"
        for /f "tokens=3 delims=" %%G in ("%%A") do set "newname=%baseFolder%%%G!filename!"
        echo move /Y "%%A" "!newname!"
        pause
    )
)

但是,如果有多个子文件夹,最好将更多添加到文件名中,以便它们是唯一的:

@echo off
setlocal enabledelayedexpansion
set baseFolder=C:Results
cd /D %baseFolder%
for /D %%D in (*) do (
    for /f "tokens=* delims=" %%A in ('dir /S /B "*.csv"') do (
        set "filename=%%~nxA"
        for /f "tokens=3,4,5 delims=" %%G in ("%%A") do set "newname=%baseFolder%%%G%%H%%I!filename!"
        echo move /Y "%%A" "!newname!"
        pause
    )
)

似乎只想找到*.csv文件和copy(但是您的脚本使用move,如果是的话,只需将上述copy替换为move

1命令行和只需搜索磁盘

msr -l -rp C:Results -f ".csv$" -PAC | msr -it "(.*?Results\[^\]+).*?([^\]+)$" -o "copy $0 $1$2" -X

上面的命令行:递归查找*.csv文件,然后生成复制命令行并执行(-X

  • 删除-X如果您只想预览命令行
  • 添加-PAC(例如-X -PAC-XPAC-P -A -C -X等)以隐藏其他信息。

msr.exe是我的开放project中的文件/管道/文本处理(搜索/替换)https://github.com/qualiu/qualiu/msr tools目录,带有cross-platform的单个exe(约1.6mb,无依赖关系)版本。诸如内置用法之类的文档:https://qualiu.github.io/msr/usage-by-running/msr-windows.html

最新更新