远程服务器DIR,只是文件名的一部分?

时间:2015-04-09 15:00:37

标签: windows batch-file dir

我想查询三个文件夹(在三个单独的服务器上)以获取客户端名称列表。

基本上,在每个文件夹中,我都有一堆.EXE'命名如下:

ClientName_ProductName.exe

从我的主服务器,我想输出" ClientName"部分到ClientNames.txt文件。

这是我到目前为止所做的,但是它正在提取所有信息(目录中的所有文件):

:: Setting  the client names file

set clientnamefile="C:\ClientNames.txt"


:: Copying directory information to ClientNames.txt

dir *_ProductName.exe "\\server1\c$\Program Files (x86)\Folder\" /B > %clientnamefile%
dir *_ProductName.exe "\\server2\c$\Program Files (x86)\Folder\" /B >> %clientnamefile%
dir *_ProductName.exe "\\server3\d$\Program Files (x86)\Folder\" /B >> %clientnamefile%

我想在.txt文件中结束以下内容(然后我的另一个脚本将使用它):

ClientName1
ClientName2
ClientName3
ClientName4
ClientName5

2 个答案:

答案 0 :(得分:0)

查看cmd中set的帮助。这为您提供了提取环境变量的一部分的选项。

因此,使用第二个变量,因为我认为变量扩展不适用于循环变量,并且使用字符串替换形式。

for %i in (\\server1\c$\Program Files (x86)\Folder\*_ProductName.exe) set ii = %i: echo %ii:_ProductName.exe=%

(在脚本中使用%%i而不是%i。)

在PowerShell中可能更容易,记住-replace的匹配参数是一个正则表达式,所以需要逃避这段时间:

dir '\\server1\c$\Program Files (x86)\Folder\*_ProductName.exe' `
  | % { $_.Name -replace '_ProductName\.exe', '' }

(对于脚本,我将使用完整的cmdlet名称而不是缩写:Get-ChildItemForEach-Object并指定参数名称。)

答案 1 :(得分:0)

在互联网的帮助下,改变一些东西以满足我的需求,并且还帮助MrLister指出我的新手语法错误,我能够让这个工作。

我现在有一个文本文件,其中只包含来自三个不同网络位置的ClientName_ProductName.exe文件的ClientName部分。

代码如下:

:: Setting  the client names file
set textfile="C:\Util\TFProAdmin Update\ClientName_Dirty.txt"
set textfile2="C:\Util\TFProAdmin Update\ClientName.txt"

set server1="\\clientimport01\c$\Program Files\Transfinder\TransfinderPro
set server2="\\clientimport02\c$\Program Files (x86)\Transfinder\Routefinder Pro
set server3="\\clientimport03\d$\Program Files (x86)\Transfinder\Routefinder Pro
set fileextension=*_ProductName.exe"
set searchline=_ProductName.exe

:: *********************************************************************************
:: ******************* DO !NOT! CHANGE ANYTHING BELOW THIS POINT ******************* 
:: *********************************************************************************


@Echo off
cls
@Echo.
@Echo *********************************************************
@Echo.
@Echo        Starting client name collection process
@Echo.
@Echo *********************************************************
@Echo.
@Echo off

:: Gathering the list of _ProductName.exe files from each of the import servers and writing it to a 'dirty' (temp) text file
dir %server1%\%fileextension% /B > %textfile%
dir %server2%\%fileextension% /B >> %textfile%
dir %server3%\%fileextension% /B >> %textfile%

:: Cleaning up the original text file to remove _ProductName.exe from each line
setlocal enabledelayedexpansion

@Echo. > %textfile2%
FOR /F "usebackq delims=" %%G IN (%textfile%) DO (
  Set "line=%%G" & echo !line:%searchline%=!
) >> %textfile2%

:: Deleting temporary 'dirty' text file
del %textfile%

end