#batch-file
#пакетный файл
Вопрос:
У меня есть пакетный скрипт, который должен анализировать файл с именами файлов и временными метками в нем.
:MAIN
SETLOCAL EnableDelayedExpansion
FOR /F "tokens=1,2,4 skip=7" %%A in (C:list_of_psa_files.txt) DO
@echo %%A %%B %%C
exit
Файл C:list_of_psa_files.txt содержит в себе следующие данные
Volume in drive C is Windows XP 6.6
Volume Serial Number is AC12-84AA
Directory of C:Test
10/05/2011 03:17 PM <DIR> .
10/05/2011 03:17 PM <DIR> ..
10/05/2011 01:21 PM 4,393 1-16332-1008261.psa
10/05/2011 01:21 PM 4,863 1-16332-1011698.psa
10/05/2011 01:21 PM 4,793 1-16332-1023151.psa
10/05/2011 01:21 PM 4,916 1-16332-1035695.psa
10/05/2011 01:21 PM 4,524 1-16332-1037029.psa
10/05/2011 01:21 PM 4,235 1-16332-1049340.psa
10/05/2011 01:21 PM 3,135 1-16332-1049926.psa
10/05/2011 01:21 PM 4,657 1-16332-1054756.psa
Однако, когда я запускаю свой скрипт, он выдает ошибку с недопустимым синтаксисом сообщения. Может кто-нибудь, пожалуйста, помочь мне понять, где я ошибаюсь.
Все, что я пытаюсь сделать, это получить дату, время и имя файла без расширения, записанные в новый файл из моего старого файла.
Спасибо за ваше время — ценю это.
Сандерс.
Ответ №1:
Если у вас действительно есть ваш echo
файл в отдельной строке (и это не артефакт процесса редактирования), вы не можете этого сделать. Вам нужно будет использовать либо одну строку, либо:
FOR /F "tokens=1,2,4 skip=7" %%A in (C:list_of_psa_files.txt) DO (
@echo %%A %%B %%C
)
Когда я создаю файл и сценарий, которые вы показываете, я получаю:
The syntax of the command is incorrect.
Когда я затем меняю его на предложенный мной вариант, он выводит:
10/05/2011 01:21 4,393
10/05/2011 01:21 4,863
10/05/2011 01:21 4,793
10/05/2011 01:21 4,916
10/05/2011 01:21 4,524
10/05/2011 01:21 4,235
10/05/2011 01:21 3,135
10/05/2011 01:21 4,657
как и ожидалось. Тот же вывод появляется, когда вы выполняете это в одной строке с:
FOR /F "tokens=1,2,4 skip=7" %%A in (C:list_of_psa_files.txt) DO @echo %%A %%B %%C
Комментарии:
1. Но затем, когда я попытался перенаправить свой вывод в другой файл, я получил только одну строку. Вот так — 05.10.2011 01:10 24 971, И код для этого — SETLOCAL EnableDelayedExpansion :MAIN ДЛЯ /F «токены = 1,2,4 пропустить = 5» %%A в (C:list_of_psa_files.txt ) ДЕЛАТЬ ( @echo %%A %%B %%C > C:list_of_file_ts.txt ) выход
2.Это другой вопрос, @user982201, но я все равно помогу вам. Вы выполняете
blah blah >out.txt
для каждой итерации. Другими словами, каждая итерация перезаписывает файл, что означает, что вы получите только последний. Выполните adel out.txt
передfor
оператором, чтобы очистить его, затем используйте>>
вместо>
, чтобы каждая итерация добавляла свои данные, а не перезаписывала их.3. 1 Если это одна команда, которая не длинная, для сохранения цифровых деревьев используйте одну строку. Отсутствие необходимости использовать 3 строки кода при чтении 1 строки одинаково продуктивно в этом случае.
4. @user982201, не забудьте нажать галочку рядом с ответом, который ответил на ваш вопрос.