Пакетный скрипт — недопустимый синтаксис в /F

#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 для каждой итерации. Другими словами, каждая итерация перезаписывает файл, что означает, что вы получите только последний. Выполните a del out.txt перед for оператором, чтобы очистить его, затем используйте >> вместо > , чтобы каждая итерация добавляла свои данные, а не перезаписывала их.

3. 1 Если это одна команда, которая не длинная, для сохранения цифровых деревьев используйте одну строку. Отсутствие необходимости использовать 3 строки кода при чтении 1 строки одинаково продуктивно в этом случае.

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