将命令存储在批处理文件中的变量中

时间:2016-10-25 02:51:49

标签: batch-file psexec

我需要搜索远程目录(psexec),然后将结果存储在变量中。

我有一个目录,其中包含许多其他文件夹,每个文件夹都包含我需要执行的一些文件。网络上的每台计算机都有我需要的文件在不同的目录中。

例如,我会用

搜索(使用psexec)
dir *Google_Chrome_49_0_2623_112_X64_EN_R01* /s

我会得到结果

 Volume in drive C is OSDISK
 Volume Serial Number is C8AD-F658

 Directory of C:\Windows\ccmcache\2a

12/04/2016  01:52 PM               458 Google_Chrome_49_0_2623_112_X64_EN_R01.cab
14/04/2016  05:26 PM            69,632 Google_Chrome_49_0_2623_112_X64_EN_R01.mst
               2 File(s)         70,090 bytes

     Total Files Listed:
               2 File(s)         70,090 bytes
               0 Dir(s)   4,726,218,752 bytes free

现在我需要相同的批处理文件来cd进入目录2a并在里面执行一个脚本。

有没有办法存储' 2a'在一个变量中,我可以进入它吗?

目前我在两个步骤中执行此操作,批处理将显示搜索结果,然后提示输入目录:

psexec \\%PCNAME% cmd /c (cd ..\ccmcache ^& dir *Google_Chrome_49_0_2623_112_X64_EN_R01* /s)

SET DIRECTORY=%1
SET /P DIRECTORY=Enter Directory: 

问题是,我需要完全自动化。我怎么能这样做?

注意:我已经查看了其他几个主题,但没有一个答案对我有帮助。似乎来自psexec的结果不会流回本地界面 我试过了:

for /f %%a in (psexec \\%PCNAME% cmd /c (cd ..\ccmcache ^& dir *Google_Chrome_49_0_2623_112* /s ^| FIND "Directory of C:\Windows\ccmcache\") DO (
 SET v=%%a
)

尝试将整个结果行设置为var,但是当我检查var时,它是空的。

1 个答案:

答案 0 :(得分:0)

我刚刚发现您可以使用pushd映射到网络共享并在那里运行搜索,而不是在需要之前处理psexec。

所以我的代码现在看起来像:

pushd \\%PCNAME%\C$\Windows\ccmcache

for /f "tokens=3" %%a in ('dir *Google_Chrome_49_0_2623_112* /s ^| FIND "Directory"') DO (
 set v=%%a
 for /f "tokens=4 delims=\" %%m in ('echo !v!') do (set x=%%m)
)
popd

%x%现在是我正在搜索的目录。