Принять переменные из командной строки для поиска по файлам журналов в пакетном файле - PullRequest
0 голосов
/ 23 октября 2019

У меня есть задание, которое выглядит следующим образом:

1. Create a batch file that does the following:
    - Accepts from the command line the following variables:
    - Year (four digit number) of log files that they want to archive
    - Month (two-digit number) of log files that they want to archive
    - Does not display any of the commands to the screen
    - Display just the files names of all of the files in the directory and subdirectories that have the archive attribute turned on in a “wide” display on the screen.
    - Display the message “Beginning archive utility at” and then display the current date and time.
    - Create a subdirectory called archive. If this directory already exists, do not report out an error message.
    - If there are files that correspond to the month and year:
         - Create a subdirectory in the archive directory that corresponds to the month and year entered (six digit number using the format yyyymm)
         -  Move all files with a file name that begins with the corresponding month and year entered (six digit number using the format yyyymm)
        -  If there are not any files that correspond to the month and year entered
         - Returns an error message to explain what happened and the type of input that was expected
          - Turn off the archive attribute of only the files that have been moved.
         - Display just the files names of all of the files in the directory and subdirectories that have the archive attribute turned off.

Я не до конца понимаю, что подразумевается под этим, я погуглил на помощь, но он указывает мне на ресурс https://ss64.com/nt/syntax-args.html.Я пробовал статьи переполнения стека для этого, и я не понимаю, как принять «переменные из командной строки». Это то, что я должен сделать набор / p %%? но тогда как мне пройти через это для поиска файлов в папке, в которой находятся эти файлы журналов?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Вот ответ, чтобы покрыть первые 8 строки вашего опубликованного элемента 1. с некоторой художественной лицензией :

@Echo Off

Rem Accept from the command line a four digit year and a two digit month.

:AskYear
Rem Clear the console.
ClS
Rem Undefine any existing variable named YYYY.
Set "YYYY="
Rem Ask the user to input a year between 1970 and 2019.
Set /P "YYYY=Please enter a four digit year e.g. 2016 >"
Rem Return to ask again if the user did not enter a four digit year between 1970 and 2019.
Echo "%YYYY%"|FindStr /R "^\"19[7-9][0-9]\"$ ^\"20[0-1][0-9]\"$">NUL||GoTo AskYear

:AskMonth
Rem Clear the console.
ClS
Rem Undefine any existing variable named MM.
Set "MM="
Rem Ask the user to input a two digit month. 
Set /P "MM=Please enter a two digit month e.g. 05 >"
Rem Return to ask again if the user did not enter a two digit month.
Echo "%MM%"|FindStr /R "^\"0[1-9]\"$ ^\"1[0-2]\"$">NUL||GoTo AskMonth

Rem Display all files with archive attibute in wide format. 
Dir /A-DA/W 2>NUL|FindStr /VBC:" "

Rem Display message followed by current date and time.
Echo(&Echo Beginning archive utility at %TIME% on %DATE%&Echo(

Rem Create subdirectory without error messages.
MD "archive" 2>NUL

Я надеюсь, что вам достаточно помочьпонять требования к этому моменту. Оттуда вам потребуется определить if любые файлы exist, начинающиеся с %YYYY%%MM%, и, если это так, исходить из строки 10 элемента 1.

Пожалуйста, не стесняйтесь изменятьвынесение приговора или удаление Rem ковчега при необходимости.

0 голосов
/ 28 октября 2019
@echo off
If %1Err==Err Goto InputError
If %2Err==Err Goto InputError

cls
dir /w /aa
pause
echo Beginning archive utility at
date /t
time /t
REM Create a subdirectory called archive. If this directory already exists, do not report out an error message. 
If not exist archive md archive
cd archive

REM Create a subdirectory in the archive directory that corresponds to the month and year entered (six digit number using the format yyyymm) 
If not exist %1%2 md %1%2
cd ..

REM Move all files with a file name that begins with the corresponding month and year entered (six digit number using the format yyyymm)
If not exist %1%2* Goto NoFiles
move %1%2* archive\%1%2\

REM Turn off the archive attribute of only the files that have been moved.
attrib -A archive\%1%2\*

DIR /S /A-A

Goto TheEnd

:NoFiles
echo There are not files that begin with %1%2
Goto TheEnd


:InputError
echo when running this command please include a four digit year and a two digit month (Ex: COMMAND 2010 12).
Goto TheEnd

:TheEnd
Echo On
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...