将命令存储在批处理文件中的变量中
Storing command results in a variable in batch file
我需要搜索一个远程目录 (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\ccmcachea
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”存储在变量中以便我可以 cd 进入它吗?
目前我分两步进行,批处理会显示搜索结果,然后提示输入目录:
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:
问题是,我需要它完全自动化。我该怎么做?
注意:我查看了其他几个主题,none 的答案似乎对我有所帮助。看来 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 时,它是空的。
我刚刚发现您可以使用 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% 现在是我正在搜索的目录。
我需要搜索一个远程目录 (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\ccmcachea
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”存储在变量中以便我可以 cd 进入它吗?
目前我分两步进行,批处理会显示搜索结果,然后提示输入目录:
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:
问题是,我需要它完全自动化。我该怎么做?
注意:我查看了其他几个主题,none 的答案似乎对我有所帮助。看来 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 时,它是空的。
我刚刚发现您可以使用 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% 现在是我正在搜索的目录。