对于循环修饰符不返回任何值(~t和~z)

时间:2017-08-03 19:08:21

标签: batch-file

我有一个for循环,我正在尝试获取日期/时间创建信息。

我的代码的简单版本如下所示:

set home=C:\Temp\dir1

for /f "tokens=*" %%a in ('dir /b %home%\2nd_dir') do echo file info=%%~na %%~ta

如果我没有在dir函数中包含目录的路径,那么事实证明这是有效的。

即。如果我从当前目录运行它,我会得到名称和时间戳。

但是,如果我放入一个目录进行搜索,我只会得到这个名字。我尝试了每一个修饰符,~t~z是唯一无效的修饰符。

我也可以使用forfiles函数执行此操作,但问题是目录实际上是网络路径而不是C:驱动器,所以我必须robocopy从我的网络路径到本地驱动器的文件使用forfiles (使用net usepushd映射驱动器会使事情变得非常复杂)

我可以更容易地从命令提示符测试它。

工作

for /f %c in ('dir /b') do set ftime=%~tc

不能工作

for /f %c in ('dir /b C:\temp\dir1') do set ftime=%~tc

有效吗

for /f %c in ('dir /b C:\temp\dir1') do set fname=%~nc

任何人都知道这里发生了什么?

1 个答案:

答案 0 :(得分:1)

dir/b仅获取文件名,因此添加修饰符会在当前目录中查找文件名。

尝试

pushd yourrequireddirectory
for ...
popd

应该返回适​​当的结果(毫无疑问除了 ~d和~p)