批处理文件循环遍历目录并根据每个文件创建变量

时间:2014-11-06 11:59:35

标签: batch-file

我有一个文本文件,其中包含服务器IP地址列表,下面的代码(我已经从其他编码中一起报废)循环通过它,并为每个服务器带回一个指定文件的修改日期。列表...

@ECHO On
SETLOCAL
FOR /f %%a IN (C:\Scripts\Servers.txt) DO (
 CALL :getmod %%a
)

GOTO :EOF

:getmod
SET Server=%1
SET File=Abs_Client.exe

FOR %%i IN ("\\%Server%\C$\Com_Dir\%File%") DO SET modif_time=%%~ti
Echo %Server% %File% %modif_time% >> "C:\Scripts\Server_App_Mod_date.txt"

GOTO :eof

这很有用......但是,我想做的是在它周围创建另一个循环,为目录中的每个文件创建一个变量,并将其传递到上面的代码中,而不必手动更改'设置文件'如上所示,单个文件。

有些东西;

@ECHO On
SETLOCAL

FOR /D %VAR IN ("\\Network_Location\AppMedia\App Source Files\Prod Apps\Server_Update") DO (

FOR /f %%a IN (C:\Scripts\Servers.txt) DO (
 CALL :getmod %%a
)

GOTO :EOF

:getmod
SET Server=%1
SET File=%VAR

FOR %%i IN ("\\%Server%\C$\Com_Dir\%File%") DO SET modif_time=%%~ti
Echo %Server% %File% %modif_time% >> "C:\Scripts\Server_App_Mod_date.txt"

GOTO :eof

)

显然这是错的,所以任何想法/帮助都好吗?

2 个答案:

答案 0 :(得分:1)

没有尝试,但可能暗示正确的方向:

@ECHO ON
SETLOCAL 

FOR /F "TOKENS=*" %%F IN ('DIR "\\Network_Location\AppMedia\App Source Files\Prod Apps\Server_Update" /s /b /a:-d') DO (
  FOR /F %%A IN (C:\Scripts\Servers.txt) DO (
    CALL :getmod %%A "%%~nxF"
  )
)

GOTO :EOF

:getmod
SET Server=%1
SET "tmpFile=%~2"

FOR %%I IN ("\\%Server%\C$\Com_Dir\%tmpFile%") DO ECHO %Server% %tmpFile% %%~tI >> "C:\Scripts\Server_App_Mod_date.txt"
GOTO :EOF

据我所知,FOR / D仅针对directorys执行,如果我理解你的问题,你有" Prod Apps \ Server_Update"中的文件,你想拥有文件日期/来自目标服务器的时间......对吗?

编辑:

也许这也有效:

FOR /F "TOKENS=*" %%F IN ('DIR "\\Network_Location\AppMedia\App Source Files\Prod Apps\Server_Update" /s /b /a:-d') DO (
  FOR /F %%A IN (C:\Scripts\Servers.txt) DO (
    FOR %%X IN ("\\%%A\C$\Com_Dir\%%~nxF") DO ECHO %%A %%~nxF %%~tX >> "C:\Scripts\Server_App_Mod_date.txt"
  )
)

没有:getmod

编辑:第二个建议中的第一个DIR-Command缺少/ b-switch

答案 1 :(得分:0)

@ECHO On
SETLOCAL
FOR /f %%a IN (C:\Scripts\Servers.txt) DO (
 FOR /f "delims=" %%i IN ('dir /b/a-d "\\%%a\C$\Com_Dir\*"') DO Echo %%a %%i %%~ti >> "C:\Scripts\Server_App_Mod_date.txt"
)
GOTO :EOF

应该工作,IIUC。无法测试,我害怕...

[编辑 - 已移除对getmod的通话 - 不需要]