Показать полную графическую версию : удалить файлы по маске из каталога
проблема в том что Del принимает только один параметр. тогда проще может перейти в каталог для удаления и удалить оттуда? просто масок должно быть несколько
@echo off
ECHO Program 2
IF '%1'=='' (
ECHO No args
GOTO :END
) ELSE (
ECHO CHECK
GOTO :BEGIN )
:BEGIN
DEL %1
SHIFT /1
if '%1'=='' GOTO :END
GOTO :BEGIN
:END
пока что есть только это
Вот ещё вопрос - как найти в файлы каком то каталоге не перемещаясь туда?
Два варианта:
@echo off
setlocal enableextensions enabledelayedexpansion
set sArgs=%*
if not defined sArgs (
echo Error: no arguments
echo.
call :Usage
exit /b 1
)
rem Вариант 1
call :DeleteByMask %sArgs%
rem Вариант 2, по-файлово
for %%i in (%sArgs%) do (
echo Delete [%%i]
del %%i 2>nul
)
endlocal
exit /b 0
:DeleteByMask
set sMask=%~1
if not defined sMask exit /b 0
echo Delete by [%sMask%]
del %sMask% 2>nul
shift
goto :DeleteByMask
:Usage
echo Usage:
echo %~nx0 ^<mask^> [^<mask^> ...]
exit /b 0
Удаление производится в текущем каталоге.
Вот ещё вопрос - как найти в файлы каком то каталоге не перемещаясь туда? »
Как обычно — указывая полный путь. Или всё же временно перемещаясь туда — пользуйте pushd/popd.
И последний вопрос
как через сценарий проверить что другой файл является батником или сценарием и запустить его?
@echo off
IF '%1'=='' (
ECHO NO ARGS
GOTO :END
) ELSE (
pushd %1
GOTO :BEGIN )
:BEGIN
DIR /B /S %2
SHIFT /2
IF '%2'=='' GOTO :END
GOTO :BEGIN
:END
popd
не работает. все равно находит файлы в каталоге где находится cmd Файл
как через сценарий проверить что другой файл является батником или сценарием и запустить его? »
Например, так:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFile=%~1
if defined sFile (
if exist "%sFile%" (
call :CheckExt "%sFile%" && echo File [%sFile%] is not executable || echo File [%sFile%] is executable
) else (
echo File [%sFile%] not found
)
) else (
echo Need argument
)
endlocal
exit /b 0
:CheckExt
setlocal
for %%i in (%PATHEXT:;= %) do if /i [%%i] == [%~x1] exit /b 1
exit /b 0
не работает. все равно находит файлы в каталоге где находится cmd Файл »
Укажите, как именно Вы вызываете пакетный файл, что указываете аргументами.
SANIOK_AV
16-09-2011, 16:16
Извините что влажу :blush:
Iska, то есть для call exitCode со значением "1" означает "завершение с ошибкой"?
И как вобще узнать эти значения для других команд?
SANIOK_AV, несколько раз начинал писать большую петицию, написание растягивалось, браузер падал, машина зависала… Стало быть, не судьба, отпишусь нынче коротко.
Iska, то есть для
call
exitCode со значением "1" означает "завершение с ошибкой"? И как вообще узнать эти значения для других команд?»
Не совсем так.
Исторически было принято считать нулевой код возврата дочернего процесса его корректным завершением, а ненулевые коды возврата — использовать для уведомления родительского процесса дочерним процессом о той или иной ошибке в своей работе.
Тут, опять же, есть проблема — что именно считать ошибкой? Скажем, некоторые приложение вовсе не устанавливают код возврата, иные же, например, «choice.exe» — используют код возврата для уведомления родительского процесса о сделанном пользователем выборе, а не об ошибке.
Так что, является ли ненулевой код возврата ошибкой или не является — заранее сказать ничего нельзя, нужно знать конкретное приложение, о котором ведётся речь.
Возвращаясь к «call», скажу, что всё изложенное выше справедливо и для пакетных файлов — как Вы сочтёте нужным считать, так и будет.
Информацию о кодах возврата конкретных приложений стоит узнавать непосредственно из их документации (причём, от версии к версии информация может отличаться). Касаемо внутренних и внешних команд операционной системы документацию можно взять в «%SystemRoot%\Help\ntcmds.chm» — для XP, в Windows Command Reference (http://www.microsoft.com/download/en/details.aspx?id=2632) — для более старших версий и, наконец, в MSDN/TechNet/KB непосредственно на сайте Microsoft.
kiripanda
06-12-2011, 18:04
Del принимает только один параметр.»
O_o
Угу, для меня это тоже когда-то было откровением. Пусть теперь и коллега Gablik порадуется.
При исполнении кода @echo off
SetLocal enabledelayedexpansion
set "dr=%USERPROFILE%\Recent"
for /f "delims=" %%i in ('dir /b/s/a-d "%dr%\*.lnk" 2^>nul') do del /f/q "%%i"
pause
неожиданно обнаружился файл "Письмо «Re_ программа для ПК» — Dmitry Maksimov — Яндекс.Почта.lnk", который не удалился. Подскажите, как унифицировать код, чтобы удалялись файлы, в именах которых есть спецсимволы.
Foreigner
04-09-2012, 07:51
sov44, А зачем через "dir" удалять? Не проще:
del /s /a /f "%dr%\*.lnk"
А зачем через "dir" удалять? »
скрипт ещё считает размер удаляемых файлов. Не показал на примере.
Foreigner
04-09-2012, 10:33
sov44,
Тогда попробуй так:
@echo off
SetLocal enabledelayedexpansion
pushd "%USERPROFILE%\Recent" || goto:eof
for /f "tokens=3,4" %%i in ('dir /x /-c /a-d ^| findstr "\.LNK\>"') do (
echo размер для подсчета: %%i
del /f /q "%%~fsj"
)
popd
pause
Foreigner, спасибо! То, что надо!
К сожалению не удаётся отладить код, подскажите, в чём ошибка@echo off
SetLocal enabledelayedexpansion
set "dr=%USERPROFILE%\Recent"& call :Calc "!dr!" *.lnk
echo !iSumT!
pause
exit
:Calc
pushd "%1" || goto:eof
for /f "tokens=3,4" %%i in ('dir /x /-c /a-d "%~1" ^| findstr "\%2\>"') do (
set /a iSumT +=%%i
del /f /q "%%~fsj"
)
popd
GoTo :EOF
Foreigner
04-09-2012, 16:23
sov44, а что конкретно не работает? Пару замечаний:
1. Зачем все писать в одну строку? Такой необходимости вообще нет:
set "dr=%USERPROFILE%\Recent"
call :Calc "%dr%" *.lnk
2. Где уверенность, что сумма "iSum" в итоге не превышает 2147483648, что является предельным для cmd.exe? Если надо посчитать, то придется складывать поразрядно. Например так:
@echo off
setlocal enabledelayedexpansion
set "num1=0"
set "num2=0"
set "num3=0"
set "num1=000000000000000%1"
set "num1=%num1:~-15%"
set "num2=000000000000000%2"
set "num2=%num2:~-15%"
for /l %%i in (1,1,15) do (
set /a "sum=!num1:~-%%i,1!+!num2:~-%%i,1!+num3"
if !sum! geq 10 (set "num3=1" && set /a "sum-=10") else (set "num3=0")
set "res=!sum!!res!"
)
:zerout
if "%res:~0,1%"=="0" set "res=%res:~1%" && goto:zerout
echo %res%
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.