BATCH SCRIPT: проверка наличия файла в папке с использованием forloops - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь выяснить, существует ли файл в той же папке, что и пакетный файл.

Файлы в папке будут похожи на

123.pdf 124.pdf 125.pdf 126.pdf

Файлы для проверки перечислены в файле nr.txt, например 124.pdf 126.pdf

Если файл существует, файл следует скопировать в другую папку с именем nr, расположенную в той же папке, что и пакет, например% ~ dp0 \ nr \

вот что я получил до сих пор

@echo off
SET m=0
for /f %%G in ('dir *.pdf /b') do (for /f %%i in (nr.txt) do (
if %%i==%%G (
echo %%i found
::copy %%i %~dp0\nr\
) else (
SET m=1
echo %m%
)
)
if %m%==1 (
echo %%i not found
SET m=0
)
)
pause

Моя проблема в том, что SET m = 1 не устанавливает переменную.

Заранее благодарю за помощь

EDIT:

Спасибо, я все ближе.

@echo off
SETLOCAL EnableDelayedExpansion
SET m=0
for /f %%i in (nr.txt) do (for /f %%G in ('dir *.pdf /b') do (
if /I %%i==%%G (
echo %%i found
) else (
SET m=1
)
)
if !m!==1 (
echo %%i not found
SET m=0
)
)
pause

H:\Neuer Ordner (2)>check.bat
123.pdf found
123.pdf not found
126.pdf found
126.pdf not found
128.pdf not found

Проблема в том, что мне все еще говорят, что он не находит 123.pdf, но он там есть. Он нашел это однажды.

Я пытался переключить циклы for, но та же проблема.

Проблема в том, что он будет проходить через все файлы в Dir и совпадать. Это будет соответствовать, но всегда не совпадать. Любая идея, как я могу просто отобразить сообщение о поиске, если файл там?

Большое спасибо

1 Ответ

0 голосов
/ 04 июля 2018

Вы, вероятно, могли бы сделать из командного файла, как это:

@For /F Delims^=^ EOL^= %%A In ('Type "nr.txt"') Do @XCopy "%%~A" "nr\" /Y >Nul 2>&1

Если вам нужны ненужные Echo es:

@Echo Off
For /F Delims^=^ EOL^= %%A In ('Type "nr.txt"') Do If Exist "%%~A" (
    Echo %%A Found
    XCopy "%%~A" "nr\" /Y >Nul 2>&1) Else Echo %%A Not Found
Pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...