2016-09-13 4 views
0

У меня есть пакетный файл, который я собрал вместе, что работает. Тем не менее, я думаю, что кодирование является немного уродливым, и возможно или возможно, это должно быть сделано лучше.Пакетные файлы Если оператор

По существу этот файл запускается через запланированную задачу ежедневно и предназначен для просмотра внутри определенного каталога для файла csv со студенческой учетной записью и кредитной информацией.

Если файл найден, он обрабатывается скриптом, если нет, то его отметили, что файл не найден и сценарий завершен.

Бит, который я пытаюсь «сделать лучше», заключается в том, что, когда обнаружен csv IS, мне нужно выяснить, в каком месяце мы находимся, а затем действие зависит от этого. Таким образом, в этом случае, если переменная месяца возвращает 01,02,03,04,05,06,07 или 08, тогда к обработке файла будет добавлено примечание «Кредитное распределение 15/16»

В качестве альтернативы, если месяц должен быть чем-то еще (IE 09,10,11,12), то файл обрабатывается таким же образом, но в примечании будет указано «Кредитное распределение 16/17»

Может ли кто-нибудь предложить лучшее кодирование ? структура для «если» заявления в ниже

@echo off 

::Define Variables 
SET server_command="c:\Program Files\PaperCut MF\server\bin\win\server-command.exe" 
SET master="c:\credit_allocation\processed\master.csv" 

SET month=%date:~3,-5% 

SET year=%date:~8% 
SET /a sum=%date:~8%+1 
echo %sum% > next_year.txt 
SET /p next_year=<next_year.txt 
DEL next_year.txt 

SET /a sum2=%date:~8%-1 
echo %sum2% > last_year.txt 
SET /p last_year=<last_year.txt 
DEL last_year.txt 


IF EXIST "c:\credit_allocation\student_credit.csv" GOTO Do_Stuff 
echo. >> %master% 
echo.No CSV Found at %time:~0,5% on %date% >> %master% 
GOTO EOF 

:Do_Stuff 

::Add run date/time to master record 
echo. >> %master% 
echo.Process run at %time:~0,5% on %date% >> %master% 


::Find out the month, IE- Jan to Aug then still previous student year, or Sept to Dec then next student year 

IF /I "%month%"=="01" (
    GOTO Jan2Aug 
) 
IF /I "%month%"=="02" (
    GOTO Jan2Aug 
) 
IF /I "%month%"=="03" (
    GOTO Jan2Aug 
) 
IF /I "%month%"=="04" (
    GOTO Jan2Aug 
) 
IF /I "%month%"=="05" (
    GOTO Jan2Aug 
) 
IF /I "%month%"=="06" (
    GOTO Jan2Aug 
) 
IF /I "%month%"=="07" (
    GOTO Jan2Aug 
) 
IF /I "%month%"=="08" (
    GOTO Jan2Aug 
) 



::Sept to Dec - Loop through CSV file for username 
for /f "tokens=1,2 delims=," %%a in (c:\credit_allocation\student_credit.csv) do (
%server_command% adjust-user-account-balance "%%a" "%%b" "Credit Allocation %year% /%next_year%" 
) 
GOTO Update_Master_Record 


:Jan2Aug 
::Jan to Aug - Loop through CSV file for username 
for /f "tokens=1,2 delims=," %%a in (c:\credit_allocation\student_credit.csv) do (
%server_command% adjust-user-account-balance "%%a" "%%b" "Credit Allocation %last_year%/%year%" 
) 


:Update_Master_Record 
::Take contents of CSV and append to a Master CSV record then delete original CSV file 
cd c:\credit_allocation 
forfiles /m *.csv /c "cmd /c echo. >> %master% && type @file >> %master% && del @file" 

:EOF 
+2

Этот вопрос может лучше подходят на [Просмотр Кода] (http://codereview.stackexchange.com/). – aschipfl

ответ

0

Вот быстрый непроверенных переписан:

@ECHO OFF 
SETLOCAL ENABLEEXTENSIONS 

REM Define User Variables 
(SET master=c:\credit_allocation\processed\master.csv) 
(SET stucred=c:\credit_allocation\student_credit.csv) 
(SET srv_cmd=%ProgramFiles%\PaperCut MF\server\bin\win\server-command.exe) 
(SET option=adjust-user-account-balance) 

IF NOT EXIST "%student%" ((ECHO= 
    ECHO=No CSV Found at %TIME:~,5% on %DATE%)>>"%master%" 
    GOTO :EOF) 

SET "year=%DATE:~-2%" 
SET "month=1%DATE:~-7,2%" 
IF %month% GTR 108 (SET/A "adj_y=(2%year%-100)-1" 
    CALL SET "adj_y=%%adj_y:~-2%%/%year%") ELSE (SET/A "adj_y=(1%year%-100)+1" 
    CALL SET "adj_y=0%%adj_y%%" 
    CALL SET "adj_y=%year%/%%adj_y:~-2%%") 

REM Add run date/time to master record 
(ECHO= 
    ECHO=Process run at %TIME:~,5% on %DATE%)>>"%master%" 

REM Loop through CSV file for username 
FOR /F "TOKENS=1,2 DELIMS=," %%I IN (%stucred%) DO (
    "%srv_cmd%" %option% "%%~a" "%%~b" "Credit Allocation %adj_y%") 

REM Propagate Master CSV with contents of student CSV and delete student CSV 
TYPE "%stucred%">>"%master%" && DEL "%stucred%" 

Пожалуйста, не пытайтесь его на реальных данных, пока не было проверено, как функциональная

+0

Большое спасибо за то, что нашли время для этого. Должен признаться, я не пытался запустить его в производство, но ваша ревизия на самом деле помогла мне понять, как дорабатывать мою версию в любом случае :) Что я изменил, я должен был уменьшить инструкции If только 1 следующим образом; «IF»% месяц% «LSS» 09 »( GOTO Jan2Aug ) ' –

Смежные вопросы