powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Странности с RUN/! с ключем /N c командой DEL/ERASE
10 сообщений из 10, страница 1 из 1
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35306293
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Возможно это очередное "открытие америки через форточку", но столкнулся с такой непоняткой:
Код: plaintext
lcCmd = 'DEL /F /S /Q ' + ADDBS(SYS( 2023 )) + '*.*'
запуск в виде
Код: plaintext
RUN &lcCmd
работает, но не нравится появление дос-окошка, а вот в виде
Код: plaintext
RUN /N2 &lcCmd
фигвам: RUN|! command failed. Не удается найти указнный файл. пробовал
Код: plaintext
1.
lcCmd = 'RUN /N2 DEL /F /S /Q ' + ADDBS(SYS( 2023 )) + '*.*'
&lcCmd
- то же самое, короче никак не получается всунуть рану ключ /N если далее следует DEL/ERASE. Пример из хелпа
Код: plaintext
1.
lccmnd = '! /N CHARMAP'
&lccmnd
- пашет на ура!
И самое интересное, что даже прямая подача команды (без МП, типа ! /N DEL) в командном окне приводит к такой же ошибке.

Это глюк или где?

ЗЫ. проблему очистки темпа решил через API WinExec, по найденному на этом форуме примеру.

вфп9сп1
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35306308
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Команды Delete file и Erase есть и в фоксе. Для чего эти пляски с бубном?
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35306756
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOПривет!

Возможно это очередное "открытие америки через форточку", но столкнулся с такой непоняткой:
Код: plaintext
lcCmd = 'DEL /F /S /Q ' + ADDBS(SYS( 2023 )) + '*.*'

Америку в форточках ты будешь открывать когда это заработает. SYS(2023) - это TEMP текущей пользовательской сессии, т.е. всех запущенных программ. Представь ситуацию - какая-нибудь прога создала временный файл, закрыла, после отработал твой чудокод, похерил этот файл, а та прога хочет обратно файл прочитать ...
Там же фоксового рантайма временные файлы живут. Не знаю как в VFP, а если у запущенного FPD поудалять *.tmp то он после этого почти сразу вылетает.

Я нахожу уже имеющуюся подпапку (одноименную с EXE) и делаю ее рабочей. Только пути до файлов проекта надо полностью прописывать в CONFIG.FPW
Чтобы две копии проги не работали в одной папке - создаю файл work.flg и держу открытым пока прога работает. Остальное из кода понятно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
* Установка временной папки как текущей
func SetTempFolder
local lcPath, i
if type('gnWorkFolderHandle') = 'U'
	public gnWorkFolderHandle
	if justext(sys( 16 ,  0 )) != 'exe'
		* При работе из IDE
		if right(addbs(sys( 2003 )),  5 ) != '\TMP\'
			if !directory('tmp')
				mkdir tmp
			endif
			TRY
				delete File (addbs(sys( 5 ) + sys( 2003 )) + 'tmp\*.*')
			CATCH
			ENDTRY
			set Default To (addbs(sys( 5 ) + sys( 2003 )) + 'tmp')
		endif
	else
		* При работе EXE
		lcPath = addbs(getenv("TMP"))
		if empty(lcPath)
			lcPath = addbs(fullpath(''))
		endif
		for i =  0  to  1000 
			lcDir = lcPath + GetExeName() + iif(i =  0 , '', astr(i))
			if !directory(lcDir)
				mkdir (lcDir)
			endif
			gnWorkFolderHandle = fcreate(lcDir + '\work.flg')
			if gnWorkFolderHandle >=  0 
				fclose(gnWorkFolderHandle)
				TRY
					delete File (addbs(lcDir) + '*.*')
				CATCH
				ENDTRY
				gnWorkFolderHandle = fcreate(lcDir + '\work.flg')
				if gnWorkFolderHandle >=  0 
					exit
				endif
			endif
		endfor
		if gnWorkFolderHandle <  0 
			wait 'Не удалось выбрать временную папку' window timeout  3 
			cancel
		else
			set Default To (lcDir)
		endif
	endif
endif
return

delete File (addbs(lcDir) + '*.*') удаляет до первого открытого файла, потому и TRY. Если под шаблон попало 10 файлов, из них 3-й оказался открыт, то в итоге будут удалены первые два, остальные останутся.
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35306843
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребято!

Не накидуйтесь на меня с решением данной задачи, т.е. очистки темпораря. Это не ответ по сути проблемы. Я ж не зря в ПСах написал, что задачу решил...
Все же не удержусь и для всех, кто попытается еще раз мне написать про ущербность данного решения объясняю - есть другая прога на фоксе, усиленно кидающая в темпы результаты SQL-выборок, которые я не имею представления КАК названы во время рантайма и фоксой не убиваются при выходе. Из-за них и прочих прог, работающих в схожем режиме, а так же из-за вариантов, когда открытый темп-файл удалять НЕЛЬЗЯ после создания (к примеру дока для офиса, открытая юзеру в темпе из бд для просмотра/печати) - я останусь при своем "чудокоде"!!!

Тема не раскрыта и вопрос остается в силе - ПОЧЕМУ с /N не работает?
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35306933
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOя останусь при своем "чудокоде"!!!

Тема не раскрыта и вопрос остается в силе - ПОЧЕМУ с /N не работает?

Я RUN давно уже не пользую. Из-за его ограничений по длине строки (может с этим у тебя связано), черного окна, необходимости макроподстановок, иногда надо поделать в коде что-то еще пока запущенная прога трудится или не дожидаться/убить ее если она в заданное время не уложилась.

Тут я исходник класса-обертки давал. В простейшем случае использовать так:
Код: plaintext
1.
2.
3.
4.
loWEx = NewObject('waitexec')
loWEx.lHide = .T. && если надо спрятать окно консольной проги
if loWEx.Execute('cmd.exe /c DEL /F /S /Q "' + ADDBS(SYS( 2023 )) + '*.*"') && Запускаем
   loWEx.WaitStop() && Дожидаемся завершения работы
endif
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35306981
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOя останусь при своем "чудокоде"!!!

Тема не раскрыта и вопрос остается в силе - ПОЧЕМУ с /N не работает?

VFP9 Help/N
Specifies NOWAIT. Include /N to execute another Windows-based application.

Т.е. без /N запускается консоль (дос-эмулятор cmd.exe, отсюда и черное окно) и ей передается команда, а с /N сразу приложение, т.е. скорее всего вызывается WinAPI функция CreateProcess().
DEL - внутренняя команда CMD.EXE, DEL.EXE не существует, о чем тебе фокс и говорит. Поэтому с /N надо запускать CMD.EXE явно

Так должно работать:
Код: plaintext
1.
lcCmd = 'RUN /N2 CMD.EXE /C DEL /F /S /Q ' + ADDBS(SYS( 2023 )) + '*.*'
&lcCmd
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35307003
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить (и поправить) - пути всегда в двойные кавычки бери в командной строке, а то если имя попадется с пробелом - не сработает или не так как надо сработает.
Окончательный вариант:
Код: plaintext
1.
lcCmd = 'RUN /N2 CMD.EXE /C DEL /F /S /Q "' + ADDBS(SYS( 2023 )) + '*.*"'
&lcCmd
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35307539
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tбез /N запускается консоль (дос-эмулятор cmd.exe, отсюда и черное окно) и ей передается команда, а с /N сразу приложение, т.е. скорее всего вызывается WinAPI функция CreateProcess().
DEL - внутренняя команда CMD.EXE, DEL.EXE не существует, о чем тебе фокс и говорит. Поэтому с /N надо запускать CMD.EXE явно
Вот! Спасибо! Вот наконец-то реальный ответ на мой вопрос, теперь мне все понятно. Потому и хелповый пример с /N работал, т.к. такой ЕХЕ-шнег (CHARMAP.ЕХЕ) в отдельности существует.
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35307576
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOВот наконец-то реальный ответ на мой вопрос, теперь мне все понятно.
Только папку TEMP все равно чистить нехорошо целиком. Сделай хотя бы шаблон *.dbf, *.cdx вместо *.*
...
Рейтинг: 0 / 0
Странности с RUN/! с ключем /N c командой DEL/ERASE
    #35307779
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO...есть другая прога на фоксе, усиленно кидающая в темпы результаты SQL-выборок, которые я не имею представления КАК названы во время рантайма и фоксой не убиваются при выходе...и сии филезы рождаюццо с экстеншнами отнюдь не dbf/cdx/idx, не говоря о доках, которые могут создаваться и вовсе без расширения...
Самое плачевное в том, что та самая прога, плодящая массу темпов от SQL-выборок так засирает системные диски на некоторых очень неновых машинах, что моя прога там уже падала из-за отсутствия свободного места! Это еще что: вот ежели в таких условиях ХРю ресетнуть (ибо по указанной причине входит оная в жуткий ступор, отчего рукочесание к ресету и приводит) - то смерть ей, окаянной, на месте! Не загрузиццо она боле, ибо не сможет создавать необходимые ей во время загрузки файлы - места-то нету - на сии грабли уж больно наступил однажды !!! Поэтому буду нещадно рубать все что там, в темпорарях, только есть!!! А кто не застолбил свое - путь падает!
фпд-проги там не юзают, а все остальные "умные Маши" необходимые темпфайлы удалять и так не дают, ибо открыты они.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Странности с RUN/! с ключем /N c командой DEL/ERASE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]