Показать полную графическую версию : [решено] Удалить файлы
ManDraka
28-09-2018, 20:27
Нужно удалить в папке все файлы в названии которых только 2 символа и которые имеют любое расширение
Попробуйте так:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /a:-d "*.*"`
) do for /f "usebackq delims=" %%j in (
`echo %%~ni^| findstr.exe /b /e /r /c:".."`
) do echo del /f /q "%%~i"
)
endlocal
exit /b 0
Для реального удаления уберите echo.
megaloman
29-09-2018, 01:22
Iska, не догоняю, почему нельзя
Del d :\papka\??.*
Потому, что alpap разъяснил: 1 тоже сожрет ...
почему нельзя »
только 2 символа »
d :\papka\??.* »
1 тоже сожрет ...
megaloman
29-09-2018, 02:44
Еще вариант @Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion
Set "Files=Z:\Box_In\??.*"
FOR %%f IN ("%Files%") DO (
Set "Name=%%~nf"
If Not "!Name:~1,1!"=="" Echo Del "%%f"
If Not "!Name:~1,1!"=="" If "!Name:~2,1!"=="" Echo Del "%%f"
)
pause
GoTo :Eof
Для боевого применения убрать Echo
Потому, что alpap разъяснил: 1 тоже сожрет ... »
Да, именно так — под маску ?? попадут и файлы с длиной имени в один символ.
Еще вариант »
Увы, тут под маску попадут файлы такого вида:
12.34.txt
56.7890.txt
ab.cdefgh.txt
Другая опасность использования масок из ? — например, под маску с восемью ? попадут почти все файлы, если разрешено создание коротких имён формата 8.3 (кроме вторичных жёстких ссылок, для которых короткие имена не создаются).
megaloman
29-09-2018, 12:00
Iska, исправил@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion
Set "Files=Z:\Box_In\??.*"
FOR %%f IN ("%Files%") DO (
Set "Name=%%~nf"
If Not "!Name:~1,1!"=="" If "!Name:~2,1!"=="" Echo Del "%%f"
)
pause
GoTo :Eof
Увы »
@echo off
setlocal enabledelayedexpansion
set "fld=test"
pushd "%fld%"
for /f "delims=" %%i in ('dir /b/a-d ">>.<"') do (
set "var=%%~ni"
set "tmp=!var:~1!"
if defined tmp echo %%~i
)
popd
pause
YuS_2, ну-ка, рассказывайте, что дают > и < в маске?
ну-ка, рассказывайте, что дают > и < в маске? »
Чтобы не перепечатывать кучу текста:
ссылка (https://ss64.com/nt/syntax-wildcards.html)
YuS_2, спасибо, ясно.
Самое интересное — сам не раз бывал на этой странице, но как-то память не зацепила:
Undocumented Wildcards
…
…
P.S. И есть у меня подозрение, что и в будущем не вспомню :lol:.
И есть у меня подозрение, что и в будущем не вспомню »
Дык, человеческая память - штука такая, когда оно часто не требуется, может стереть информацию нафик как ненужную... :)
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову.
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову. »
Дык, это если более не применимо будет, как «Undocumented Wildcards» в командлетах PowerShell (в WSH работает). А, скажем, и ?, и * в масках, и связанное с этим использование имён в формате 8.3 — всё ещё помнить надо. Пока не поправят функции FindFirstEx/FindNextEx (хотя я думаю, никто их уже править не будет, дабы не рушить совместимость, кому надо учитывать такое поведение — давно его учитывают).
А, скажем, и ?, и * в масках, и связанное с этим использование имён в формате 8.3 — всё ещё помнить надо. »
Ну, так ведь, это стандартные wildcards, а не ">" и "<", они много где, именно в таком виде используются, тут волей-неволей не забудешь :)
YuS_2, ну, мне потребовалось три раза (!) столкнуться, чтобы запомнить, что любое применение масок в командах, использующих FindFirstEx/FindNextEx, работает не только для оригинальных «длинных» имён файлов, но и для их коротких «псевдонимов».
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.