由于有大量线程解决'使用批处理文件返回文件修改日期'(或删除早于等的文件) - 让我先说明我的问题。
我正在寻找创建批次(不是PowerShell等),它将返回给定 UNC 路径和文件名的特定文件的最后修改日期。
我已经看过其他线程上的一些潜在解决方案,但我遇到了许多独特的问题。第一个也是最明显的解决方案是批量生成“ForFiles”命令。例如:
set myPath=\\myUNCpath
set myFile=myFileName.csv
forfiles /p "%myPath%" /m %myFile% /c "GoTo OldFile" /d -6
因此,如果文件比我想要的旧 - 请跳转到我的批次的特定部分。但是,这会产生错误:
错误:不支持UNC路径(\ machine \ share)。
但是,由于使用UNC,这个cmd将无法工作(这一点非常重要,因为系统的任务调度程序会调用此批处理)。所以似乎'ForFiles'cmd已经出局了。
我可以更多地讨论这样做,但只是检索文件的最后修改日期(批处理将返回一个字符串)。我可以将字符串截断为必要的日期值,转换为日期,然后与当前日期进行比较。为此,我还研究了使用for循环,例如:
set myFile=\\myUNCpath\myFileName.csv
echo %myFile%
pause
FOR %%f IN (%myFile%) DO SET myFileDate=%%~tf
echo %myFileDate%
pause
虽然我的第一个调试echo提供了正确的完整文件名,但我的第二个调试只返回 ECHO关闭。,它告诉我它要么找不到文件要么for循环没有返回档案日期。不知道为什么。
我还尝试对此进行细微更改,以便仔细检查环境变量语法:
FOR %%f IN (%myFile%) DO SET myFileDate=%%~ta
返回%ta
最后:
FOR %%f IN (%myFile%) DO SET myFileDate=%~ta
如果没有额外的'%',只会崩溃批次。
我现在真的很茫然。因此,非常感谢任何提示或指导!
答案 0 :(得分:1)
可以使用PushD
使用forfiles到UNC路径只需在UNC路径中回显x之前的文件,只需使用
即可PushD %myPath% &&(
forfiles -s -m %myFile% -d -6 -c "cmd /c echo /q @file
) & PopD
以下是使用示例如何在UNC路径中找到比x更早的文件时使用goto的一种方法。
if not exist "C:\temp" mkdir C:\temp
if not exist "C:\temp\test.txt" echo.>"c:\temp\test.txt"
break>"c:\temp\test.txt"
set myPath=\\myUNCpath
set myFile=myFileName.csv
PushD %myPath% &&(
forfiles -s -m %myFile% -d -6 -c "cmd /c echo /q @file >> c:\temp\test.txt"
) & PopD
for /f %%i in ("C:\temp\test.txt") do set size=%%~zi
if %size% gtr 0 goto next
:next
答案 1 :(得分:0)
非常感谢@Squashman和@MadsTheMan的帮助。幸运的是,这批终于是我可以带给我的老板使用PowerShell切换到至少的一段代码!
无论如何,对于那些寻找获得UNC路径文件修改日期的最佳方式的人来说,这就是我想出的。与其他线程没有什么不同(感谢Squashman在for循环中发现我丢失的“”)。
set myFile=\\myUNCpath\myFileName.ext
FOR %%f IN ("%myFile%") DO SET myFileDate=%%~tf
::And if you'd like to try to do long winded calculations you can further break the dates down via...
set fileMonth=%myFileDate:~0,2%
set fileDay=%myFileDate:~3,2%
set fileYear=%myFileDate:~6,4%
set currentDate=%date%
set currentMonth=%currentDate:~4,2%
set currentDay=%currentDate:~7,2%
set currentYear=%currentDate:~10,4%
计划是将字符串转换为整数,然后使用switch-case块来确定日期之间的差异是否可以接受......等等等等。
长话短说 - 如果你只限于批量(而不是创建辅助文件 - 例如csv或MadsTheMan建议的临时文件)你的手上会有一个非常长的脚本,但仍然可能有瑕疵(如闰年等,除非你添加更多代码),当你可以在其他程序中使用一行代码进行比较计算时。