【发布时间】:2015-05-08 00:10:40
【问题描述】:
我在批处理文件中有一个命令行程序。 我遇到问题的步骤如下: 这有效:
假设 echo %filestocopyfilter% 产生这个:
*.sc *.csv(已验证)
以下作品:
d:
cd d:\temp
for %%i in (%filestocopyfilter%) do (
set FileName=%%i
SET FTIME=%%~ti
)
这会生成所有以 .sc 或 .csv 结尾的文件名
问题是我需要一个 UNC 路径,例如\10.10.0.145\d$\temp
现在我不能再使用 d: 或 cd d:\temp 没有这些,UNC 路径在上面的 for 命令中不起作用。
我试图修改我在这个网站上找到的东西来得到这个:
for %%i in ('dir "\\10.10.0.145\d$\temp\%filestocopyfilter%" ') do (
set FileName=%%i
SET FTIME=%%~ti
)
失败了。
也试过了
for %%i in ('dir "\\10.10.0.145\d$\temp\*.sc" ') do (
set FileName=%%i
SET FTIME=%%~ti
)
这当然只会获取 *.sc 文件,但它也会失败。
任何想法表示赞赏。
顺便说一句,我必须使用 UNC 的原因是因为我正在使用 psexec 从另一台计算机运行此批处理文件。批处理文件在本地运行良好,但它不会看到像 q:\temp(其中 q 是 10.10.0.145)这样的映射盘符,因为它没有适当的权限。我确实发现,如果我断开批处理文件,然后使用登录凭据重新映射驱动器,它将起作用 - 但是在需要运行时断开并重新连接驱动器确实不好。
-修改 - 添加到原始问题 - 不适合 cmets -
首先感谢您的及时答复。 这让我有很多东西可以尝试。
注意:这些都是在批处理文件中运行,而不是直接在命令行中运行:
在这里,我尝试使用路径拆分每个过滤器 - 它不会崩溃,回显结果为空 FileName 并且 FTIME 为空白。 只要我先执行此操作,这同样适用于非 UNC 路径 (%driveletter% = d:) 和 (%sourcepathnoquotes% = d:\temp) ---------------------工作-----------
%driveletter%
cd %sourcepathnoquotes%
FOR %%i IN (*.csv *.sc) DO.....
-------------不起作用-------
FOR %%i IN (' "\10.10.0.11\d$\u1\static\source-erase*.csv" "\10.10.0.11\d$\u1\static\source-erase*.sc" ') 做 (
设置文件名=%%~dpi
SET FTIME=%%~ti
echo 文件名为 %FileName%
回显文件时间为 %FTIME%
)
暂停
我遇到问题的另一个相关领域是 WMIC
假设 %sourcepathdoubleslashnoquotes% = \10.10.0.11\d$\u1\static\source-erase
假设 %FileName% = myfile.sc
wmic datafile where name="%sourcepathdoubleslashnoquotes%%FileName%" get lastmodified > "%tmpfilepathnoquotesnodouble%tmpFile.txt"
这适用于非 UNC 路径
键入“%tmpfilepathnoquotesnodouble%tmpFile.txt”| findstr /v LastModified > "%tmpfilepathnoquotesnodouble%tmpFile2.txt"
set /p myvar=
del "%tmpfilepathnoquotesnodouble%tmpFile.txt"
del "%tmpfilepathnoquotesnodouble%tmpFile2.txt"
注意:我之所以写到 tmpFile.txt 和 tmpFile2.txt 是因为 WMIC 命令的结果是两行:
最后修改时间
20150505172747.167788-240
我只需要变量中的第二行 - 如果不先写入文件,我似乎无法将命令的第二行输出到变量中
关于 Pushd:它确实有效,但我有两个问题。
1) 我还需要报告文件名。它目前只报告 MMDDYYY HH:MM:SS AM/PM
2) 使用 WMIC 的时间戳会更容易,见上文。
3) 似乎无法让它填充变量以便我可以解析和操作
推送“\computer.example.com\d$\temp\” forfiles -m *.csv -c "cmd /c echo @fdate @ftime" 弹出
想法? 提前非常感谢!
【问题讨论】:
标签: batch-file for-loop command-line