이 파일 이름은 Windows 공유의 디렉토리에 놓이는 데, 파일 이름에 키워드 중 하나가 있는지 여부에 따라 사용자의 로컬 컴퓨터의 올바른 위치에 있어야합니다.
예를 들면 :
z:\mailbox\in\Very_but#very-very!long#filenameWITH-keyword+in^it
여기서 z:
승리-7 또는 윈 - (10) 기계의 세트에서 액세스 할 수 있습니다. 그리고 이러한 컴퓨터에는 다음 두 개의 디렉토리가 있습니다.
c:\incoming\special
c:\incoming\regular
파일 이름에 키워드 중 하나가 포함 된 c:\incoming\special
경우 폴더로 이동해야하는 경우 폴더에 복사 해야 c:\incoming\regular
합니다.
내 키워드는 파일에 있습니다. 예를 들어, c:\keywords.txt
언제든지 (5 분마다 확인) 파일이 없거나 z:\mailbox\in
디렉토리에 파일이 하나만있을 수 있습니다 .
그래서, 이것은 내가 생각한 것입니다. 작동하지 않습니다. (배치 파일은 처리 할 파일이 있다고 가정하고 아직 파일이 없다면 어떻게 해야할지 모르겠습니다)
dir /b z:\mailbox\in > tmp.out
set /p file=<tmp.out
del tmp.out
set keyword_found_flag=0
for /F "tokens=*" %%keyword in (c:\keywords.txt) do (
echo %file% | find /i "%%keyword"
if errorlevel=0 set keyword_found_flag=1
)
오류 수준은 키워드가 있는지 여부에 관계없이 항상 0입니다.
IF keyword_found_flag=1 (
copy z:\mailbox\in\%file% c:\incoming\special
) ELSE (
copy z:\mailbox\in\%file% c:\incoming\regular
)
여기서 무엇을해야할지 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다
&&
실행이 일치하면 연산자 ( )를 사용하여 플래그를 설정 하지 않는 이유 는 무엇입니까?
echo %file% | find /i "%%keyword" >nul && set keyword_found_flag=1
또한 프로세스를 위해 tmp.out 파일을 생성 / 삭제할 필요가 없습니다. z : \ mailbox \ in의 파일 이름에 대해 double을 사용하고, c : \ keywords.txt에 포함 된 파일을 확인하려면 다른 for를 사용하십시오. z : \ mailbox \ in ...의 파일 이름
@echo off
set "keyword_found_flag=" && for /f tokens^=* %%i in ('dir /on /b /a:-d "z:\mailbox\in\*.*"
')do for /F tokens^=* %%K in ('type c:\keywords.txt')do echo="%%~i"| find /i "%%~K" && (
set "keyword_found_flag=1") || (set "keyword_found_flag=0")
또는...
@echo off
set "keyword_found_flag=" && for /f tokens^=* %%i in ('dir /on /b /a: -d "z:\mailbox\in\*.*"
')do for /F tokens^=* %%K in ('type c:\keywords.txt')do echo="%%~i"|find /i "%%~K" >nul && (
set "keyword_found_flag=1" && copy /v "%%~dpnxi" "c:\incoming\special\" ) || (
set "keyword_found_flag=0" && copy /v "%%~dpnxi" "c:\incoming\regular\" )
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다