чтение из файла в пакетном скрипте

#batch-file

#пакетный файл

Вопрос:

Вот скрипт, который я создал для поиска дубликатов файлов в папке (он еще не завершен).

 @echo off
dir /b > files.io
for /f "tokens=*" %%a in (files.io) do (
    echo %%a
    FOR %%i IN ("%%a") DO (
        echo filename=%%~ni
        dir /b "%%~ni*" | find /v /c ""
        dir /b "%%~ni*" | find /v /c "">countfiles.io
        type countfiles.io
        set /p nbfic=<countfiles.io
        del countfiles.io
        echo %nbfic%
    )
)
  

У меня есть 3 файла в каталоге, и вот результат :

 abc.sws
filename=abc
2
2
1
abc.txt
filename=abc
2
2
1
def.txt
filename=def
1
1
1
  

Как вы можете видеть, оба dir /b "%%~ni*" | find /v /c "" и type countfiles.io возвращают мне действительный результат, тогда как следующее, похоже, не работает :

 dir /b "%%~ni*" | find /v /c "">countfiles.io
set /p nbfic=<countfiles.io
del countfiles.io
echo %nbfic%
  

Но я не вижу, что может пойти не так с этим кодом…
Заранее спасибо за вашу помощь!!!

Комментарии:

1. Вы находитесь внутри блока кода. Вам нужно использовать отложенное расширение.

2. Большое спасибо, теперь все работает отлично!! Я раньше не слышал о отложенном расширении, но, думаю, мне придется часто его использовать!!

Ответ №1:

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

 Setlocal EnableDelayedExpansion
  

и замена echo %nbfic% на echo !nbfic!

Спасибо @Squashman за помощь !! 🙂