2013-08-09 1 views
1

도움이 필요합니다. 한 폴더에서 다른 폴더로 파일을 옮기는 배치 파일을 만들려고합니다. 파일 이름은 yyyy-mm 형식의 변수와 날짜 이전 또는 이후의 추가 데이터를 갖습니다. 일괄 처리는 파일을 mmmm-yy 폴더 이름이 같은 서버 디렉토리로 이동해야합니다.배치 파일 - 날짜 변수 및 한 날짜의 파일 이름이 다른 폴더로 이동하는 파일

아래 코드를 생각해 냈지만 제대로 작동하지 않습니다.

  1. "누락 된 피연산자"오류가 반환됩니다.
  2. 새 디렉터리가 만들어 지지만 파일이 이전 폴더에서 새 폴더로 이동하지 않습니다.

내 코드 :

@echo off 

FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    SET /A MONTH=%%D 
    SET /A YEAR=%%F 
) 

:: Set month to last month 
set /a MONTH=%MONTH%-1 

:: If month equals zero, reset to 12 
if %MONTH%==0 set MONTH=12 

:: If month < 10, fill with zero 
if %MONTH% LSS 10 set MONTH=0%MONTH% 

:: If month = 12, subtract one year 
if %MONTH%==12 set /a YEAR=%YEAR%-1 

SET FILEDATE=%YEAR%-%MONTH% 

SET FOLDER2=E:\ARCHIVE\%FILEDATE% 

MKDIR %FOLDER2% 

:: trying to recreate the format MOVE C:\FOLDER1\\*2013-07*.* E:\FOLDER2\2013-07 which does work 
MOVE C:\FOLDER1\\*%FILEDATE%*.* %FOLDER2% 

:END 

EXIT 

편집 : 정말 도움이 두 대응보다. 나는 그들에게 투표를 시도했지만 내 평판이 좋지 않다고 생각한다. 어머니는 옳았습니다. 그것은 당신을 멀리 얻을 것이다. :)

답변

3

당신은 더 나은 %date%하지 wmic를 사용해야합니다,하지만 당신은 시도 할 수 있습니다 :

for /f "skip=1 delims=" %%a in ('WMIC Path Win32_LocalTime Get Month^,Year /Format:table') do for /f "tokens=1,2" %%b in ("%%a") DO SET "month=%%b" &SET "year=%%c" 
+0

답장을 보내 주셔서 감사합니다. 불행하게도이 코드는 더 많은 오류를 발생 시켰습니다. .... ' "SET month = 8"'은 내부 또는 외부 명령, 작동 가능 프로그램 또는 배치 파일로 인식되지 않습니다. MONTH = 0-1 YEAR = 2013 .... 또한 문제는 날짜 필드를 구문 분석하는 대신 파일을 이동하는 것입니다. – jubilare

+0

또한이 배치 파일은 모든 직원이 사용하기 때문에 시스템 날짜를 어떤 형식으로 설정했는지 확신 할 수 없습니다. 연구에 따르면 WMIC가 더 안전하다고합니다. 그러나 귀하의 의견에 감사드립니다. – jubilare

+0

거기에 잘못된 큰 따옴표가있었습니다. 'MOVE' 명령에서 % FILEDATE % 뒤에 별표가 없습니다. Foxidrive의 대답을보십시오. – Endoro

1

그냥 사소한 편집 - 그것은 작동합니다 것 같습니다 - 당신의 설명이 폴더를 잘 작성되는 말한대로 .

MOVE "C:\FOLDER1\*%FILEDATE%*" "%FOLDER2%" 
+0

감사합니다, foxidrive. 내 원래 게시물에 오타를 만들었습니다. 내 코드에는 실제로 별표 (C : \ FOLDER1 \\ * % FILEDATE % *. * % FOLDER2 %)가 있습니다. 그러나 당신이 당신의 예제에서 보여 주었던 것처럼 두 요소를 둘러싼 따옴표를 추가했는데 여전히 효과가 없습니다. 또한 *. * FILEDATE % * 후에 *. *을 (를) 제거했지만 여전히 작동하지 않습니다. Stumped! – jubilare

+0

'MOVE' 라인 다음에'pause' 명령어를 넣고 어떤 에러 메시지가 나타나는지 알려주십시오. – foxidrive

+0

빠른 응답을 보내 주셔서 감사합니다. 오류 메시지는 실제로 도움이되지 않았지만 모든 변수를 다시 표시했으며 FOR 변수 다음에 어딘가에 후행 공백이있는 MONTH 변수가 나타납니다. 연구 및 수정 후, 후행 공백은 사라지고 MOVE 명령이 작동합니다. 도와 주셔서 정말 고맙습니다. – jubilare

관련 문제