2015-06-25 2 views
0

Я должен сделать bat-файл, который делает это:Копирование нескольких файлов и добавления даты к имени летучей мыши

Копии из O: \ siirto все файлы, имена которых начинаются с «LS». К C: \ siirto. И имя выхода будет таким же, как в источнике. Но он добавит текущую дату в конец имени файла.

Я пробовал следовать только за тестом, и он, конечно, не работал: D. Но он, возможно, лучше объясняет, что я пытаюсь сделать, чем объяснение выше.

echo off 
xcopy O:\siirto\ls* C:\siirto\ls%date.txt 
pause 

Конечно, не работает. Но это возможно сделать с одним файлом .bat. Или мне нужно сделать все ls.txt-файлы своими .bat-файлами или строками.

Как один для LS1.txt, LS2.txt LS3.txt

echo off 
xcopy O:\siirto\LS1.txt C:\siirto\ls1%date 
pause 

Я понятия не имею, как дата% следует добавить к коду и делает это нужно что-то еще код тоже?

Im все еще на детской обуви в программировании ...

благодаря

+0

имена переменных имеют '%' спереди И в конце: это '% date%'. Но он может содержать недопустимые символы для имен файлов - см. Ответ JosefZ. – Stephan

ответ

1

вам нужно объединить итерации над файлами с FOR команды и переменной в %DATE% среды. Прочитайте HELP FOR, обратив внимание на синтаксис% ~ расширения и попробуйте следующий код.

for %%a in (o:\siirto\ls*) do (
    echo copy "%%a" "c:\siirto\%%~na-%date%%%~xa" 
) 

после тщательного тестирования удалите команду echo.


Вы можете обобщать чуток код, перемещая некоторую настраиваемую информацию из петли

set src=o:\siirto\ls* 
set dest=c:\siirto 
for %%a in (%src%) do (
    copy "%%a" "%dest%\%%~na-%date%%%~xa" 
) 

и, в случае, %date% команды возвращает недопустимые символы, прочитать мой принятый ответ на этот SO вопрос Batch script date into variable, а затем измените переменную на ту, которая содержит текущую дату, в соответствующем формате.

+0

Это было первое, что я тестировал. Он работал так ...: D спасибо за все ответы – Lazu

0

%date% может содержать символы not allowed in file names. Попробуйте следующий локализованную независимый подход:

@ECHO OFF 
SETLOCAL enableextensions 

for /F %%g in (' 
    wmic OS get LocalDateTime /value^|findstr "=" 
    ') do for /F %%G in ("%%g") do set "_%%G" 

set "_LocalDateTime=%_LocalDateTime:~0,8%" 

for /F "delims=" %%G in (' 
    dir /b O:\siirto\ls*.txt 
    ') do echo copy /B "O:\siirto\%%G" "C:\siirto\%%~nG_%_LocalDateTime%%%~xG" 

Ресурсы (обязательное чтение):

0

Переменная %date% по умолчанию содержит текущую дату, но формат даты зависит от настроек пользователя, поэтому он может содержать разделители, такие как /-., может иметь имя дня и разделитель пространства и может иметь номер дня и месяц -number с подавленным-ведущим-нолем.

Существует много статей о SO о форматировании строк даты в полезном формате - рекомендуется формат yyyymmdd, так как этот формат автоматически по имени в хронологическую последовательность.

Обратите внимание, что использование переменной date нецелесообразно, так как эта дата устанавливается и поддерживается системой, и любая пользовательская настройка отменяет предполагаемую настройку системы. Используйте практически любое другое допустимое имя переменной (тот же комментарий относится и к random и time, среди прочих).

Итак, если вы назначьте дату в формате, который вы хотите переменной today затем

for %%a in (o:\siirto\ls*.txt) do (
    echo(copy "%%a" "c:\siirto\%%~na%today%%%~xa" 
) 

будет выполнять требуемую копию. %%~na означает название части имени файла в %%a и %%~xa расширение. Обычно следует обращаться к переменным, используя %varname%. Имена файлов: "enclosed in quotes", чтобы гарантировать, что разделители в именах файлов (например, Пробел) считаются регулярными символами, не имеющими специального значения разделителя.

Необходимые команды COPY - это всего лишь ECHO ed для целей тестирования. После того, как вы подтвердили правильность команд, измените ECHO(COPY на COPY, чтобы фактически скопировать файлы. Append >nul подавить сообщения отчета (например. 1 file copied)

0

Вы можете сделать все это в одной строке с помощью forfiles1

forfiles /P O:\siirto /M ls*.txt /C "cmd /c copy @path C:\siirto\@fname-%date:~6,4%-%date:~3,2%-%date:~0,2%.txt" 

Здесь forfiles просматривает все файлы в указанном пути /P, которые соответствуют маске /M , затем запускает команду для каждого найденного файла @path, чтобы скопировать его в новое место с добавленной датой. @fname здесь просто дает вам имя файла без пути или расширения.

Переменная %date% обычно дает что-то вдоль линий 25/06/2015, или даже Чт 25/06/2015, в зависимости от ваших настроек. Вот почему вам нужно указать его части.

%date:~6,4% выбирает от седьмой до 11-й цифры в дате (отсчет начинается с 0), что дает год. %date:~3,2% дает вам месяц (или день, в зависимости от того, где вы находитесь в мире), и %date:~0,1% дает вам день (или месяц, опять же в зависимости от того, где вы).

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

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