#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 за помощь !! 🙂