我使用批處理在每個客戶端本地執行一個robocopy
命令,同步一個文件夾,然後啓動一個具有自己的模式批處理的應用程序。如何使用批處理命令「where」並從VBScript設置變量?
我的下一個項目是在VBScript中轉換此批處理,直接從遠程共享文件夾使用它,而不是將批處理存儲在每個客戶端本地。
即使我不是一個好的VBScript程序員,在指標上,我幾乎已經設置好了,但我堅持要將where
命令移植到VBScript。
在我的批處理文件,我執行以下命令:
FOR /F "tokens=* USEBACKQ" %%F IN (`where /R C:\appfolder startapp.bat /F`) DO (
SET strAPP=%%F
)
在C:\appfolder
有安裝在每個客戶端軟件,並出於某些原因,可安裝在錯誤的和不同的模式,從而使公共startapp.bat
可能每個客戶都有不同的模式。由於這個原因,上面的FOR
實例幫助我創建一個名爲%strapp%
的變量,稍後在批處理中使用該變量來啓動應用程序。
現在,我的VBScript正在使用確切的模式,但沒有這個「在哪裏命令預防」,我想擁有與批處理相同的功能,只是爲了防止將來客戶端可能會再次出現錯誤的安裝在一個非常見的模式。
例如在使用strmsg菜單,當從它的客戶端的用戶選擇正確的選項VBS,VBScript的啓動應用程序:
objShell.Run("%comspec% /K C:\appfolder\startapp.bat & exit"), 1, True
strFlag = True
和它的作品,我試圖添加老where
命令,並設置一個變量中添加&每個連接命令,所有那些在一行中沒有運氣....
eg
objShell.Run("%comspec% /K FOR /F "tokens=* USEBACKQ" %%F IN (`where /R C:\appfolder startapp.bat /F`) DO (SET strAPP=%%F) & %strapp% & exit"), 1, True
strFlag = True
我試圖用雙引號「」,沒有運氣。
正確**複製和使用**,@ Ansgar的方法只是'有效'。 –
它的工作原理,但它真的很慢尋找正確的模式,此外,它保持背景的dos框,我想使用Ansgar一個,但怎麼可以改進? 我認爲它與應用程序有關,而不是順便說一下「where命令」,此刻我不知道該如何感謝你們兩個,並且我將兩個腳本並行使用,我稍後再決定哪一個是可靠的。 我想也張貼整個腳本是否可以爲社區(我想不會是有用的,由於我不是一個好的程序員) :-) 謝謝你有用! – xer
@xer將「Run」方法的第二個參數更改爲0以隱藏CMD窗口。除非你在搜索UNC路徑或廣泛的文件夾樹,否則'Where'函數應該足夠快。 –