Использование xcopy или копирования для одного файла из нескольких папок

Итак, в создаваемом мной пакетном сценарии я беру один файл из папки, копирую его в папку назначения и переименовываю его в зависимости от того, сколько раз сценарий был зациклен. По сути, мне нужно взять файл с одним и тем же именем из группы разных папок, разнесенных по нескольким компьютерам, и скопировать их в новую папку для работы. Я читал о xcopy и копировании, так как это казалось подходящим вариантом, но я не смог найти ничего, что позволяло бы мне копировать только один именованный файл. Я опубликовал то, что у меня есть для сценария ниже, с комментариями к разделам, которые я не понял:

ECHO off
SETLOCAL enabledelayedexpansion

ECHO Note: Your combined permission list cvs can be found in the desktop folder

SET /A #=-1
:start

SET /A #+=1

:again    
ECHO Please input the file path to the permissionoutput.txt
SET /p permissionoutputpath=

SET "sourcefolder=%permissionoutputpath%"
SET "destinationfolder=C:\Users\kayla\Desktop\HOLDER-CombinedPermissionsLists"
IF not exist "%sourcefolder%\permissionoutput.txt" Echo file not found&goto again
copy "%sourcefolder%\permissionoutput.txt" "%destinationfolder%\permissionoutput%#%.txt"

ECHO Add another file to combine: y or n?
SET /p addanotherfile=
if %addanotherfile%==y goto :start

ОБНОВЛЕНИЕ: Код исправлен с ответом, чтобы он был полностью функциональным для использования в качестве справки.


person JustKay    schedule 14.08.2017    source источник


Ответы (1)


SET /A #=-1
:start

SET /A #+=1

:again    
ECHO Please input the file path to the permissionoutput.txt
SET /p permissionoutputpath=

SET "sourcefolder=%permissionoutputpath%"
SET "destinationfolder=C:\Users\kayla\Desktop\HOLDER-CombinedPermissionsLists"
IF not exist "%sourcefolder%\permissionoutput.txt" Echo file not found&goto again
copy "%sourcefolder%\permissionoutput.txt" "%destinationfolder%\permissionoutput%#%.txt"

ECHO Add another file to combine: y or n?
SET /p addanotherfile=
if /i "%addanotherfile%"=="y" goto start

# - допустимое имя переменной. Он инициализируется значением -1, затем увеличивается в каждом цикле до :start, поэтому первое значение, которое оно будет иметь при использовании, равно 0. (Если вы хотите начать с 1, просто инициализируйте его значением 0)

Далее - ваши sets - НО значимы в строке set, команда будет включена в присвоенное имя / значение переменной, если оно присутствует в инструкции set. "цитирование присвоения" гарантирует, что любые случайные конечные пробелы в строке не будут включены в присвоенное значение.

Что ж - затем убедитесь, что файл существует, и если это не так, то создайте сообщение и вернитесь к :again, что обходит приращение #.

В противном случае просто скопируйте файл. Вы знаете его исходное имя, а ваше целевое имя создается путем включения %#% для включения текущего значения # (все пакетные переменные без исключения являются строками - инструкция set /a просто преобразует строку в двоичную для выполнения требуемых вычислений, а затем преобразует возвращает строку для хранения в среде.)

Наконец, интерпретация запроса на добавление еще одного файла. if /i делает сравнение нечувствительным к регистру. Поскольку у вас нет прямого контроля над ответом пользователя, «цитирование каждой стороны» гарантирует, что синтаксис if не будет нарушен в случае, если пользователь вводит «yup sure 'nuff» или другой неожиданный ответ.

Двоеточие в начале не требуется в goto. Я предпочитаю опускать его, чтобы сохранить последовательность с командой call, где отсутствие двоеточия означает, что будет вызвана внешняя процедура, а двоеточие означает, что процедура находится в этом пакетном файле.

person Magoo    schedule 14.08.2017