Войти

Показать полную графическую версию : [решено] Проверить процесс, создать папку "AT-1" в папке "AT" и вместе с ее файлами и папками


Страниц : [1] 2

KOD65001
04-07-2020, 14:22
Есть папка "AT" с постоянным именем, полный путь C:\AT

Есть папка "M" тоже с постоянным именем, полный путь C:\M

В папке "M" есть еще папка с файлами и подпапками. Имя папки, которая лежит в папке "M" всегда разное
и может принимать вид, например такой: "Блок © VF 办公室"

Нужно чтобы при запуске BAT скрипта выполнялась проверка процесса "calc.exe"


1) Если процесс "calc.exe" есть, то

Ожидать когда процесс "calc.exe" завершится, чтобы выполнить пункт (2)


2) Если процесса "calc.exe" нету, то

создать папку "AT-1" в папке "AT" и всю папку "Блок © VF 办公室" вместе с ее файлами и подпапками переместить в созданную папку "AT-1", но
только в том случае если в папке "AT" нету папки "AT-1", а если папка "AT-1" уже есть, то создать папку "AT-2" и переместить туда!
затем закрыть BAT скрипт.

P.S. В папке "M" файлы и подпапки могут быть с разными именами, расширениями, размерами и атрибутами (системные, скрытые, только для чтения)


Это пример ДО выполнения скрипта:

C:\AT\AT-1\Круг © VF 办公室\VF 办公室 © Круг\Круг.txt

C:\M\Блок © VF 办公室\VF 办公室 © Блок\Блок.exe


Это пример ПОСЛЕ выполнения скрипта:

C:\AT\AT-1\Круг © VF 办公室\VF 办公室 © Круг\Круг.txt

C:\AT\AT-2\Блок © VF 办公室\VF 办公室 © Блок\Блок.exe

C:\M\

Fors1k
04-07-2020, 16:19
param(
$folder = "© VF 办公室",
$proc = "*calc",
$pathAT = "C:\AT",
$pathM = "C:\M"
)cls

while(ps $proc -ea 0){sleep 1}
$at=1;if($at=([int]( gci $pathAT AT-* ).name[-1][-1].ToString())){$at++}
Move -l (gci $pathM *$folder).FullName (ni -i d "$pathAT\AT-$at").FullName

KOD65001
04-07-2020, 19:16
Fors1k спасибо, но это не совсем то что нужно. Я же не просто так указал категорию темы "CMD/BAT", а не PowerShell.

YuS_2
04-07-2020, 19:28
Я же не просто так указал категорию темы "CMD/BAT" »
Если требуется решение проблемы, то не имеет значения инструмент.
Если же требуется решение учебного задания, то оно не просто так дается студенту, а именно для того, чтобы он самостоятельно его решил, тем самым обогатив собственный опыт и знания. И что самое главное, задание выдается совсем не для того, чтобы студенты искали решение на профильных форумах...

Fors1k
04-07-2020, 20:43
Я же не просто так указал категорию темы "CMD/BAT", а не PowerShell. »
Вообще, стоит уже забыть про cmd.

Разработка cmd была остановлена после выхода Windows 2000.В качестве основной командной оболочки используется PowerShell. (https://ru.wikipedia.org/wiki/Cmd.exe)
PowerShell заменяет командную строку. (https://support.microsoft.com/ru-ru/help/4027690/windows-powershell-is-replacing-command-prompt) Если сказать совсем простым языком, то powershell - это и есть cmd, если у вас не Pentium2 на windows95.

Вы же, например, на море не на повозке ездите, а летаете на современном самолете.

Busla
04-07-2020, 22:45
Тем не менее, "прогрессивное большинство" уже задрало сыпать в темы по cmd/bat офтопики на PoSh'е. Не нравится структура форума - иди с предложениями к администратору форума. А пока извольте следовать правилам.
Я сам предпочитаю решать задачи посредством PowerShell, но
1. Он не всегда есть - в том же PE, контейнерах
2. Он тяжело запускается - "примитивный" healthcheck, реализованный подобным образом, выжирает нереально много ресурсов
В темах про .bat люди ожидают находить решения на .bat

Iska
04-07-2020, 23:50
В темах про .bat люди ожидают находить решения на .bat »
Если они возможны.

KOD65001
05-07-2020, 00:08
Тогда это не подходит :( PowerShell не подходит.
Есть ещё какие-то варианты? например на VBS?

Тем не менее, "прогрессивное большинство" уже задрало сыпать в темы по cmd/bat офтопики на PoSh'е. Не нравится структура форума - иди с предложениями к администратору форума. А пока извольте следовать правилам.
Я сам предпочитаю решать задачи посредством PowerShell, но
1. Он не всегда есть - в том же PE, контейнерах
2. Он тяжело запускается - "примитивный" healthcheck, реализованный подобным образом, выжирает нереально много ресурсов
В темах про .bat люди ожидают находить решения на .bat »
Busla, в отличии от Вас я следую правилам! Я ничего не говорил про структуру форума! Не нужно хамить участникам форума, такое поведение здесь не уместно!

YuS_2, я не являюсь студентом!

Iska
05-07-2020, 00:58
KOD65001, Ваш алгоритм неполон.

Что делать, когда в каталоге C:\M нет ни одного подкаталога?
Что делать, когда в каталоге C:\M более одного подкаталога?
Что делать, если в каталоге C:\AT есть и подкаталог AT-1, и подкаталог AT-2?

Foreigner
05-07-2020, 01:36
@echo off
setlocal

:check

tasklist | 1>nul findstr Calculator.exe && (
1>nul timeout /t 1
goto:check
)

2>nul (for /f "tokens=2 delims=-" %%i in ('dir /b /ad C:\AT\AT-*') do set /a "int=%%i+1")

if not defined int set "int=1"

dir /b C:\M | 1>nul findstr . && (

md "C:\AT\AT-%int%"
for /f "tokens=*" %%i in ('dir /b /ad "C:\M"') do move "C:\M\%%i" "C:\AT\AT-%int%"
)


с учетом дополнительных проверок,

Iska
05-07-2020, 06:10
Foreigner, процесс "calc.exe" »

Foreigner
05-07-2020, 07:37
процесс "calc.exe" »
Нет такого в десятке.

Foreigner
05-07-2020, 08:36
PS > calc
PS > get-process calc
get-process : Cannot find a process with the name "calc". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process calc
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (calc:String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

PS > (Get-CimInstance win32_Process | ? { $_.Name -like 'calc*' }).CommandLine
"C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.2005.23.0_x64__8wekyb3d8bbwe\Calculator.exe" -ServerName:App.AppXsm3pg4n7er43kdh1qp4e79f1j7am68r8.mca

PS > (get-process Calculator).kill()

YuS_2
05-07-2020, 09:14
Busla, в отличии от Вас я следую правилам! »
Хмм... в общем-то, то был спич в защиту именно Ваших требований о cmd/bat, Вас ни в чем не обвиняли. :)

YuS_2, я не являюсь студентом! »
В таком случае, не совсем понятно искусственное ограничение в cmd/bat и наличие псевдо-условий задачи. Зачем отслеживать калькулятор? Тем более, что наименование реального процесса, в разных версиях windows могут отличаться...
Приведите описание реальной проблемы во всех подробностях...
Например, непонятно:
Сколько всего может быть каталогов "AT-No"?
Сам сценарий запускаться будет вручную или по расписанию?
В общем, подробности таки требуются...

В темах про .bat люди ожидают находить решения на .bat »
В темах про bat, люди ищут решение проблемы, зачастую не имея вообще представления о том, что такое powershell.
Поэтому структура форума здесь не при чем. Да, в чем-то это удобно, иногда требуется разделение, но если таки требуется решение проблемы, то не имеет никакого смысла гонять пользователей по разделам форума и грозить им страшными карами, что не туда опубликовали свою проблему... гораздо проще предложить решение, а вот если оно уже не устраивает в части инструмента, тогда автор вопроса и должен сделать уточнение. Желательно, хоть и необязательно, с обоснованием, почему именно требуется конкретный инструмент ... и да, обоснование не может быть вида "потому, что хочу", ибо если хочешь, то и изучай, и пытайся решить самостоятельно... если не получается - опиши свое решение и задай вопрос о той части, где что-то не получается. Помогут обязательно.
А вот когда описывается задача и только, то инструмент ... ну, вот никакого значения не имеет, имхо. Как-то так.

megaloman
05-07-2020, 12:53
@Echo Off
Set "ImageName=calc.exe"
Set /A TimeOut=5

Set "BoxATnew=C:\AT\AT-"
Set "BoxM=C:\M"

:Check
cls
TaskList /Fi "ImageName Eq %ImageName%" |Find /I "%ImageName%" &&(
TimeOut /T %TimeOut%
GoTo :Check
)

Set /A N=0
:DirMD
Set /A N+=1
If Exist "%BoxATnew%%N%" GoTo :DirMD

Pushd "%BoxM%"
xcopy /C /E /H /F "%BoxM%\*.*" "%BoxATnew%%N%\" &&2>nul Rd /S /Q "%BoxM%"
Popd
pause
Exit /B
Foreigner, Move со скрытой папкой не отработает. Не уверен, отработает ли с папкой по имени VF 办公室 © Круг

YuS_2, Зачем отслеживать калькулятор » ИМХО, реально там будет что-то более экзотическое.

Busla, В темах про .bat люди ожидают находить решения на .bat »ИМХО, если это заявлено в категоричной форме. В противном, ИМХО, надо решать задачу. Увы, не всегда это в CMD возможно, и не вижу криминала, если предлагается решение иными средствами, если важно ехать, а не шашечки.
ИМХО, оффтоп -это не предложенное решение иными средствами, а панегирики на тему, какой же аццтой этот CMD, VBS и т д.

Foreigner
05-07-2020, 13:11
Не уверен, отработает ли с папкой по имени VF 办公室 © Круг »


У меня отработало.
Но, у меня все, включая cmd.exe, в UTF-8 без бом.

Iska
05-07-2020, 13:31
Нет такого в десятке. »
:).

KOD65001
05-07-2020, 13:35
наименование реального процесса, в разных версиях windows могут отличаться... »
YuS_2
Iska, Foreigner, "имя процесса" я в коде сразу исправил на свой. Процесс "calc.exe" - это просто для примера. Периодически на работе требуется менять процесс в зависимости от операций и поставленных задач начальством.

Foreigner, megaloman, Да это именно то, что нужно! Только код от Foreigner что-то не перемещает папку которая находится в папке "М", пробовал разные варианты UTF с бом и без..а вот у megaloman почему то хорошо перемещает...я так понимаю что в методе лучше использовать copy вместо move

Foreigner
05-07-2020, 13:41
Нет такого в десятке. »

intl.cpl > Administartive > Change System Locale > Beta: Use Unicode UTF-8 for worldwide language support

KOD65001
05-07-2020, 13:52
Спасибо ВСЕМ за помощь! :) megaloman, Foreigner, Fors1k - огромное спасибо за решение!




© OSzone.net 2001-2012