将目录文件夹更改为所有子文件夹

时间:2014-05-16 19:31:35

标签: batch-file subdirectory

您好我有一个批处理脚本,但我无法解决如何更改扫描目录中所有子文件夹的路径。 换句话说,我不想要 - C:\ Users \ ally \ Desktop \ Documents \ Table \ CSV版本\ 2014 \

而是: C:\ Users \ ally \ Desktop \ Documents \ Table \ CSV版本

因为单独的文件夹中存在大量不同年份的数据。

另外要注意年份文件夹中有月份文件夹,其中有csv文件。

@echo off
setlocal enabledelayedexpansion
set "target=C:\Users\ally\Desktop\Documents\All"
cd /d "C:\Users\ally\Desktop\Documents\Table\CSV versions\2014\"
for /L %%a in (101,1,148) do (
    set num=%%a
    del "%target%\-!num:~-2!.csv" 2>nul
    >"%target%\-!num:~-2!.csv.txt" echo Type,angle,edge,Date,Frame,Sum,Mafe,Comp,Rim,Dose,Ell,Role
)

for %%a in (*.csv) do (
    for /f "skip=1 usebackq delims="  %%b in ("%%a") do (
        for /f "tokens=1,2 delims=-," %%c in ("%%b") do (
           set "line=%%c"
           if /i "!line:~0,2!"=="HH" >> "%target%\-%%d.csv.txt" echo %%b
        )
    )
)
ren "%target%\*.csv.txt" *.
pause

2 个答案:

答案 0 :(得分:1)

要处理All树下的每个文件夹,您可以使用for /d /r循环和pushd/popd来设置当前文件夹。

这假设每个文件夹都包含您要处理的文件。 在数据副本上对此进行测试,并将文件夹更改为指向它。

您似乎正在删除.csv个文件,创建.csv.txt个文件,然后尝试在较低的循环中处理*.csv。应该是*.csv.txt吗?

@echo off
setlocal enabledelayedexpansion
for /d /r "c:\Users\ally\Desktop\Documents\All" %%z in (*) do (
pushd "%%z"

for /L %%a in (101,1,148) do (
    set num=%%a
    del "-!num:~-2!.csv" 2>nul
    >"-!num:~-2!.csv.txt" echo Type,angle,edge,Date,Frame,Sum,Mafe,Comp,Rim,Dose,Ell,Role
)

for %%a in (*.csv) do (
    for /f "skip=1 usebackq delims="  %%b in ("%%a") do (
        for /f "tokens=1,2 delims=-," %%c in ("%%b") do (
           set "line=%%c"
           if /i "!line:~0,2!"=="HH" >> "-%%d.csv.txt" echo %%b
        )
    )
)
ren "*.csv.txt" *.

popd
)
pause

答案 1 :(得分:0)

尝试添加另一个遍历目录树的循环,如果找到csv文件,它将处理它:

@echo off
setlocal enabledelayedexpansion
set "target=C:\Users\ally\Desktop\Documents\All"

for /f "tokens=1* delims=" %%D in ('dir /s /b /o:-n /a:d "C:\Users\ally\Desktop\Documents\Table\CSV versions"') do (
    cd /d "%%~fD"
    if exist *.csv (
        for /L %%a in (101,1,148) do (
            set num=%%a
            del "%target%\-!num:~-2!.csv" 2>nul
            >"%target%\-!num:~-2!.csv.txt" echo Type,angle,edge,Date,Frame,Sum,Mafe,Comp,Rim,Dose,Ell,Role
        )

        for %%a in (*.csv) do (
            for /f "skip=1 usebackq delims="  %%b in ("%%a") do (
                for /f "tokens=1,2 delims=-," %%c in ("%%b") do (
                    set "line=%%c"
                    if /i "!line:~0,2!"=="HH" >> "%target%\-%%d.csv.txt" echo %%b
                )
            )
        )
        ren "%target%\*.csv.txt" *.
    )
)
pause

dir开关的说明:

/s     - Displays files in specified directory and all subdirectories.
/b     - Uses bare format (no heading information or summary).
/o:in  - Lists the files in reverse order
/a:d   - Displays only folders

%%~fD的说明:将%A扩展为完全限定的路径名​​(来自for /?

相关问题