Windows 10, UserProfile 아래의 내 비디오 폴더에 있습니다.
저는 하나의 명령줄에 다양한 정보가 포함된 완전한 txt 파일을 만들기 위해 몇 가지 사항을 함께 연결하려고 합니다.
목표는 헤더, 일부 생성된 정보 및 바닥글이 포함된 단일 txt를 만드는 것입니다. .txt
단순화를 위해 txt의 이름은 폴더 이름 끝에 끝에 붙는 것과 동일하게 지정됩니다 .
저는 폴더당 한 번씩 일련의 명령을 실행하는 것을 목표로 삼고 있으며, 대상 폴더 이름에 대한 호출이 꽤 많기 때문에 변수를 사용하여 이름을 단축하기로 했습니다.
type header.txt > VeryLongFolderNameFooBar\VeryLongFolderNameFooBar.txt & c:\mediainfo\mediainfo.exe --output=file://template.txt ./VeryLongFolderNameFooBar/*.mkv >> VeryLongFolderNameFooBar\VeryLongFolderNameFooBar.txt & type footer.txt >> VeryLongFolderNameFooBar\VeryLongFolderNameFooBar.txt
이것은 완벽하게 작동했지만 모든 경우에 대해 폴더 이름을 변경하는 것이 매우 지루했습니다. 그렇다면 변수를 올바르게 사용하는 것은 어떨까요?
set a=VeryLongFolderNameFooBar && type header.txt>%a%\%a%.txt & c:\mediainfo\mediainfo.exe --output=file://template.txt ./%a%/*.mkv>>%a%\%a%.nfo & type footer.txt>>%a%\%a%.txt
이는 세 가지 access denied
메시지를 제공합니다. 처음에는 변수 호출 전후에 공백을 사용하고 공백으로 인해 문제가 발생할 수 있다는 게시물을 읽은 후 공백을 제거했지만 여전히 소용이 없으며 실제로 이에 붙어 있습니다. 그렇게 하면 echo %a%
전혀 문제 없이 폴더 이름이 반환됩니다.
내가 무엇을 놓치고 있나요?
답변1
CMD는 실제로 변수를 처리하기 전에 전체 줄에서 변수를 검색합니다. 따라서 명령 %a%
을 처리하기 전에 null(또는 이전에 설정된 값)로 대체됩니다 set a=...
. 이 작업은 별도의 줄에서 수행해야 합니다.
set a=VeryLongFolderNameFooBar
type header.txt>%a%\%a%.txt & c:\mediainfo\mediainfo.exe --output=file://template.txt ./%a%/*.mkv>>%a%\%a%.nfo & type footer.txt>>%a%\%a%.txt
그러나 또한 (당신이 발견한 대로) set
명령(멍청하게도 IMHO)에는 명령 구분 기호까지 모든 것이 포함됩니다. 그래서
set a=SoLong & echo /%a%/
(후행 공백 포함) a
로 설정됩니다 . SoLong
이를 처리하는 한 가지 방법은 다음 앞에 공백을 두는 것입니다 &
.
set a=SoLong& echo ...
하지만 이는 읽기 어려운 것으로 널리 간주됩니다. 약간 더 좋은 해결책은 set
명령을 괄호 안에 넣는 것입니다.
(set a=SoLong) & echo ...
따라서 값은 )
.