Удалить файлы
Нужно удалить в папке все файлы в названии которых только 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.
|
Iska, не догоняю, почему нельзя
Del d :\papka\??.*
Потому, что alpap разъяснил: 1 тоже сожрет ...
|
Еще вариант
Код:
@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
|
Цитата:
Цитата megaloman
Потому, что alpap разъяснил: 1 тоже сожрет ... »
|
Да, именно так — под маску ?? попадут и файлы с длиной имени в один символ.
Увы, тут под маску попадут файлы такого вида:
Код:
12.34.txt
56.7890.txt
ab.cdefgh.txt
Другая опасность использования масок из ? — например, под маску с восемью ? попадут почти все файлы, если разрешено создание коротких имён формата 8.3 (кроме вторичных жёстких ссылок, для которых короткие имена не создаются).
|
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, ну-ка, рассказывайте, что дают > и < в маске?
|
Цитата:
Цитата Iska
ну-ка, рассказывайте, что дают > и < в маске? »
|
Чтобы не перепечатывать кучу текста:
ссылка
|
YuS_2, спасибо, ясно.
Самое интересное — сам не раз бывал на этой странице, но как-то память не зацепила:
Цитата:
Undocumented Wildcards
…
…
|
P.S. И есть у меня подозрение, что и в будущем не вспомню :lol:.
|
Цитата:
Цитата Iska
И есть у меня подозрение, что и в будущем не вспомню »
|
Дык, человеческая память - штука такая, когда оно часто не требуется, может стереть информацию нафик как ненужную... :)
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову.
|
Цитата:
Цитата YuS_2
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову. »
|
Дык, это если более не применимо будет, как «Undocumented Wildcards» в командлетах PowerShell (в WSH работает). А, скажем, и ?, и * в масках, и связанное с этим использование имён в формате 8.3 — всё ещё помнить надо. Пока не поправят функции FindFirstEx/FindNextEx (хотя я думаю, никто их уже править не будет, дабы не рушить совместимость, кому надо учитывать такое поведение — давно его учитывают).
|
Цитата:
Цитата Iska
А, скажем, и ?, и * в масках, и связанное с этим использование имён в формате 8.3 — всё ещё помнить надо. »
|
Ну, так ведь, это стандартные wildcards, а не ">" и "<", они много где, именно в таком виде используются, тут волей-неволей не забудешь :)
|
YuS_2, ну, мне потребовалось три раза (!) столкнуться, чтобы запомнить, что любое применение масок в командах, использующих FindFirstEx/FindNextEx, работает не только для оригинальных «длинных» имён файлов, но и для их коротких «псевдонимов».
|
Время: 01:54.
© OSzone.net 2001-