2014-01-17 82 views
0

我的文件夹\文件结构如下:日志日期

C:\Folder1\Folder2\CustomerFolder\Files.7z 

我设置FTP服务器,所以结构很奇怪。无论如何,在每个客户文件夹中都有大约10个文件。我想运行一个批处理文件来创建一个文本文件,该文件将进入每个客户文件夹并返回最近的文件日期(不必关心名称,需要知道文件何时创建)。该文本文件将显示如下:

CustomerFolder1 - 1/1/2014 
CustomerFolder2 - 12/3/2013 

这里是我到目前为止,该FOR/F是我拦住:

for /d %%D in ("C:\ftp\localuser\*") do (
    cd /d "%%D" 
    for /f 
+0

请把你的根文件夹结构。 –

+0

C:\ ftp \ localuser \ customer1 –

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=u:\ftp\localuser" 
SET "spaces=        " 
(
for /d %%D in ("%sourcedir%\*") do (
    pushd "%%D" 
    SET "latest=" 
    FOR /f "delims=" %%a IN ('dir /b /a-d /o:-d') DO IF NOT DEFINED latest (
    SET latest=Y 
    FOR /f "delims=" %%q IN ("%%D") DO SET cdir=%%~nxq%spaces% 
    FOR /f "tokens=1" %%t IN ("%%~ta") DO CALL ECHO %%cdir:~0,20%% - %%t 
) 
    popd 
) 
)>newfile.txt 

TYPE newfile.txt 

GOTO :EOF 

你需要痒痒目录名的长度,以满足您最大的和可能的日期 - 如果它显示DAYNAME,然后更改tokens=1tokens=2

我也改变了源目录名称以适应我的系统。你需要解决这个问题以适应你的需求。

1

我创造了一些代码,但它可能是您你需要在你的电脑上使用日期/时间格式。您也可以更改显示信息(添加更多回波线)。

@echo off 
SetLocal enabledelayedexpansion 
set "ftpuserdir=C:\ftp\localuser" 
for /d %%D in (%ftpuserdir%\*) do (
    echo.|set /p some=%%D 
    set found=0 
    for /f "tokens=*" %%a in ('dir /TC /O-D /B /A-D "%%D\*" 2^>nul') do (
     if !found!==0 (
      for /f "tokens=*" %%z in ('dir "%%D\%%a" 2^>nul') do (
       echo %%z | find "%%a">nul 
       if !errorlevel!==0 (
        rem echo Last file=%%z 
        for /f "tokens=1,2,3,*" %%s in ('echo %%z') do (
          echo - %%s_%%t_%%u 
        ) 
        echo. 
        set found=1 
       ) 
      ) 
     ) 
    ) 
) 

如果您对代码有任何疑问,请让我知道。我知道这很复杂,但我没有设法做得更简单。

+0

真棒..在结果行上做了一点调整,但完美..谢谢! –

0

这里是修改后的代码:

@回响 SETLOCAL enabledelayedexpansion 组 “ftpuserdir = C:\ csftp \ localuser” 为/ d %% d在(%ftpuserdir%*)DO( 回波。'set/p some = %% D set found = 0 for/f“tokens = ”%% a in('dir/TC/OD/B/AD“%% D *”2 ^> nul' )do( if!found!== 0( for/f“tokens =”%% z in('dir“%% D \ %% a”2 ^> nul')do( echo %% z |找到“%% a”> nul if!errorlevel!== 0( rem echo last file = %% z for/f“tokens = 1,2,3,*”%% s in('echo %% z')do( echo %% D %% s >> 1。 TXT

   ) 
       :: echo. 
       set found=1 
      ) 
     ) 
    ) 
) 

这里是屏幕结果(我不能发布一个PIC还..) C:\ csftp \ localuser \ cs1234C:\ csftp \ localuser \ cs34234C:\ csftp \ localuser \ cs4387

它一直会这样的...

和文本文件不立st一切,有点跳过..在C:\ csftp \ localuser文件夹我有很多100个子文件夹,我需要这个文件去通过。