2017-12-01 1 views
1

파일 이름이 ABC0 ... (길이가 고정되어 있지 않음)로 시작하면 파일을 복사하려고합니다. 그러나 아래 코드를 사용하면 파일 이름도 복사 할 수 있습니다 ABCUnit001은 ABCU로 시작합니다.배치 파일 어떻게 파일 이름을 특정 문자로 시작합니까?

setlocal enabledelayedexpansion 
for %%x in (*.txt) do (
set filename=%%~nx 


    if not "!filename=:~0,4!"=="ABC0" ( 
    copy "%%x" "destination path" 
    move "%%x" "Destination path" 
    ) 

) 

아무도 도와 줄 수 있습니까? 감사 및 감사

+1

'copy abc0 * '데스티 네이션 경로 "의 잘못된 점은 무엇입니까?" – Magoo

+0

Hi Magoo, 파일 이름이 abc0으로 시작하는 파일을 대상 경로로 복사하는 경우 오류가 없습니다. 하지만 내 문제는 내 파일 이름조차도 ABCU와 ABCUnit001 의미 시작입니다. 대상 경로에도 복사됩니다. –

+2

기본적으로 모든 파일에는 사용중인 "긴 이름"과 이전의 DOS 명명 시스템과 호환되도록 "짧은 이름"의 두 가지 이름이 있습니다. 'dir/X * .txt'를 사용하면 두 가지 모두를 볼 수 있습니다. 현재 문제로,'! var!'구조체를 사용하려면'for' 명령 앞에'setlocal enabledelayedexpansion'을 삽입해야합니다. – Magoo

답변

1

특히 하드 코딩있는 TargetPath, 여러분의 필요에이 코드를 조정

@for %%x in (*.txt) do @call :MoveIt %%x 
@exit /b 0 

:MoveIt 
@set filename=%1 
@set filename=%filename:~0,4% 
@if /i "%filename%" == "ABC0" @move "%1" "TargetPath" 
@exit /b 

원래의 코드를 진단하려면 다음을 수행하십시오

@setlocal ENABLEDELAYEDEXPANSION 
@set prompt=$G 
@for %%x in (*.txt) do @(
    @set filename=%%~nx 
    @echo filename==%filename% 
    @echo %%~nx 
    @echo %%x 
) 

을 나는 %% 생각 ~ NX 얻지 못한 예상 한대로하고 % filename %이 (가) 비어 있습니다. %% ~ nx는 확장자가없는 파일 이름입니다. 이와 같이 if 문에서 범위 표기법을 사용할 수 있는지 확신하지 못합니다. 필자는 set 명령을 사용/사용하고있는 것을 본 적이 있으며 이는 내가 알고있는 유일한 문서화 된 사용법입니다. 나는 항상 코드를 서브 루틴 호출로 변환함으로써 다중 - 라인 블록을 임베딩하는 것을 피한다.

+0

이 작업은 완벽합니다 ..하지만 왜 위의 코드를 사용할 수 없는지 알 수 있습니까? "Not"를 제거한 후에도 여전히 작동하지 않습니다. –

+0

@ NgZheng, 업데이트 된 답변을 참조하십시오. – jwdonahue

+0

좋아 .. 감사합니다. –