Войти

Показать полную графическую версию : [решено] Удалить файлы


ManDraka
28-09-2018, 20:27
Нужно удалить в папке все файлы в названии которых только 2 символа и которые имеют любое расширение

Iska
28-09-2018, 22:16
Попробуйте так:
@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 тоже сожрет ...

alpap
29-09-2018, 02:25
почему нельзя »
только 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

Iska
29-09-2018, 09:10
Потому, что 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

YuS_2
29-09-2018, 12:07
Увы »
@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

Iska
29-09-2018, 12:18
YuS_2, ну-ка, рассказывайте, что дают > и < в маске?

YuS_2
29-09-2018, 12:22
ну-ка, рассказывайте, что дают > и < в маске? »
Чтобы не перепечатывать кучу текста:
ссылка (https://ss64.com/nt/syntax-wildcards.html)

Iska
29-09-2018, 12:25
YuS_2, спасибо, ясно.

Самое интересное — сам не раз бывал на этой странице, но как-то память не зацепила:
Undocumented Wildcards


P.S. И есть у меня подозрение, что и в будущем не вспомню :lol:.

YuS_2
29-09-2018, 12:41
И есть у меня подозрение, что и в будущем не вспомню »
Дык, человеческая память - штука такая, когда оно часто не требуется, может стереть информацию нафик как ненужную... :)
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову.

Iska
29-09-2018, 13:48
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову. »
Дык, это если более не применимо будет, как «Undocumented Wildcards» в командлетах PowerShell (в WSH работает). А, скажем, и ?, и * в масках, и связанное с этим использование имён в формате 8.3 — всё ещё помнить надо. Пока не поправят функции FindFirstEx/FindNextEx (хотя я думаю, никто их уже править не будет, дабы не рушить совместимость, кому надо учитывать такое поведение — давно его учитывают).

YuS_2
29-09-2018, 14:51
А, скажем, и ?, и * в масках, и связанное с этим использование имён в формате 8.3 — всё ещё помнить надо. »
Ну, так ведь, это стандартные wildcards, а не ">" и "<", они много где, именно в таком виде используются, тут волей-неволей не забудешь :)

Iska
29-09-2018, 15:47
YuS_2, ну, мне потребовалось три раза (!) столкнуться, чтобы запомнить, что любое применение масок в командах, использующих FindFirstEx/FindNextEx, работает не только для оригинальных «длинных» имён файлов, но и для их коротких «псевдонимов».




© OSzone.net 2001-2012