2012-10-16 3 views
0

안녕하세요 저는 배치 파일 작업을 완료하려고합니다.배치 파일과 함께 임의의 텍스트 파일 찾기 및 입력/표시

나는 motivational quotes textfiles의 라이브러리를 가지고 있으며, 배치 파일에 임의의 인용 텍스트 파일 하나를 선택하여 명령 창에 표시하고 싶습니다. 명령 유형은 내가 추측한다.

따옴표와 폴더 내 경로는 다음과 같습니다

C:\Users\niv\Documents\test\scripts\quotes 

내부가 :

 Quote 1.txt 
     Quote 2.txt 
     Quote 3.txt. 

내가 명령 한`유형 "C : \ 사용자 \ NIV 문서 \ \ 테스트 \ scripts \ quotes \ quote1.txt " 은 단 한 건의 quote1.txt만을 표시했습니다.

난 내가 좋아 내 배치 파일에서 다른 작업에 사용할 수 있도록 변수로 선택한 견적 텍스트 파일을 얻으려면 가능한 경우 : 선택한 견적 만드는 프로그램이 명령을받은 후

""후에 컴퓨터에서 아무 것도 읽을 수 없습니다. like

%speech% "%quotes%" 

% speech %는 내 컴퓨터가 인용 부호 안에 whats를 말하도록합니다.

setlocal EnableDelayedExpansion 

set filename=Quote 1.txt 
for /f "tokens=*" %%a in ('type "%filename%"') do (
    set quote=!quote!%%a^ 

) 

echo !quote! 

endlocal 

는이 set quote=!quote!%%a^에서 ^이 다음에 후행 :

내가 방금 당신은이 같은 변수에 텍스트 파일을 읽을 수 있습니다 :)

답변

2

각 인용문이 각 파일의 한 줄에 들어 있다고 가정합니다. 모든 인용 부호를 quotes.txt라는 단일 파일에 두는 것을 권장합니다. 한 줄에 하나의 인용 부호가 붙습니다. 이렇게하면 따옴표를 쉽게 유지할 수 있습니다. 그럼 당신이 필요 파일의 라인 수를 계산할 코드입니다, 그리고 무작위로 1과 카운트 사이의 라인을 선택하십시오.

FIND/C 명령은 파일의 행 수를 계산할 수 있습니다.

동적 변수 %RANDOM% 동적 변수는 0에서 32767 사이의 의사 난수를 제공하며, 모듈러스 SET/A 연산자를 사용하여 값을 0에서 count-1 사이의 숫자로 변환 할 수 있습니다.

FOR/F 명령은 파일에서 행을 읽으며 SKIP 옵션을 사용하여 임의의 수의 행을 건너 뛸 수 있습니다.

따옴표TXT

quote 1 
quote 2 
quote 3 
quote 4 

randomQuote.bat

@echo off 
setlocal 

:: Count the number of quotes and define a random number to skip 
for /f %%N in ('find /c /v "" ^<quotes.txt') do set /a skip=%random% %% %%N 
if %skip% gtr 0 (set skip=skip=%skip%) else set "skip=" 

:: Read a random quote into a variable 
for /f "%skip% delims=" %%A in (quotes.txt) do (
    set "quote=%%A" 
    goto :break 
) 
:break 

:: Echo the quote (or do whatever you need) 
echo %quote% 
+0

을 위해 : 이전 답변의 모두는 (내 코드는 제공하지 않습니다) 변수에 따옴표를 삽입하기위한 참고 자료로 사용할 수 있습니다 . 다른 위치에서 배치 파일을 실행하고 결과를 얻으려면 어떻게해야합니까? 코드의 따옴표 폴더에 폴더 경로를 설정해야합니까? 미안 당신이 무슨 뜻인지 이해가 안되면,이 물건을 새로 배우고 배우려고하는 중이 야. :) – Nivi

+0

@Nivi -'quotes.txt' 접두어에 코드의 두 위치에있는 전체 경로 정보를 접두사로 사용합니다. 경로에 공백이나 특수 문자가 포함되어 있으면 전체 경로를 따옴표로 묶어야합니다. 예를 들면 다음과 같습니다.''c : \ your path \ quotes.txt "' – dbenham

+0

고맙습니다. 거기에 추가하려고했지만 두 번째"quotes.txt "를 놓쳤습니다. 코드에서 혼란 스러웠습니다. 그러나 이것은 무엇입니까? 비트가 제자리에 자리 잡게 만들어 다시 100 % 감사드립니다! :) – Nivi

0

을 요청하지 않을 경우 여기를 달성하기 위해 노력하고 무엇 메신저 이해할 수 있기를 바랍니다 공백 행은 추가 된 각 행을 개행 문자로 끝납니다. 당신이 줄 바꿈이 필요하지 않은 경우, 당신은 한 줄에 전체 견적을 얻기 위해

for /f "tokens=*" %%a in ('type "%filename%"') do (
    set quote=!quote! %%a 
) 

for /f "tokens=*" %%a in ('type "%filename%"') do (
    set quote=!quote!%%a^ 

) 

을 대체 할 수있다.

어쨌든 %quote% 대신 인 경우 delayed expansion이 필요합니다.

+0

덕분에 나는 따옴표 폴더 안에 배치 파일을 넣을 때이 일을 답 : – Nivi

0

내 대답은 임의의 견적 번호를 선택, 당신이 제공 한 경로에 텍스트 파일의 수를 계산하고 견적을 입력에 초점을 맞추고 있습니다.

@Echo off 
set path=C:\Users\niv\Documents\test\scripts\quotes 
cd /D %path% 
setLocal EnableDelayedExpansion 
set count=0 

for %%a in (*.txt) do (
set /a count=!count!+1 
) 
echo Total number of quote files: %count% 

set /a num=(%count% * %random%)/32768 + 1 
echo Quote #: %num% 

type "%path%\quote %num%.txt" 

endlocal 
+0

고마워 나중에 이것을 지켜라! :) – Nivi

관련 문제