批处理脚本:For Loop with Two命令

时间:2016-06-03 15:08:58

标签: batch-file for-loop search

我一直在处理一个批处理脚本来遍历一个文件夹,并生成一个按上次修改时间排序的文件列表。现在它按预期工作,但它不搜索子文件夹,下面是我的代码:

echo Last executed on %date% at %time% > report.csv
echo. >> report.csv
FOR /F "TOKENS=1-4,* SKIP=4" %%a IN ('DIR /O-D /TW') DO (
    IF exist %%e (
        IF NOT %%e==.. (
            IF NOT %%e==. (
                echo %%e >> report.csv
                echo %%a %%b >> report.csv
)
)
)
)
:Start
   CScript modifyexcelGood.vbs
:End
goto :eof

忽略那些if语句,它们只是为了防止我得到错误的文件名。我知道/ R命令用于搜索子文件夹,但似乎我不能同时使用/ R和/ F,或者我错了?我觉得有一个简单的解决方案,但我找不到它。

由于

修改 为了澄清,批处理文件按修改日期对目录中的所有文件进行排序,并抛出在Excel工作表中找到的每个文件的文件名和日期(按排序顺序)。然后它启动一个VB脚本,编辑工作表使其看起来不错。 Vbs和bat脚本必须在一起,但它们应该在任何目录中使用。它们旨在帮助清理包含旧文件的大型目录。 (一旦我知道100%工作,它最终会删除旧文件。)

我可以将它们放在任何目录中并且工作正常,我只需要它来点击任何子文件夹中的文件。

那么如何编辑我的代码以使其检查%% e是否是一个目录,如果是,那么也运行该目录上的循环?

由于

2 个答案:

答案 0 :(得分:0)

我担心您的要求不明确。但是,下面的行列出了当前文件夹中的文件和下面的所有子文件夹,每个文件一行,并按上次修改日期排序所有文件,首先列出较新的文件。

(for /F "delims=" %%a in ('dir /T:W /S /B') do echo %%~Ta %%a) | sort /R > report.csv

如果您对dir命令切换(例如/B)有任何疑问,请键入dir /?

答案 1 :(得分:0)

要按日期对文件进行真正排序,您可以暂时将短日期格式修改为yyyy.MM.dd

@echo off
setlocal EnableDelayedExpansion
REM get current short date format:
for /f "tokens=2,*" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate') do set orig-format=%%b
REM set short format to yyyy.MM.dd:
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy.MM.dd" /f >nul

(for /F "delims=" %%a in ('dir /a-d /T:W /S /B') do @echo %%~Ta %%a)|sort /r >report.csv    

REM set short date format back to original settings:
reg add "HKCU\Control Panel\International" /v sShortDate /d "%orig-format%" /f >nul

我从Aacini那里偷走了这条线,但有以下变化:
- 将/a-d添加到dir以排除文件夹
- 在@前添加了echo,删除了生成的文件中的大量空行 并对其周围的日期格式进行必要的更改。