Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удалить файлы (http://forum.oszone.net/showthread.php?t=336908)

ManDraka 28-09-2018 20:27 2833370

Удалить файлы
 
Нужно удалить в папке все файлы в названии которых только 2 символа и которые имеют любое расширение

Iska 28-09-2018 22:16 2833404

Попробуйте так:
Код:

@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 2833432

Iska, не догоняю, почему нельзя
Del d :\papka\??.*
Потому, что alpap разъяснил: 1 тоже сожрет ...

alpap 29-09-2018 02:25 2833435

Цитата:

Цитата megaloman
почему нельзя »

Цитата:

Цитата ManDraka
только 2 символа »

Цитата:

Цитата megaloman
d :\papka\??.* »

1 тоже сожрет ...

megaloman 29-09-2018 02:44 2833436

Еще вариант
Код:

@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 2833446

Цитата:

Цитата megaloman
Потому, что alpap разъяснил: 1 тоже сожрет ... »

Да, именно так — под маску ?? попадут и файлы с длиной имени в один символ.

Цитата:

Цитата megaloman
Еще вариант »

Увы, тут под маску попадут файлы такого вида:
Код:

12.34.txt
56.7890.txt
ab.cdefgh.txt

Другая опасность использования масок из ? — например, под маску с восемью ? попадут почти все файлы, если разрешено создание коротких имён формата 8.3 (кроме вторичных жёстких ссылок, для которых короткие имена не создаются).

megaloman 29-09-2018 12:00 2833470

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 2833472

Цитата:

Цитата Iska
Увы »

Код:

@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 2833474

YuS_2, ну-ка, рассказывайте, что дают > и < в маске?

YuS_2 29-09-2018 12:22 2833475

Цитата:

Цитата Iska
ну-ка, рассказывайте, что дают > и < в маске? »

Чтобы не перепечатывать кучу текста:
ссылка

Iska 29-09-2018 12:25 2833479

YuS_2, спасибо, ясно.

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

Undocumented Wildcards


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

YuS_2 29-09-2018 12:41 2833481

Цитата:

Цитата Iska
И есть у меня подозрение, что и в будущем не вспомню »

Дык, человеческая память - штука такая, когда оно часто не требуется, может стереть информацию нафик как ненужную... :)
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову.

Iska 29-09-2018 13:48 2833488

Цитата:

Цитата YuS_2
Да и в виду того, что powershell легко может заменить такие потребности, тем более, нет надобности загружать этими знаниями голову. »

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

YuS_2 29-09-2018 14:51 2833496

Цитата:

Цитата Iska
А, скажем, и ?, и * в масках, и связанное с этим использование имён в формате 8.3 — всё ещё помнить надо. »

Ну, так ведь, это стандартные wildcards, а не ">" и "<", они много где, именно в таком виде используются, тут волей-неволей не забудешь :)

Iska 29-09-2018 15:47 2833499

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


Время: 01:54.

Время: 01:54.
© OSzone.net 2001-