Как поставить отметку времени при копировании файлов в цикле for внутри командного файла - PullRequest
0 голосов
/ 14 октября 2011

Помогите пожалуйста!Я новичок в пакетных файлах и у меня очень специфический вопрос.Я пытаюсь скопировать множество файлов в нескольких подкаталогах в один каталог с помощью цикла for, а между тем прикрепить временную метку к каждому имени (поскольку все файлы имеют одно и то же имя).Я использую системную переменную time и анализирую ее внутри цикла, но локальные переменные внутри цикла получают назначенный мусор.Я уже знаю о задержке расширения и использования!знак вместо%, но это не помогает мне.вот код:

@echo off
SetLocal EnableDelayedExpansion
set counter=1
echo in the beginning the counter is "%counter%"
:loop
for /r "c:\users\wimdu\dropbox\wimdu CRM\emarsys reports - campaigns" %%f in (bounce*.*) do (
set a = %time::=%
echo in loop a equals "!a!"
echo the time is !time!
set b=!a:,=!

copy /y "%%f" c:\users\wimdu\documents\bouncehandling\bouncecsvfiles\%b%.csv
)
EndLocal

Итак, в основном имена файлов будут, например, 10151821.csv (отметка времени, включая миллисекунды).в идеале это будет исходное имя файла (bounces), объединенное с отметкой времени с расширением .csv.Я попробовал все, но с отметкой времени ничего не работает, просто не назначен правильно.А потом б тоже.Я не знаю, как разобрать a, а затем назначить его в b!приметы.Пожалуйста, помогите !!

Ответы [ 2 ]

1 голос
/ 15 октября 2011

Согласитесь с @ jeb по всем пунктам, однако может возникнуть другая проблема. В зависимости от вашей локали, результат %time% может содержать начальный пробел, если текущее время раньше 10 часов утра. Если это так, целевой путь в вашей команде COPY разделяется, поскольку он не заключен в двойные кавычки. В результате команда становится синтаксически неправильной.

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

Сначала я создал простую настройку на своем компьютере:

MKDIR C:\tests\source
MKDIR C:\tests\target

затем скопировал несколько случайных файлов среднего размера в папку C:\tests\source и запустил следующий скрипт:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R "C:\tests\source" %%f IN (*) DO (
  SET a=!time::=!
  SET a=!a:,=!
  COPY /Y "%%f" "\!a!"
)

И вот что появилось в C:\tests\target в результате:

_1395459
_1395470
_1395639

Я должен указать, что _ на самом деле является пробелом, потому что на моем компьютере результат %time% действительно содержит ведущий пробел в этот час, который находится между полуночью и 10 часами утра в этой части мира. Во всяком случае, моя главная мысль в том, что сценарий, который я выложил выше (который, я подчеркиваю, в основном такой же, как ваш), работал для меня.

1 голос
/ 14 октября 2011

Есть несколько проблем.
Вы не установили «а» при добавлении пробела, вы установили «а».
И вы всегда используете одно и то же время, так как% time% будет расширен только один раз при анализе блока:.
Та же самая проблема, которую вы получаете с% b%.
Измените оба варианта на отложенное расширение, и это может сработать.

...