При попытке вызвать другой пакетный файл в цикле for выдается ошибка «Системе не удается найти указанный путь». - PullRequest
0 голосов
/ 30 мая 2018

Я часами пытался отлаживать свой код ниже, но все еще не мог понять, что не так с моим кодом ниже.Я получаю сообщение об ошибке «Система не может найти указанный путь».Ценю некоторые советы по этому вопросу.Благодарю.

 @echo off &setlocal
    setlocal enableextensions enabledelayedexpansion
    for /f "delims=" %%i in ('dir /b "D:\*.bat"') do (
        for /f "usebackq tokens=1-4 delims=," %%a in ("sample.csv") do (
            set "search=profile"
            set "replace=profile-%%a"
            set "textfile=login.txt"
            set "newfile=login-%%a.txt"
            call Repl.bat "%search%" "%replace%" L < "%textfile%" > "%newfile%"     
            echo %%a %%b !search! !replace!
            )
    )

1 Ответ

0 голосов
/ 30 мая 2018

Вы уже использовали необходимое расширение с задержкой в ​​строке под вызовом командного файла:

@Echo Off
SetLocal EnableDelayedExpansion
For /F "UseBackQ Tokens=1-2 Delims=," %%A In ("sample.csv") Do (Set "search=profile"
    Set "replace=profile-%%A"
    Set "textfile=login.txt"
    Set "newfile=login-%%A.txt"
    Call "Repl.bat" "!search!" "!replace!" L<"!textfile!">"!newfile!"
    Echo %%A %%B !search! !replace!)
Pause

Однако, поскольку вы уже используете Call, возможно, вы сможете удвоитьсимволы в процентах:

@Echo Off
SetLocal EnableDelayedExpansion
For /F "UseBackQ Tokens=1-2 Delims=," %%A In ("sample.csv") Do (Set "search=profile"
    Set "replace=profile-%%A"
    Set "textfile=login.txt"
    Set "newfile=login-%%A.txt"
    Call "Repl.bat" "%%search%%" "%%replace%%" L<"%%textfile%%">"%%newfile%%"
    Echo %%A %%B !search! !replace!)
Pause

Конечно, вы можете решить не устанавливать ненужные переменные, исключая зависимость от отложенного расширения:

@Echo Off
For /F "UseBackQ Tokens=1-2 Delims=," %%A In ("sample.csv") Do (
    Call "Repl.bat" "profile" "profile-%%A" L<"login.txt">"login-%%A.txt"
    Echo %%A %%B profile profile-%%A)
Pause

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

@Echo Off
Set "search=profile"
Set "replace=profile-%%A"
Set "textfile=login.txt"
Set "newfile=login-%%A.txt"
For /F "UseBackQ Tokens=1-2 Delims=," %%A In ("sample.csv") Do (
    Call "Repl.bat" "%search%" "%replace%" L<"%textfile%">"%newfile%"
    Echo %%A %%B %search% %replace%)
Pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...