2015-09-04 50 views
-1

編輯:澄清我要做的是將幾個文件移動到應用程序的數據文件夾。該應用程序安裝在程序文件中,但它將數據保存在應用程序數據中。文件夾名看起來像這樣新手:需要找到一個文件,讀取它,並cd到其目錄

76053ADAJSQDUC4975

問題是,它是唯一安裝的應用程序的每個實例和將要使用該批次的每一臺計算機。所以我在目錄中,它具有

1AKDHCI4985HF55GHJKB G5586HJFRUK56885KOQQ

標識文件夾的唯一方法是通過每一個叫做

origin.txt 

昭示着裏面的.txt文件一行中應用程序安裝目錄(C:/ Program Files(x86)/ ********)的文件路徑。

我想我可以使用for來循環,找到文件並讀取它。我不知道該怎麼做,找到正確的文件,並cd到其目錄。第二個問題是由於這個批處理文件將被多個用戶使用,並不是所有的安裝路徑都是相同的。因此,在.txt文件中,它可能是C:/,D:/,Program Files或Program Files(x86),所以唯一對我有用的是最後幾個單詞。我會如何去選擇那樣的選擇。

我正在旅行,所以不能馬上回答,但如果你們幫助我,或點我在正確的方向將不勝感激。由於

+0

如果它不是最後一行,那麼可以使用遞歸'findstr/m/s/r/c:'word1 word2 $「* .txt'來構建目錄列表,否則您必須手動得到最後一行,然後得到最後兩個令牌(對於那個stackoverflow有解決方案)。 – wOxxOm

回答

0

我結束了使用

set "ApplicationDirectory=" 
for /r "%appdata%" %%a in (origin.txt*) do find "thewordsiwaslookingfor" <"%%a" >nul && set "ApplicationDirectory=%%~dpa" 

然後我用ApplicationDirectory能夠爲一些文件移動到該目錄中。

這是完美的,我正在嘗試做的。

0

首先,如果應用程序安裝與添加的東西到Windows註冊表中如果安裝了所有知道自己該應用程序的版本已安裝下次運行(更新/升級/卸載),並進入其目錄中的安裝程序,最好在註冊表中評估這些信息,而不是在文件系統中搜索。看到我的回答Locate if the program exists and set a custom variable in batch windows

其次,假設文本文件origin.txt可以在任何地方內只含一次(或上次)的字符串:\與應用,下面的批處理代碼可能的程序文件的目錄的一部分,當前用戶的應用程序數據目錄中找到用於獲取目錄路徑並將其作爲當前目錄。

@echo off 
set "ApplicationDirectory=" 
for /F "delims=" %%I in ('dir /A-D /B /S "%APPDATA%\origin.txt" 2^>nul') do (
    for /F "delims=" %%D in ('%SystemRoot%\System32\findstr.exe /C:":\\" "%%~I" 2^>nul') do (
     if exist "%%~D" (
      set "ApplicationDirectory=%%~D" 
      goto ChangeDirectory 
     ) 
    ) 
) 
echo Could not determine directory of application. 
goto :EOF 

:ChangeDirectory 
cd /D "%ApplicationDirectory%" 
echo Directory is: %ApplicationDirectory% 
set "ApplicationDirectory=" 

第一FOR循環使用命令DIR用戶相關的應用數據目錄的所有子目錄來搜索文件origin.txt。如果至少有一個這樣的文件被找到,則處理循環的內部循環。

FOR循環調用FINDSTR搜索中發現的origin.txt包含文字串:\所有行和處理所有發現行。

對於由FINDSTRFOR迴路檢查返回的每一行,如果有使用含有:\的行的整個字符串的目錄(或文件)。

通過跳轉到標籤ChangeDirectory的目錄(或文件)的存在的肯定檢查立即退出兩個循環,命令切換當前目錄獨立於當前驅動器並回顯找到的應用程序目錄。

爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • cd /?
  • dir /?
  • findstr /?
  • for /?
  • goto /?
  • if /?
  • set /?

注意:如果文件origin.txt可能包含多個路徑,我強烈建議運行FINDSTR,使用更好的搜索字符串或甚至正則表達式,而不僅僅是:\

+0

謝謝莫菲!你真的幫了很大忙,特別是在你的解釋中,我正在通過幫助每一個命令,試圖掌握更好的事情。 – Nohj

+0

我遇到了一個問題,它沒有找到目錄,我已經把findstr更改爲幾個具有相同結果的東西,並且我嘗試調整目錄%APPDATA%\ Roaming \ Etc \ origin.txt以查看我是否可以把它放在一個更近的目錄中,但我不知道這是否有效。無論哪種方式改變它的結果 – Nohj

+0

@Nohj編輯你的問題,並告訴我們'origin.txt'的全部內容,如果不是太大,應該找到哪一行,我們可能會建議正確的字符串或正則表達式來找到感興趣的線。 – Mofi

相關問題