⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 for.c

📁 PocketCMD是与pocketconsole配合实用的命令行解释器(Shell)
💻 C
字号:
/* *  FOR.C - for internal batch command. * * *  History: * *    16-Jul-1998 (Hans B Pufal) *        Started. * *    16-Jul-1998 (John P Price) *        Seperated commands into individual files. * *    19-Jul-1998 (Hans B Pufal) *        Implementation of FOR. * *    27-Jul-1998 (John P Price <linux-guru@gcfl.net>) *        Added config.h include. * *    20-Jan-1999 (Eric Kohl) *        Unicode and redirection safe! * *    01-Sep-1999 (Eric Kohl) *        Added help text. *     *    23-Feb-2001 (Carl Nettelblad <cnettel@hem.passagen.se>) *        Implemented preservation of echo flag. Some other for related *        code in other files fixed, too. */#include "config.h"#include "cmd.h"/* * Perform FOR command. * * First check syntax is correct : FOR %v IN ( <list> ) DO <command> *   v must be alphabetic, <command> must not be empty. * * If all is correct build a new bcontext structure which preserves *   the necessary information so that readbatchline can expand *   each the command prototype for each list element. * * You might look on a FOR as being a called batch file with one line *   per list element. */INT cmd_for (LPTSTR cmd, LPTSTR param){	LPBATCH_CONTEXT lpNew;	LPTSTR pp;	TCHAR  var;#ifdef _DEBUG	DebugPrintf (_T("cmd_for (\'%s\', \'%s\'\n"), cmd, param);#endif	if (!_tcsncmp (param, _T("/?"), 2))	{		ConOutPuts (_T("Runs a specified command for each file in a set of files\n"			_T("\n")			_T("FOR %variable IN (set) DO command [parameters]\n")			_T("\n")			_T("  %variable  Specifies a replaceable parameter.\n")			_T("  (set)      Specifies a set of one or more files. Wildcards may be used.\n")			_T("  command    Specifies the command to carry out for each file.\n")			_T("  parameters Specifies parameters or switches for the specified command.\n")			_T("\n")			_T("To user the FOR comamnd in a batch program, specify %%variable instead of\n")			_T("%variable.")));		return 0;	}	/* Check that first element is % then an alpha char followed by space */	if ((*param != _T('%')) || !_istalpha (*(param + 1)) || !_istspace (*(param + 2)))	{		error_syntax (_T("bad variable specification."));		return 1;	}	param++;	var = *param++;               /* Save FOR var name */	while (_istspace (*param))		param++;	/* Check next element is 'IN' */	if ((_tcsnicmp (param, _T("in"), 2) != 0) || !_istspace (*(param + 2)))	{		error_syntax (_T("'in' missing in for statement."));		return 1;	}	param += 2;	while (_istspace (*param))		param++;	/* Folowed by a '(', find also matching ')' */	if ((*param != _T('(')) || (NULL == (pp = _tcsrchr (param, _T(')')))))	{		error_syntax (_T("no brackets found."));		return 1;	}	*pp++ = _T('\0');	param++;		/* param now points at null terminated list */	while (_istspace (*pp))		pp++;	/* Check DO follows */	if ((_tcsnicmp (pp, _T("do"), 2) != 0) || !_istspace (*(pp + 2)))	{		error_syntax (_T("'do' missing."));		return 1;	}	pp += 2;	while (_istspace (*pp))		pp++;	/* Check that command tail is not empty */	if (*pp == _T('\0'))	{		error_syntax (_T("no command after 'do'."));		return 1;	}	/* OK all is correct, build a bcontext.... */	lpNew = (LPBATCH_CONTEXT)malloc (sizeof (BATCH_CONTEXT));	lpNew->prev = bc;	bc = lpNew;	bc->hBatchFile = INVALID_HANDLE_VALUE;	bc->ffind = NULL;	bc->params = BatchParams (_T(""), param); /* Split out list */	bc->shiftlevel = 0;	bc->forvar = var;	bc->forproto = _tcsdup (pp);	if (bc->prev)		bc->bEcho = bc->prev->bEcho;	else		bc->bEcho = bEcho;	return 0;}/* EOF */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -