2017-02-22 2 views
0

간단한 사용자 정의 파일을 만들기 위해 간단한 배치 파일을 작성하고 있습니다. 제 질문은 연장 기간에 대한 입력을 마침표와 함께 또는 마침표없이 입력하고 이중 기간 (예 : name1..txt)을 입력하지 않는 방법입니다. 또한 포함 시키거나 포함시키지 말라는 지시 사항을 인쇄하지 않아도됩니다. 도와 줘서 고맙다!변수 하위 문자열 존재시 조건문을 기본으로 만드는 방법

내 접근 방식은 다음과 같습니다. "확장"변수 인 ext의 시작 부분에있는 기간을 찾고 적절한 FOR 루프를 실행하여 파일을 만들고 싶습니다.

setlocal enabledelayedexpansion 
set num= 
set name= 
set ext= 

:setnum 
set /P "num=Number of files to create?: " 
If not defined num Echo.&Echo You must enter a number to continue...&goto:setnum 

:setname 
set /P "name=Enter "root" name of file:" 
If not defined name echo.&Echo You must enter the name of your new files to continue...&goto:setname 

:setext 
set /P "ext=What will be the file extension?:" 
If not defined ext echo.&Echo You must enter an extension to continue...&goto:setext 

pause 
%ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot 
%ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot 

:extNoDot 
for /L %%a in (1,1,%num%) do (echo %%a >> !name!%%a%ext%) 
goto:eof 

:extYesdot 
for /L %%a in (1,1,%num%) do (echo %%a >> !name!%%a.%ext%) 
goto:eof 

:eof 
EXIT /b 

답변

1

실제로 현재 코드에 어떤 문제가 있는지 알려주지는 않습니다. 그것을 테스트하지 않고, 나는이 두 줄 당신에게 문제를 제공해야 함을 볼 수 있습니다

%ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot 
%ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot 

는 명령 인 것처럼 행의 시작 부분에 %ext:~0,1%를 가지고 있기 때문입니다. 당신이하려는 일은 이들을 FINDSTR 명령으로 연결하는 것입니다. 그러므로 그들을 반향시킬 필요가 있습니다 :

echo %ext:~0,1% | FINDSTR /R "[.]" && pause & goto:extNoDot 
echo %ext:~0,1% | FINDSTR /R "[.]" || pause & goto:extYesDot 

그러나 여기에 외부 명령을 사용하면 잔인합니다. 당신은 대신 다음을 수행해야합니다 : 첫 번째 장소에서 점 (별도의 nodotyesdot 라벨 필요 없음)를 가진 적이 ext 것처럼 다음

rem Remove any optional dot at the start 
if "%ext:~0,1%" == "." set "ext=%ext:~1%" 

그리고는 계속한다.

+0

감사합니다. 더 우아한 솔루션. 그리고 어쨌든 두 findstr 줄을 명확히 해 주셔서 감사합니다. 에코가 필요하다는 것을 깨닫지 못했습니다. 나를 구 했어! – Glycoversi