2015-09-22 4 views
-2

Привет Я хочу установить значение InFile для всех текстовых файлов в каталоге, что означает, что я хочу, чтобы пакетный файл загружался и выполнял команду для всех текстовых файлов в каталоге по одному один.установить значения по именам файлов в каталоге

Обычно я просто копирую команду сколько раз файлов, то я заменяю Infile на каждое имя файла. По этому коду я получаю имена файлов, а затем я их заменяю.

cd /d "dir" 
dir /a /b /-p /o:gen >names.txt 

и вот пример команды.

@Echo OFF 
REM Set These Variables 
SET "InFile=123.txt" 
SET "OutFile=NowLoad.txt" 
SET "Replace=KK" 
SET "ReplaceWith=JJ" 

REM Get Total Lines Number [including empty lines] 
FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""') DO SET "Till=%%A" 

REM Create The OutFile with changes 
SETLOCAL EnableDelayedExpansion 
<"!InFile!" (
    FOR /L %%a IN (1 1 0) DO SET /p "=" 
    FOR /L %%A IN (1 1 %Till%) DO (
    SET "line=" 
    SET /P "line=" 
    IF "!line!x" == "x" (Echo. 
    ) ELSE (Echo !line:%Replace%=%ReplaceWith%!) 
) 
)>>"%OutFile%" 

ENDLOCAL 
+2

Я не думаю, что ваша команда 'dir/a/b/-p o: gen' верна – Paul

+0

Вы должны прочитать, как задать вопрос. Потому что я потерялся после прочтения «Я хочу установить значение InFile для всех текстовых файлов в каталоге» – Paul

+0

Где 'names.txt' используется в вашей партии? – Paul

ответ

0

Другой способ ...

Ваш скрипт DOIT.bat.

Изменение DOIT.bat для использования параметра командной строки для имени файла, который вы хотите обработать.

@Echo OFF 
REM Set These Variables 
SET "InFile=%~1" 
SET "OutFile=NowLoad.txt" 
... 

Создайте еще один файл с именем CALLIT.bat

@ECHO OFF 
FOR /F "usebackq tokens=*" %%f IN (`dir /b *.txt`) DO (
    CALL DOIT.bat "%%~f" 
) 

Запуск CALLIT.bat будет обрабатывать каждый файл .txt в каталоге.

1

нет необходимости рассчитывать строки, просто обрабатывать каждую строку:

setlocal enabledelayedexpansion 
for %%f in (*.txt) do (
    (for /f "delims=" %%A in (%%f) do (
     set line=%%A 
     set line=!line:%Replace%=%ReplaceWith%! 
     echo(!line! 
    ) 
)>%%~nf.out 
) 

Замечание: при ( после echo обрабатывает пустые строки (пустая строка пишется не «эхо выключено», если !line! пуст)

отредактировал для обработки всех файлов .txt в папке. Поскольку фиксированный% oufile% затирает же выходной_файл с каждым переработанного INFILE, я изменил его на новый Extension: <SameNameAsInputFile>.out

+0

Спасибо, но это был всего лишь пример, который я хочу задать именам файлов для значений, которые были просто примером. :) –

+2

@kmthrongkmthrongi Если вы не дадите точных примеров, вы часто не сможете получить работоспособные решения. Это язык программирования и нуждается в конкретных деталях для написания точного кода. – foxidrive

+0

@foxidrive соглашается с вами, но на этот раз я объяснил все, что так очевидно, и ничего не случилось с этим примером. Я имею в виду, что я пытаюсь решить его как задание значений каждый раз и запуск скрипта, но чувак Стефан решил это другим способом, я просто сказал TNX, но мне нужно, чтобы он был в том методе, который я написал (установив значения). –

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