2016-11-07 14 views
1

現在、cmdを使用してPowerShellで作成したバッチファイルを読み込もうとしています。このファイル内の各行はディレクトリなので、各行を読み込むループを作成できます。ディレクトリを作成し、出力をテキストファイルに保存します。txtファイルを1行で配列に読み込み、配列内の各エントリを指定します

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

ファイル内の行数を確認するには、それぞれの行をDIRするDo until i = Linesを使用します。これまでのところ、これを行う方法について

私の考えでは使用することです。

.txtファイルの各行を配列に追加して、その行を追加するにはどうすればよいですか?そして、それをどうやって.txtファイルに出力するのですか?

答えて

1

Windowsバッチに直接変換できない他の言語の多くの概念があります。

バッチファイルには配列固有の概念がありません。変数名を賢明に使用することでエミュレートできますが、ここでは必要ありません。

また、「nixシェル」のように環境変数にコマンドの結果を割り当てることもできません。 for /f "delims=" %%A in ('someCommand') do REM Do something with the line of output contained within %%Aのようなコマンドを使用して、各出力行を繰り返し処理できます。たとえば、値の「配列」を構築できます。しかし、ここでもコマンドの結果を処理する必要はなく、配列を作成するだけではありません。

FOR/Fコマンドは、使用される構文に応じて多くのことを行うことができる複雑な獣です。機能の1つは、ファイルの行を反復することです。あなたが
、コンソールからではなく、バッチスクリプト内から直接コマンドを実行すると、各%%F%Fにならなければならない

for /f "usebackq eol=: delims=" %%F in ("Z:\archive\%username%.txt") do dir "%%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ファイルに出力された基本情報を取得したい –

関連する問題