2013-06-03 4 views
1

이 문제는 몇 시간 동안 저를 괴롭 혔습니다. 나는 누군가가 약간의 빛을 비춰주기를 바랍니다. 기본적으로 폴더 안에있는 모든 파일 (특정 유형의 파일)을 스캔하려고합니다 (내부에 하위 폴더가 없으므로이 경우 걱정할 필요가 없습니다). 파일 이름을 가져 와서 모두를 하나의 문자열로 연결합니다. 폴더가 두 개의 파일, a.xml, b.xml 및 c.xml이있는 경우, 나는 문자열을 보이는 싶어일괄 파일 이름 문자열 연결

-a a.xml -a b.xml -a c.xml

같은

아래 코드는 제 코드입니다.

copy *.xml C:\FTP 
setLocal Enabledelayedexpansion 
set "directory=C:\temp" 
set "attachment= " 
set "a= -a " 
for %%n in (%directory% *.xml) DO ( 
set "attachment=!attachment! %a% %directory%\%%n " 
echo.%attachment% 
) 
setlocal disabledelayedexpansion 
echo.%attachment% 

출력이 I 화상 http://imgur.com/vpUUe05 가지는 문제에 도시되어있다 첫 번째 루프 밖으로 아무것도 인쇄에 대한 모든 에코 . 그 빈 줄에 표시된대로. 내가 원하는 마지막 문자열, 즉 첨부 파일의 초기 부분 문자열이 포함되어 있습니다.

-a C:\temp\C:temp. 

이 파일은 실제로는 파일이 아닙니다. 내가 원하는 마지막 문자열은이 하위 문자열이없고 그 뒤에있는 문자열이어야합니다. 그건 그렇고, 폴더 안에 파일이 없으면 ""와 같은 빈 문자열에만 "첨부 파일"문자열을 넣기를 원합니다. 누구든지 나를 도울 수 있습니까? 고마워요!

답변

5

for 루프 안에는 %attachment% 값이 표시되므로 각 반복마다 값이 업데이트되지 않습니다. 그렇게하려면 지연된 확장을 사용해야합니다.

for의 값 집합은 C:\temp이고, 확장명이 .xml이고 모든 파일이 현재 디렉토리에없는 것으로 가정합니다. 그런 다음 %a% %directory%\%%n 표현식에서이 값을 사용하므로 결과는 -a C:\temp\C:\temp입니다. 나는 여기에 요점이 없다고 생각한다.

목록에 폴더 값을 넣지 않으려면 대체 매개 변수에 %~NXn 수정자를 사용하십시오.

copy *.xml C:\FTP 
setLocal Enabledelayedexpansion 
set "directory=C:\temp" 
set "attachment= " 
set "a= -a " 
for %%n in ("%directory%\*.xml") DO ( 
set "attachment=!attachment! %a% %%~NXn " 
echo.!attachment! 
) 
setlocal disabledelayedexpansion 
echo.%attachment% 
+0

안녕, 정말 감사합니다

다음은 올바른 코드입니다! 그것은 작동합니다. echo % .attach %와 echo .applet!의 차이점을 물어볼 수 있을까요? %% ~ NXn은 무엇입니까? 일괄 처리 파일은 너무 많은 약어가있는 것처럼 보입니다. 정말 흐리게 보입니다. 이 축약어 목록을 어디에서 찾을 수 있습니까? 고맙습니다. – Rookie