命令提示符之操作基础(Windows)

打开命令行窗口

方法一

       打开指定文件的文件夹,在路径栏里输入“cmd”,回车,就进入控制台了。默认路径就是指定文件夹的路径。

 方法二

      打开指定的文件夹,按住shift键,在空白处右击,在菜单栏中选择“在此处打开Powershell窗口”,有时可能是”在此处打开命令窗口“。

      注意:PowerShell窗口和CMD命令窗口虽然都用于执行命令行操作,但它们在功能、语法和脚本支持方面存在显著差异。PowerShell脚本是在PowerShell环境中运行的,用于自动化各种任务和提高工作效率。 

PowerShell窗口与CMD命令窗口的区别
功能差异:

      PowerShell:是Windows的一个更强大的命令行界面和脚本环境,它支持对象、管道、命令的丰富性和脚本编写。PowerShell提供了比CMD更广泛的命令集和更高级的功能,如处理对象、自动化任务、远程管理等。
      CMD(命令提示符):是Windows的一个较旧的命令行界面,它提供了基本的命令行操作功能,如文件操作、系统管理等。CMD的命令集相对有限,且不支持PowerShell中的许多高级功能。

语法差异:

      PowerShell使用更复杂的语法和命令结构,支持变量、函数、条件语句等编程元素。
CMD的语法相对简单,主要基于命令行指令和批处理文件。

 方法三

    同时按下键盘上的Win键(Windows徽标键)+ R键,或在搜索框中搜索“cmd”,在弹出的运行窗口中输入"cmd",点击"确定"或按下回车键即可打开命令提示符。

     注:管理员启动模式为:Win键 + R键 ,输入cmd,然后Ctrl+Shift+Enter。

        在默认路径后输入“cd”和空格,再输入指定文件夹路径。回车后暂时还是原来默认的路径。然后输入指定文件夹所在的盘,如这里输入“D:",再回车就是指定的路径了。

    也可以输入cd+空格,一层一层打开文件夹。

命令提示符编译 & 执行 cpp文件

 第一步:打开命令提示符

     如前文所示,同时按下win+r,输入"cmd"。

 第二步:找到要运行的.c文件程序的位置:

    这里以下面程序为例:‪C:\Users\11\OneDrive\桌面\hello.c

 第三步:编译代码

      进入到保存文件所在的目录,再键入:gcc hello.c,输入回车。若显示gcc不是内部指令,则需要安装gcc。

      如果代码中没有错误,命令提示符会跳到下一行,并生成 a.exe可执行文件。

第四步:执行程序

     现在,键入 a.exe 来执行程序。

     注意:命令提示符运行的是那个cpp文件运行后所产生的那个exe文件!。

    您可以看到屏幕上显示 "Hello,World!"。

向函数传递字符串

命令行参数

        执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。
        命令行参数是向函数传递字符串,需在main函数中添加两个形参,其中,argc 是指传入参数的个数,它包括了文件名,所以初始值是1;argv[] 是一个指针数组,指向传递给程序的每个参数。

        向函数传递字符串就直接在后面加上就行,用空格区分。

        下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作:

#include<stdio.h>
int main(int argc,char*argv[])
{
   int i;
   printf("The program name is:%s\n ",argv[0]);
   printf("%d\n",argc);
 
   if(argc > 1)
   {
       printf("The other arguments are following:\n");
       for(i=1;i<argc;i++)
       { 
          printf("%s\n",argv[i]);       
        }
   }
   return 0;
}

 结果如下:

一些常用的指令操作

d:切换到D盘

cd 空格 路径 

进入当前路径目录,eg:  cd  C:\Users\Public 
cd. 当前目录
cd.. 返回上一级目录
cd\ 返回当前盘符根目录
dir查看当前路径下的文件夹和文件内容
dir/s/b d:\file查找文件。只需要输入路径即可,无需cd返回路径 
date日期设置命令
time 时间设置命令
cls清屏
exit 退出命令提示符窗口
F7查看历史命令,选中之后执行用过的命令
ctrl+c终止命令
cd.>file.txt新建空文件,eg:  cd.>file.docx 
type nul> newtest.txt 新建空文件
type   文件名.后缀查看文件
ren 源文件.后缀  新文件.后缀修改文件名
echo 文件中的内容>new.txt新建非空文件
md d:\typora\file

新建文件夹

mkdir newtest新建文件夹
start 文件名字打开文件夹或文件
命令 -help使用help命令查看帮助的第1种形式的使用帮助
命令  /?使用help命令查看帮助的第2种形式的使用帮助
cd /?   或  cd/?查看cd命令的具体用法(/表示命令的功能开关)
md /?  或  cd/?查看md命令的具体用法
tree

生成目录树,按ctrl+c可以停掉

md  盘符:路径名  文件夹名称创建文件夹
rd  盘符:路径名  文件夹名称删除文件夹
del  a.txt  /p删除a文件夹下的a.txt文件( 文件夹中的其他文件夹内不会被修改)
del  盘符:路径  文件.后缀名 参数删除指定路径下的指定文件
del  盘符:路径  *.txt  /p删除指定路径下的所有扩展名为txt的文件
del *.txt   删除指定后缀的文件, eg:  del *.docx
copy con 文件.后缀创建文件
copy  源目录/文件 目的目录/文件拷贝文件,eg: copy  E:\music\*陈奕迅*.*  E:\test
move 路径\文件名 路径\文件名             

移动文件

netstat查看网络连接状态
ping www.csdn.net查询ip地址
ipconfig查看ip地址
netstat -ano

查看网络连接、状态以及对应的进程id

shutdown -s关机
shutdown -p关闭本地计算机,没有超时或警告
shutdown -f强制关闭正在运行的应用程序而不提前警告用户
shutdown -s -t 60定时关机,定时60s,时间自定
shutdown -r关机并重启
shutdown -l注销当前用户
shutdown -h休眠,可以搭配-f,shut down -h -f。不可以搭配-t
shutdown -a解除命令
explorer.exe通过命令行方式进入桌面,可以使用以下指令

很高兴为您提供一个简单的交互式shell程序shellex2.c的代码实现,具备上述所述的功能: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/wait.h> #define MAX_LINE 80 /* 每个命令行的最大长度 */ #define MAX_ARGS 10 /* 每个命令的最大参数数 */ void execute(char **args, int args_count, int redirect_output, char *output_file, int pipe_next, char **pipe_args, int pipe_args_count); int main() { char *args[MAX_ARGS + 1]; /* 保存参数的数组,最后一项为NULL */ char input_buffer[MAX_LINE]; /* 存储用户输入的缓冲区 */ int should_run = 1; /* 程序是否继续运行的标志 */ int redirect_output = 0; /* 是否需要输出重定向 */ char *output_file = NULL; /* 输出重定向的目标文件名 */ int pipe_next = 0; /* 是否需要管道 */ char *pipe_args[MAX_ARGS + 1]; /* 管道下一个命令的参数数组 */ int pipe_args_count = 0; /* 管道下一个命令的参数数量 */ while (should_run) { printf("%% "); /* 显示命令提示符 */ fflush(stdout); /* 刷新输出缓冲区 */ /* 读取用户输入 */ fgets(input_buffer, MAX_LINE, stdin); /* 解析命令 */ int args_count = 0; char *token = strtok(input_buffer, " \n"); while (token != NULL && args_count < MAX_ARGS) { args[args_count++] = token; token = strtok(NULL, " \n"); } args[args_count] = NULL; /* 处理特殊命令 */ if (args_count > 0) { if (strcmp(args[0], "exit") == 0 || strcmp(args[0], "logout") == 0) { should_run = 0; } else if (strcmp(args[args_count - 1], ">") == 0 && args_count > 2) /* 输出重定向 */ { redirect_output = 1; output_file = args[args_count - 2]; args[args_count - 2] = NULL; args[args_count - 1] = NULL; } else if (strcmp(args[args_count - 1], "|") == 0 && args_count > 1) /* 管道 */ { pipe_next = 1; args[args_count - 1] = NULL; int i; for (i = args_count; i < MAX_ARGS + 1; i++) { pipe_args[i - args_count] = args[i]; } pipe_args_count = i - args_count; } } /* 执行命令 */ if (args_count > 0 && !redirect_output && !pipe_next) { execute(args, args_count, 0, NULL, 0, NULL, 0); } /* 处理输出重定向 */ if (redirect_output) { execute(args, args_count - 2, 1, output_file, 0, NULL, 0); redirect_output = 0; output_file = NULL; } /* 处理管道 */ if (pipe_next) { int pipefd[2]; pid_t pid; if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } pid = fork(); if (pid == -1) { perror("fork"); exit(EXIT_FAILURE); } else if (pid == 0) /* 子进程 */ { close(pipefd[0]); /* 关闭读取端 */ dup2(pipefd[1], STDOUT_FILENO); /* 将标准输出重定向到管道写入端 */ execute(args, args_count, 0, NULL, 0, NULL, 0); exit(EXIT_SUCCESS); } else /* 父进程 */ { close(pipefd[1]); /* 关闭写入端 */ dup2(pipefd[0], STDIN_FILENO); /* 将标准输入重定向到管道读取端 */ execute(pipe_args, pipe_args_count, 0, NULL, 0, NULL, 0); pipe_next = 0; pipe_args_count = 0; } } /* 等待所有子进程退出 */ int status; while (waitpid(-1, &status, WNOHANG) > 0) { continue; } } return 0; } void execute(char **args, int args_count, int redirect_output, char *output_file, int pipe_next, char **pipe_args, int pipe_args_count) { pid_t pid = fork(); if (pid == -1) { perror("fork"); exit(EXIT_FAILURE); } else if (pid == 0) /* 子进程 */ { if (redirect_output) { int fd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (fd == -1) { perror("open"); exit(EXIT_FAILURE); } dup2(fd, STDOUT_FILENO); /* 将标准输出重定向到目标文件 */ close(fd); } int ret = execvp(args[0], args); /* 执行命令 */ if (ret == -1) { perror("execvp"); exit(EXIT_FAILURE); } } else /* 父进程 */ { if (!pipe_next) { waitpid(pid, NULL, 0); /* 等待子进程退出 */ } } } ``` 这个shell程序支持输出重定向和管道功能,例如: ``` % ls > files.txt % cat files.txt | grep shell ``` 这将把`ls`命令的输出重定向到`files.txt`文件中,然后将`files.txt`文件作为输入管道传递给`grep shell`命令,以查找包含字符串“shell”的行。 请注意,这个程序只是一个简单的示例,可能无法完全满足您的需求。例如,它没有处理一些特殊字符,如引号和反斜杠。如果您需要更高级的shell功能,您可能需要考虑使用更成熟的shell程序,如Bash或Zsh。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值