我有一个名为My_text.txt
的文件中存在的文件名列表,可能超过100。我想检索修改日期,基本上是所有这些文件名的DIR
命令输出。
My_Text.txt contains
D:Usersdsa99_pDesktopMy_Program1.txt
D:Usersdsa99_pDesktopMy_Program2.txt
D:Usersdsa99_pDesktopMy_Program3.txt
D:Usersdsa99_pDesktopMy_Program4.txt
and so on..
我想检索所有这些My_Program1、My_Program 2、My_Pogram3、My_Pprogram4文件的修改日期。怎么做?请帮忙。
如果可以通过Powershell,请告诉我。
在PowerShell中,Get-Content
可以加载文件内容,Get-ChildItem
可以获取文件信息。这就是它在PowerShell中的实现方式:
Get-Content My_text.txt | ForEach-Object { (Get-ChildItem $_).LastWriteTime }
(Get-ChildItem (Get-Content My_text.txt)).LastWriteTime
两个命令的作用相同。较短的形式:
gc My_text.txt |% { (ls $_).LastWriteTime }
(ls (gc My_text.txt)).LastWriteTime
如果您想要一个批处理文件解决方案
FOR /F "usebackq delims=" %%G IN ("My_Text.txt") DO ECHO FileName:%%G Modified:%%~tG
因为可能有一个或多个文件不存在,所以我的代码结构可能会有所不同。我会首先检查每一行是否与现有文件相关,然后才能获得其信息。
我将提供的第一个例子是PowerShell,虽然它看起来像是更多的文本,但它的可配置性要高得多,尤其是在修改结果的布局和内容方面。
powershell命令行:
(Get-Content -Path '.My_Text.txt') | ForEach-Object { If (Test-Path -LiteralPath $_ -PathType Leaf) { Get-Item -LiteralPath $_ | Select-Object -Property LastWriteTime, Name } }
cmd命令行:
For /F "UseBackQ Delims=" %G In (".My_Text.txt") Do @If "%~aG" Lss "d" If "%~aG" GEq "-" Echo %~tG: %~nxG
单行批处理文件版本:
@(For /F "UseBackQ Delims=" %%G In (".My_Text.txt") Do @If "%%~aG" Lss "d" If "%%~aG" GEq "-" Echo %%~tG: %%~nxG)&Pause
在上面的所有示例中,我假设My_Text.txt
在当前目录中,如果不是,请根据需要更改其当前相对位置.
,而不修改其引用