2016-11-08 1 views
0

과 폴더에있는 파일에 관한 법률 원래 이름을 유지하면서 암호화 된 ZIP 파일을 생성하는 와일드 카드 (이 경우 wmv 파일).배치 만 나는 문에 대해 다음 한 특정 이름

내가해야 할 일은이 스크립트가 특정 이름을 가진 폴더에서만 작동하도록 명령하는 것입니다. 단지 모든 지퍼에,

root 
|-20120211 
    |-20 
    |-21 
|-20130425 
    |-34 
    |-21 
|-20140516 
    |-10 
    |-22 
|-20150728 
    |-230 
    |-213 
and so on... 

그리고 내가 무엇을 할 필요가, 예를 들면 : 나는 디렉토리 (그 안에 하위 디렉토리에 WMV 파일 및 포함)이 유사한 구조를 가지고

예를 들면 다음과 같습니다이다 파일 이름은이를 위해 2015 *

로 시작하는 마지막 폴더 안에있는 파일, 나는 문에 합치 시도했습니다, 더 구체적으로, 뭔가 같은 :

FOR /D %%P IN (2015*) DO (run my other FOR here) 

하지만이 작업이 수행하는 유일한 작업은 해당 구조 내의 폴더 이름이 "2015 *"와 일치하는지 확인하는 것입니다. 그렇다면 ... 모든 폴더, 모든 폴더의 모든 파일을 압축합니다. "2015"로 시작하는 것.

나는 웹을 검색했으나이를 실제로 도울 수있는 예제가 발견되지 않았습니다. 당신이 이것을 달성하는데 나를 도울 수 있다면, 나는 당신에게 배울 것입니다. =)

미리 감사드립니다!

+0

for/R 루프를 사용하지 않는 것은 어떨까요? '%% ~ D \ *. wmv'의 % D에 대해/D %% D in ("root \ 2015 *")) do (...)'? 또는'-20.','-21' 등이'* .wmv' 파일을 모두 담고있는 폴더 인 경우 :/D %% D in ("root \ 2015 *") do/("%% ~ E \ *. wmv")에서 %% F에 대한 D %% E in ("%% ~ D \ *") do (...)'(내부 루프 본문에서' "%% ~ F"'를 두 번 사용) – aschipfl

답변

1
FOR /D %%P IN (2015*) DO PUSHD "%%P"&(FOR /R %%i IN ("*.wmv") DO ECHO %%i)&POPD 

은 설명을 제공해야합니다.

파일 이름은 간단히 echo입니다. 현재 디렉토리가 그래서 필요한 대상 디렉토리가 가정

+0

불행히도'for/R'은'for' 변수 나 지연된 확장 변수를 루트 디렉토리에 허용하지 않으므로이 기능은 작동하지 않습니다. 해결 방법은 [내 대답] (http://stackoverflow.com/a/40503715)을 참조하십시오 ... – aschipfl

+0

@aschipfl : 다시 좋은 점 찍기! 실제로 제안을 테스트하지 않은 경우 항상 발생합니다. 수정 된 솔루션이 게시되었습니다 ... – Magoo

+0

네, 나도 알아, 나에게 몇 번이나 뛰어 들었어 ... 좋은 해결! 내가별로 좋아하지 않는 유일한 사실은 하나의'pushd'가 있지만 여러 개의'popd'-s가 있다는 사실입니다; 'echo /'7za'를 제외하고'push/popd '를 제외하고'for/R' 루프를 괄호 안에 묶는 것은 어떨까요? 이렇게하면 다른 'pushd' /'popd' 블록 사이에 삽입해도 코드가 작동합니다. '%% i''가'for/R' 때문에 풀 경로로 확장된다는 것을 기억하십시오 ... – aschipfl

0

지정이 필요합니다 아카이브 명령과 함께 echo를 대체 echo이 실행되는 시점에서의 파일 - 투 - 보관 디렉토리 될 것으로 기억 항목 20이, 21 등 모든 *.wmv 파일을 포함 할뿐만 아니라 폴더가 있으며, 다음과 같은 작업을해야 다음 *.wmv 파일도같은 상위 폴더에있을 수 있습니다 경우

for /D %%D in ("root\2015*") do (
    for /D %%E in ("%%~D\*") do (
     for %%F in ("%%~E\*.wmv") do (
      "7za.exe" -sdel a -mx0 -tzip -pPASSWORDHERE -mem=AES256 -y "%%~dpnF.zip" "%%~F" 
     ) 
    ) 
) 

, 당신은 둥지 이런 for /D 루프에서 for /R 루프 수 : for /R 다른 for 변수를 허용하지 않기 때문에

for /D %%D in ("root\2015*") do (
    call :SUB "%%~D" 
) 
exit /B 

:SUB 
for /R "%~1" %%F in ("*.wmv") do (
    "7za.exe" -sdel a -mx0 -tzip -pPASSWORDHERE -mem=AES256 -y "%%~dpnF.zip" "%%~F" 
) 
exit /B 

당신은 /R 후 루트로 사용되는, 여기에 서브 루틴이 필요합니다. 이는 for 변수가 아직 처리/확장되지 않은 초기 파싱 단계에서 루트가 적용된다는 사실 때문입니다.

관련 문제