У меня было несколько файлов с именами cp1_2015_09_10.txt cp3_2015_09_11.txt kmps_2014_08_03.txt и cpms_2015_07_10.txt ksms_2015_10_07.txt в папке подкаталога диска D контрольной папки. я хотел удалить имя файла из цикла for, например _2015_10_07 на сегодняшнюю дату

setlocal
SET /A MAXJ=1
SET /A J=1

set   year=%date:~10,4% 

set year=%year: =%
echo %year%

set  month=%date:~7,2%
set month=%month: =%

set  day=%date:~4,2%
set day=%day: =%

FOR /F "usebackq tokens=*" %%i IN (DIR /S /B D:\check\*.txt| find /v "_%year%_%month%_%day%")  DO ( 

    SET XCOUNT_!J!=%%~i
SET MAXJ=!J!
    SET /A J+=1)
SET XCOUNT

SET /A J-=1

@echo COUNT OF FILES IS : %J%
PAUSE

1 ответ1

0

Я хотел удалить имя файла из цикла for

FOR /F "usebackq tokens=*" %%i IN (DIR /S /B D:\check\*.txt| find /v "_%year%_%month%_%day%")  DO (

Ваш синтаксис for неверен по двум причинам:

  1. Вы используете usebackq

    • Это означает, что аргумент команды для for должен быть разделен обратными кавычками `
  2. Вы не избегаете символа трубы.

    • Заменить трубу | символ с ^|

Исправлено for команды:

FOR /F "usebackq tokens=*" %%i IN (`DIR /S /B D:\check\*.txt ^| find /v "_%year%_%month%_%day%"`)  DO (

В вашем командном файле могут быть и другие ошибки ...


Синтаксис

FOR /F ["опции"] %% параметр IN ('command_to_process') DO команда

ключ

опции:

usebackq Использовать альтернативный стиль цитирования:

  • Используйте двойные кавычки для длинных имен файлов в "filenameset".
  • Используйте одинарные кавычки для "Текстовой строки для обработки"
  • Используйте обратные кавычки для command_to_process

Источник для / F


Побег персонаж

^ Побег персонажа.

Добавление escape-символа перед символом команды позволяет рассматривать его как обычный текст.

При передаче или перенаправлении любого из этих символов & , \ , < , > , ^ или | Вы должны префикс их с escape-символом.

Например, ^\ ^& ^| ^> ^< ^^

Исходный синтаксис

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .