2016-11-07 70 views
1

我正在嘗試使用cmd讀取我用PowerShell創建的批處理文件。這個文件中的每一行都是一個目錄,所以我希望能夠創建一個循環來讀取每一行;指向目錄並將輸出存儲在文本文件中。每行讀取一個txt文件到一個數組中,並指定數組中的每個條目

我如何做到這一點至今的想法是使用:

set Lines=TYPE Z:\archive\%username%.txt | FIND "" /v /c 

要查找文件中的行數和使用Do until i = Lines到DIR每一行。

如何將.txt文件中的每一行添加到數組中以便我可以引用它們?最重要的是,我怎樣才能輸出到.txt文件?

回答

1

有許多其他語言的概念不能直接翻譯成Windows批處理。

批處理文件沒有任何數組的固有概念。它們可以通過聰明地使用變量名來模擬,但在這裏並不需要。

此外,您不能簡單地將命令的結果分配給環境變量,就像您可以在'nix shell中一樣。你可以使用類似於for /f "delims=" %%A in ('someCommand') do REM Do something with the line of output contained within %%A這樣的命令遍歷每行輸出。例如,您可以構建一個「數組」值。但是,再次,不需要在這裏處理命令的結果,更不用說建立一個數組了。

FOR/F命令是一個複雜的野獸,可以做很多事情,具體取決於使用的語法。其中一個功能是迭代文件的行。所以,你的解決方案是非常簡單:如果你直接從控制檯從批處理腳本內運行的命令,而不是

for /f "usebackq eol=: delims=" %%F in ("Z:\archive\%username%.txt") do dir "%%F" 


那麼每個%%F必須成爲%F

+0

非常感謝你是什麼;有關如何將輸出的結果輸出爲不同(或相同,如果更容易)文本文件的任何提示? –

0

提供該解決方案一試:

@echo off 
Title Display recursively all Folders using Array 
SET "Count=0" 
set "Folder=%userprofile%\Desktop" 
set "ListFolders=%~dp0ListFolders.txt" 
If Exist %ListFolders% Del %ListFolders% 
Dir /b /s /a:d "%folder%" >> %ListFolders% 
setLocal EnableDelayedExpansion 
REM Populate the array with existent sub-folders in this folder 
for /f "tokens=* delims= " %%a in ('Type "%ListFolders%"') do (
    set /a Count+=1 
    set "Folder[!Count!]=%%~na" 
    set "ListpathFolder[!Count!]=%%~fa" 
) 
::******************************************************** 
:Display_Folders 
cls & color 0B 
echo wscript.echo Len("%Folder%"^) + 20 >"%tmp%\length.vbs" 
for /f %%a in ('Cscript /nologo "%tmp%\length.vbs"') do (set "cols=%%a") 
If %cols% LSS 50 set /a cols=%cols% + 24 
set /a lines=%Count% + 17 
Mode con cols=%cols% lines=%lines% 
echo(
echo ------------------------------------------------ 
ECHO Folder : "%Folder%" 
echo ------------------------------------------------ 
rem Display array elements 
for /L %%i in (1,1,%Count%) do (
    echo [%%i] - "!Folder[%%i]!" 
) 
echo(
echo Total number in "%Folder%" is %Count% 
echo(
echo "Type the number of folder that you want to explore" 
set /p "Input=" 
For /L %%i in (1,1,%Count%) do (
    If "%INPUT%" EQU "%%i" (
     Call :Explorer "!ListpathFolder[%%i]!" 
     cls 
     Dir "!ListpathFolder[%%i]!" 
     echo(
     echo Hit any key to show again all folders ... 
     pause>nul 
    ) 
) 
Goto Display_Folders 
::********************************************************* 
:Explorer <file> 
explorer.exe /e,/select,"%~1" 
Goto :EOF 
::********************************************************* 
+0

謝謝你的答案,但是這似乎做得比我想要的要多得多;我正在閱讀的文件有簡單列出的文件目錄,我希望這些目錄中的每一個目錄都可以獲得有關它們的基本信息,並將其輸出到.txt文件中 –

相關問題