Batch file 批处理文件以循环遍历目录并基于每个文件创建变量

Batch file 批处理文件以循环遍历目录并基于每个文件创建变量,batch-file,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%

我有一个包含服务器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
这很好…但是,我想做的是围绕它创建另一个循环,为目录中的每个文件创建一个变量,并将其传递到上面的代码中,而不是像上面所示手动更改单个文件的“SET file”

沿着……的路线的东西

@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

)

显然这是错误的,所以请提供任何想法/帮助?

尚未测试,但可能有一个正确方向的提示:

@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\u 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命令缺少编辑:/b开关

@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
-不需要的调用]

非常好:)第一个非常好用,非常感谢:)第二个只是在生成的文本文件中重复“AppMedia是AppMedia”?啊。。。第一个DIR命令中缺少/b开关。。。不知道是否都是。。。未尝试,仅硬编码。:)我将更正脚本,请尝试:)我对循环的文件操作不太熟悉。(例如获取时间戳)或者可能第三个for循环不能有引号…:/好主意!:)这也很管用,似乎也运行得更快:)再次感谢。哦,最后一件事-我注意到它运行在源目录“Server\u Update”中任何子目录中的任何文件上…我如何避免这种情况?删除第一个for循环中的/s。这是针对子目录的。也许现在必须更改“%%~nxF”。或者,如果您总是使用相同的文件扩展名,只需将“Prod Apps\Server\u Update”更改为“Prod Apps\Server\u Update\*.fileextension”-这也将在子目录中循环,如果找到具有给定文件扩展名的文件,则继续。感谢您的帮助…无法使其工作,我不确定将源目录放在何处读取?我的“符码”显然很弱。。。