Войти

Показать полную графическую версию : Необходимо сделать два батника,подскажите ошибки


CyberNoble
23-10-2019, 16:43
Нужно создать батник,который копирует все файлы в расширении .txt ,кроме одного ,который задан в параметре %2,в директорию ,заданную параметром %1
Сделал вот такой

@echo off
REM вывод каталога
FOR %%a IN (*.txt) DO IF NOT %%a == %2 COPY %%a %1


Но он копирует все файлы в формате txt,думаю,что проблема в 99% в том,что я не так использую IF в цикле.Нужно именно через цикл

И второе задание такое,что нужно написать пакетный файл, который автоматически удалял бы в каталоге, указанном в командной строке все файлы, размер которых превышает 2 Мбайт.
Была идея сделать через сортировку по размеру в dir ,а потом в find,но дир просто по порядку их делает,там нельзя сделать так,чтобы файлы не удовлетворяющие размеру не показывались,поэтому пока не выходит.У одногруппника идея была,что нгужно создать переменную с размером,и сравнивать с ней,но мы так и не знаем как сделат ьпо уму

P.S. Сделал первое,оказывается я тупой,нужно было писат ьв консоль не просто параметр имя файла,а имя с расширением

Iska
23-10-2019, 19:03
И второе задание такое… »
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
if exist "%sSourceFolder%" (
set /a iMaxSize = 2 * 2^<^<20

for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "%sSourceFolder%\*.*"`) do (
if %%~zi gtr !iMaxSize! echo del /f /q "%%~i"
)
) else (
echo Can't find source folder [%sSourceFolder%].
exit /b 2
)
) else (
echo Usage: %~nx0 ^<Source folder^>
exit /b 1
)

endlocal
exit /b 0

Для реального удаления уберите выделенное.

Vadikan
25-10-2019, 10:27
2019 год, а все еще батникам в виндах учат :) Лучше б пошику учили.
"Батник"
powershell -noprofile -command "dir -Path c:\temp -File | where {$_.Length -gt 2097152} | %{del $_.FullName -WhatIf}"

YuS_2
25-10-2019, 11:38
Лучше б пошику учили. »
Видимо, кто может - не хочет, а кто хочет - не знает...
Диалектика революции шелов, блин... ну, почти :)

Iska
25-10-2019, 16:13
2019 год, а все еще батникам в виндах учат :) Лучше б пошику учили. »
Тут нужно желание вопрошающего учиться. Я вон регулярно советую, да толку-то…

Charg
25-10-2019, 16:46
Тут нужно желание вопрошающего учиться. »
А тут разве кто-то из вопрошающих спрашивал "научите как сделать?". Ну, за редкими исключениями, конечно...
99% тем это "мне надо вот так, запилите чтоб я скопипастил и оно работало".

alpap
25-10-2019, 17:09
на cmd тоже можно в одну строку:

@echo off
for /f "delims=" %%a in ('dir /a-d/b/s "%~1"') do for /f "tokens=3" %%b in ('dir /-c "%%a"^|findstr /rc:"^ .*"^|set /p #^=^^^& cmd /v/c echo:!#!') do if %%b gtr 2097152 >nul 2>&1 del "%%a"
pause

DJ Mogarych
25-10-2019, 20:15
Задание первое:
$parameter1 = "C:\Users\User\Documents"
$parameter2 = "слово-для-исключения"
dir "C:\temp\*.txt" -Exclude "*$parameter2*" |Copy-Item -Destination "$parameter1"
Задание второе:
(dir "C:\temp").where{$_.Length -gt 2MB} |Remove-Item -Confirm:$false

Это всё Powershell.

Iska
25-10-2019, 21:14
DJ Mogarych, вижу, что это:
(dir "C:\temp").where{$_.Length -gt 2MB} »
работает, но не пойму, как.
Get-ChildItem -Path "C:\temp"
возвращает один объект или массив объектов. Что такое «.where {…}»? Судя по точке, это должен быть метод или свойство, но чего именно? И фигурные скобки?! Не соображу.

alpap
25-10-2019, 21:58
Что такое «.where {…}»? »
это сокращенно от Where-Object (http://get-powershell.ru/2015/ispolzovanie-v-powershell-where-object/), насколько я понимаю.

DJ Mogarych
25-10-2019, 22:29
Iska, про эту фишку я на прошлой неделе вычитал в книжке "PowerShell in Depth".
Where и foreach умеют быть методом, причём это работает быстрее, чем при передаче через пайп, как мы все привыкли. Сам не проверял быстродействие, но в книжке пользовались Measure-Command, разница в некоторых случаях в разы.

Правильнее, конечно, писать .where({}), но в данном случае можно и без круглых скобок.

Iska
25-10-2019, 22:30
alpap, это-то я знаю. Но точка… Как это понимать? Откуда такой синтаксис вместо:
Get-ChildItem -Path "C:\temp" | Where-Object -FilterScript {$_.Length -gt 2MB}
Где об этом можно почитать?

DJ Mogarych, спасибо, ясно. Там были какие-то разъяснения, откуда сие взялось, и в каких случаях это «умеют» работает?

Ага. Нашёл:
7.5.3 The Where method

PowerShell v4 introduced another way to filter a collection of objects. This method
isn’t well documented, nor is it easily discoverable, yet it’s relatively easy to use and
performs well. Basically, you can use Where as a method:
(Get-Service m*).Where{$_.status -eq "stopped"}

и т.д.

DJ Mogarych
25-10-2019, 22:43
Цитата из книжки:
В Powershell v4 появился новый способ фильтровать набор объектов. Этот способ как следует не задокументирован и его нелегко обнаружить, тем не менее, он относительно прост в использовании и хорошо работает.

Один из примеров:
(Get-Process | sort Handles).Where({$_.Handles -gt 1000}, "SkipUntil", 1)

Iska
25-10-2019, 22:50
А вот и разница проклюнулась:
Get-ChildItem -Path "C:\Мои проекты\0282" | Where-Object -FilterScript {$_.Length -gt 2MB}
(Get-ChildItem -Path "C:\Мои проекты\0282" | Where-Object -FilterScript {$_.Length -gt 2MB}).GetType().FullName
''
(Get-ChildItem -Path "C:\Мои проекты\0282").where({$_.Length -gt 2MB})
((Get-ChildItem -Path "C:\Мои проекты\0282").where({$_.Length -gt 2MB})).GetType().FullName


Directory: C:\Мои проекты\0282


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 13.03.2019 12:44 9722769 Sample 02.docx
-a---- 13.03.2019 12:44 9722769 Sample.docx
System.Object[]

-a---- 13.03.2019 12:44 9722769 Sample 02.docx
-a---- 13.03.2019 12:44 9722769 Sample.docx
System.Collections.ObjectModel.Collection`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKey
Token=31bf3856ad364e35]]


DJ Mogarych, да, спасибо, уже читаю. Плюс одна из первых ссылок выдачи (в открытом доступе): PowerShell V4: Where() and ForEach() Methods | Manning (https://freecontent.manning.com/powershell-v4-where-and-foreach-methods/).

Iska
26-10-2019, 01:38
Ну, и ещё до кучи: Introduction to the Where Method in PowerShell -- Microsoft Certified Professional Magazine Online (https://mcpmag.com/articles/2015/12/02/where-method-in-powershell.aspx).




© OSzone.net 2001-2012