Ответ 1
Измените %
на %%
для использования в пакетном файле, для синтаксиса %~ta
введите call /?
for %a in (MyFile.txt) do set FileDate=%~ta
Я использую следующую команду для получения даты файла. Тем не менее, переменная fileDate
возвращает пустое значение с тех пор, как мы перешли на другой сервер (Windows Server 2003).
FOR /f %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a
Есть ли другой более надежный способ получить дату файла?
Измените %
на %%
для использования в пакетном файле, для синтаксиса %~ta
введите call /?
for %a in (MyFile.txt) do set FileDate=%~ta
Вы можете сделать это
forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"
Это работает для меня на Vista. Некоторые вещи, которые нужно попробовать:
Замените find
на полный путь команды find. find
- это общее имя инструмента. Там найден unix, который сильно отличается от встроенной на Windows. вот так: FOR /f %%a in ('dir ^|%windir%\system32\find.exe /i "myfile.txt"') DO SET fileDate=%%a
проверьте вывод команды в окне cmd.exe. Для этого вам нужно заменить %%%. FOR /f %a in ('dir ^|c:\windows\system32\find.exe /i "myfile.txt"') DO SET fileDate=%a
Это может дать вам некоторые идеи.
Если это отображается как пустое, а затем в командной строке попробуйте следующее:
dir | c:\windows\system32\find.exe /i "myfile.txt"
Это должно показать вам, что вам нужно увидеть.
Если вы все еще не можете понять это, отредактируйте свою запись, чтобы включить то, что вы видите из этих команд, и кто-то вам поможет.
вы можете получить дату изменения файлов, используя также vbscript
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
WScript.Echo objFS.GetFile(strFile).DateLastModified
сохраните выше как mygetdate.vbs и в командной строке
c:\test> cscript //nologo mygetdate.vbs myfile
Какой результат (точно) делает dir myfile.txt
в текущем каталоге? Что произойдет, если вы установите разделители?
FOR /f "tokens=1,2* delims= " %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a
(обратите внимание на пробел после delims=
)
(чтобы облегчить жизнь, вы можете сделать это из командной строки, заменив %%a
на %a
)