windows
  • batch-file
  • cmd
  • concatenation
  • string-concatenation
  • 2016-07-07 2 views 0 likes 
    0

    작은 따옴표로 묶고 각각 쉼표로 묶은 하위 폴더 이름 (예 : "folder_1" "folder2" "folder 3")을 출력하고 싶은 디렉토리가 있습니다. , txt 파일에. 내가 얻을 수있는 방법txt 파일에 대한 연결을 포함한 일괄 출력 출력

    'folder_1', folder2', folder', 
    

    : 출력을 포함하는 .txt 파일을 생성

    @echo off 
    set myvar=' 
    for /f %%i in ('dir /b /o:n /ad') DO call :concat %%i 
    echo %myvar% >>test.txt 
    goto :eof 
    
    :concat 
    set myvar=%myvar%%1', 
    goto :eof 
    

    :

    내가 아래에 배치 파일을 마련하기 위해 관리 How to concatenate strings in a Windows batch file? @ 솔루션을 기반으로 출력은 다음과 같이 보입니다.

    'folder_1', 
    'folder2', 
    'folder 3' 
    

    - 각 하위 폴더 이름 space/s)를 쉼표로 묶은 작은 따옴표로 묶습니다. 가능한 경우 각 폴더를 별도의 줄에 넣고 마지막 폴더에는 쉼표를 사용하지 마십시오.

    답변

    1

    누락 된 문자를 처리하려면 for 문에서 한 항목이 누락되었습니다.

    for /f "tokens=*" %%i in ('dir /b /o:n /ad') DO call :concat %%i 
    

    "tokens=*" 부분은 하나 개의 변수는 전체 라인을 치료 for 말한다. 기본적으로 for은 각 줄을 공백의 별도 변수로 나눕니다. 따라서 각 줄의 첫 단어 만 가져옵니다.

    단일 줄 문제를 해결하려면 echo 문을 여러 개 발행해야합니다. 지금 당장 당신의 코드는 모든 것을 하나의 변수에 모아서 한 줄로 표시합니다. 대신 에코를 :concat 서브 루틴으로 이동하여 루프를 통해 매번 파일에 한 줄을 추가 할 수 있습니다. echo 줄에

    for /f "tokens=*" %%i in ('dir /b /o:n /ad') DO call :concat %%i 
    goto :eof 
    
    :concat 
    echo '%*', >>test.txt 
    goto :eof 
    

    %*는 "모든 인수"를 의미한다. 여기에서 %1을 사용할 수 없습니다. CMD가 인수를 공백으로 분리하기 때문입니다. CMD 인수에 대한 자세한 내용은 http://ss64.com/nt/syntax-args.html

    을 참조하십시오. 변수를 따옴표로 묶어 call :concat "%%i"에 넣으면 CMD가 인수를 분할하지 않습니다. 하위 함수에서는 %* 대신 %~1을 사용합니다.

    +0

    고맙습니다! 더 이상'set myvar = ''권리가 필요하지 않습니까? 또한'%% i'의 목적과'echo '% *','?의 백분율을 알고 있습니까? – Eats

    관련 문제