gpt4 book ai didi

batch-file - 在批处理文件的 For 循环中使用 UNC 路径

转载 作者:行者123 更新时间:2023-12-01 23:43:45 24 4
gpt4 key购买 nike

我在批处理文件中有一个命令行程序。我遇到问题的步骤如下:这有效:

假设 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)这样的映射字母驱动器,因为它没有适当的权限。我确实发现,如果我让批处理文件断开连接,然后使用登录凭据重新映射驱动器,它会起作用——但是在需要运行时断开连接并重新连接驱动器确实不好。

-修改后-添加到原始问题中-不适合评论-

首先感谢您的及时答复。这给了我很多尝试的机会。

注意:这些都是在批处理文件中运行的,而不是直接在命令行中运行的:

在这里,我尝试用一​​个路径拆分每个过滤器 - 它不会崩溃,因为回显结果是空的 FileName 和 FTIME 是空白的。再次使用非 UNC 路径只要我先这样做 (%driveletter% = d:) 和 (%sourcepathnoquotes% = d:\temp)------------------工作------------------------

%驱动器字母%

cd %sourcepathnoquotes%

对于 %%i IN (*.csv *.sc) 做......

------------不起作用--------------------

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

回显文件名为 %FileName%

回显文件时间是%FTIME%

)

暂停

我遇到问题的另一个相关领域是 WMIC

假设 %sourcepathdoubleslashnoquotes% =\10.10.0.11\d$\u1\static\source-erase

假设 %FileName% = myfile.sc

wmic 数据文件 where name="%sourcepathdoubleslashnoquotes%%FileName%"get lastmodified > "%tmpfilepathnoquotesnodouble%tmpFile.txt"

这适用于非 UNC 路径

键入“%tmpfilepathnoquotesnodouble%tmpFile.txt” | findstr/v LastModified > "%tmpfilepathnoquotesnodouble%tmpFile2.txt"

set/p myvar= < "%tmpfilepathnoquotesnodouble%tmpFile2.txt"

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) 似乎无法让它填充变量以便我可以解析和操作

pushd "\computer.example.com\d$\temp\"forfiles -m *.csv -c "cmd/c echo @fdate @ftime"弹出

想法?提前致谢!

最佳答案

pushdpopd 将在这里为您提供帮助。他们将一个目录插入堆栈并更改为该目录,然后您可以弹回到之前的位置。巧妙的技巧是他们在幕后为您保留了 UNC 路径的驱动器号(当我尝试时,他们分配了“Z”驱动器)。看看下面的例子:

pushd "\\computer.example.com\d$\temp\"
forfiles -m *.csv -c "cmd /c echo @fdate @ftime"
popd

关于batch-file - 在批处理文件的 For 循环中使用 UNC 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com