当前位置: 首页 > news >正文

用WHERE命令可以在命令行搜索文件

文章目录

    • 用WHERE命令可以在命令行搜索文件
    • 概述
    • 笔记
    • 没用的小程序
    • END

用WHERE命令可以在命令行搜索文件

概述

想确认PATH变量中是否存在某个指定的程序(具体是在PATH环境变量中给出的哪个路径底下?).
开始不知道windows有where这个命令, 还自己花了2个小时写了一个小程序.
后来翻到一个cmake.bat, 才发现, 人家使用WHERE命令直接来搜索一个程序是否存在.
看了一下WHERE命令的帮助, 功能真全啊.
WHERE命令默认是在当前目录和PATH环境变量中搜索, 也可以指定路径来搜索, 还支持通配符.
where命令在winxp中没有, 在win7/win10中都有这个命令

C:\Users\chenx>where /?WHERE [/R dir] [/Q] [/F] [/T] pattern...描述:显示符合搜索模式的文件位置。在默认情况下,搜索是在当前目录和 PATH环境变量指定的路径中执行的。参数列表:/R       从指定目录开始,递归性搜索并显示符合指定模式的文件。/Q       只返回退出代码,不显示匹配文件列表。(安静模式)匹配文件。(安静模式)/F       显示所有相配文件并用双引号括上。/T       显示所有相配文件的文件的文件。pattern  指定要匹配的文件的搜索模式。通配符 * 和 ? 可以用在模式中。也可以指定 "$env:pattern""path:pattern" 格式; 其中"env" 是环境变量,搜索是在 "env" 变量的指定的路径中执行的。这些格式不应该跟 /R 一起使用。此搜索也可以用将 PATHEXT 变量扩展名附加于此模式的方式完成。/?      显示此帮助消息。注意: 如果搜索成功,此工具返回错误级别 0; 如果不成功,返回 1; 如果失败或发生错误,返回 2。示例:WHERE /?WHERE myfilename1 myfile????.*WHERE $windir:*.*WHERE /R c:\windows *.exe *.dll *.batWHERE /Q ??.???WHERE "c:\windows;c:\windows\system32:*.dll"WHERE /F /T *.dll

笔记

没用的小程序

刚开始, 自己不知道, 写了一个小程序. 从PATH环境变量中搜索指定的程序是否存在.
比MS家提供的WHERE命令low太多了.
虽然做了一个没用的实验, 也留着以后看.
通过实验, 有以下收获.

  • _access()支持带空格的路径
// getExePathNameFromEnvPath.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <io.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <map>typedef std::map<int, const char*> MAP_ENV;bool processEnvPath(const char* pszEnvPath, MAP_ENV& map_env, bool dispDebugInfo);
bool processPathValue(int sn, const char* pszPath, MAP_ENV& map_env, bool dispDebugInfo);
bool ReplaceEnv(const char* pszSrc, char*& pszDst, int& lenDst); // 需要调用者自己释放pszDst
bool IsFileExist(char* pszPathName);/*! 
cmd line = THE_EXE cmake.exe cmake.cmd cmake.bat cmake.com
run result
[49] - error : %JAVA_HOME%\bin
find EXE from PATH [1] - C:\CMake\bin\cmake.exe
find EXE from PATH [2] - C:\Program Files (x86)\IncrediBuild\cmake.bat
*//*
正好翻到一个cmake.bat, 里面用where来检测cmake在哪里, win10中可用
where cmake
C:\CMake\bin\cmake.exe// 默认是在当前路径和%PATH%中查找, 可以带通配符
C:\Users\chenx>where cmake.*
C:\CMake\bin\cmake.exe
C:\Program Files (x86)\IncrediBuild\cmake.txt// 可以在指定目录下搜索指定的文件
WHERE /R c:\windows *.exe *.dll *.bat// where 命令帮助给出的例子WHERE myfilename1 myfile????.*WHERE $windir:*.*WHERE /R c:\windows *.exe *.dll *.batWHERE /Q ??.???WHERE "c:\windows;c:\windows\system32:*.dll"WHERE /F /T *.dll
*//*!
去winxp下看了一下, 并没有where这个命令
在win7/win10中都有这个命令
在win10中的位置如下:
C:\Users\chenx>where where*.*
C:\Windows\System32\where.exe
*/int main(int argc, char** argv)
{MAP_ENV map_env;MAP_ENV::iterator it;int i = 0;const char* pszEnvPath = ::getenv("PATH");char szBuf[_MAX_PATH];int iFindPos = 0;do {if (argc < 2){printf("function : to find argv[x]'s prog on %%PATH%%\n");printf("usage : THE_EXE prog_to_find1 prog_to_find2 ...\n");break;}// insert %path%'s value item to mapprocessEnvPath(pszEnvPath, map_env, false);// use map_envfor (i = 1; i < argc; i++){for (it = map_env.begin(); it != map_env.end(); it++){assert(NULL != it->second);memset(szBuf, 0, sizeof(szBuf));strcpy(szBuf, it->second);if (szBuf[strlen(szBuf) - 1] != '\\'){szBuf[strlen(szBuf)] = '\\';}strcat(szBuf, argv[i]);// find szBuf is exist?if (IsFileExist(szBuf)){printf("find EXE from PATH [%d] - %s\n", ++iFindPos, szBuf);}}}// free map_envfor (it = map_env.begin(); it != map_env.end(); it++){if (NULL != it->second){delete[] it->second;it->second = NULL;}}map_env.clear();} while (false);system("pause");
}bool IsFileExist(char* pszPathName)
{bool b_rc = false;// find EXE from PATH [2] - C:\Program Files (x86)\IncrediBuild\cmake.bat// _access 支持带空格的路径do {assert(NULL != pszPathName);if (0 != _access(pszPathName, 0)){break;}b_rc = true;} while (false);return b_rc;
}bool processEnvPath(const char* pszEnvPath, MAP_ENV& map_env, bool dispDebugInfo)
{bool b_rc = false;char* pszBuf = NULL;char* pszFind = NULL;char* pszFindRc = NULL;int len = 0;int i = 0;do {if (NULL == pszEnvPath){break;}len = (int)strlen(pszEnvPath);if (len <= 0){break;}pszBuf = new char[len + 1];pszBuf[len] = '\0';strcpy(pszBuf, pszEnvPath);pszFind = pszBuf;do {i++;// printf("i = %d\n", i);if (67 == i){i = i; // for debug}pszFindRc = strchr(pszFind, ';');if (NULL == pszFindRc){// 最后一个processPathValue(i, pszFind, map_env, dispDebugInfo);break;}else {pszFindRc[0] = 0x00;processPathValue(i, pszFind, map_env, dispDebugInfo);pszFindRc[0] = ';';if (0x00 == pszFindRc[1]){break;}pszFind = pszFindRc + 1;}} while (true);} while (false);if (NULL != pszBuf){delete[] pszBuf;pszBuf = NULL;}return b_rc;
}bool processPathValue(int sn, const char* pszPath, MAP_ENV& map_env, bool dispDebugInfo)
{bool b_rc = false;char* pszTmp = NULL;int lenTmp = 0;do {if (NULL == pszPath){break;}if (dispDebugInfo){printf("[%d] %s\n", sn, pszPath);}if (NULL == strchr(pszPath, '%')){// printf("[%2d] - %s\n", sn, pszPath);if (map_env.find(sn) == map_env.end()){pszTmp = new char[strlen(pszPath) + 1];strcpy(pszTmp, pszPath);map_env.insert(std::pair<int, const char*>(sn, pszTmp));}else {assert(false);}}else {// 有环境变量if (ReplaceEnv(pszPath, pszTmp, lenTmp)){// printf("[%2d] - %s\n", sn, pszPath);if (map_env.find(sn) == map_env.end()){map_env.insert(std::pair<int, const char*>(sn, pszTmp));}else {assert(false);}}else {printf("[%2d] - error : %s\n", sn, pszPath);}}b_rc = true;} while (false);assert(true == b_rc);return b_rc;
}bool ReplaceEnv(const char* pszSrc, char*& pszDst, int& lenDst)
{bool b_rc = false;const char* pszCur = NULL;int iPosDst = 0;bool bFindEnvBegin = false;bool bFindEnvEnd = false;char szEnv[_MAX_PATH];int iPosEnv = 0;char* pszEnvValue = NULL;pszDst = NULL;lenDst = 0;do {if ((NULL == pszSrc) || (strlen(pszSrc) <= 0)){break;}pszDst = new char[_MAX_PATH];lenDst = _MAX_PATH;pszCur = pszSrc;while (0x00 != pszCur[0]){if (!bFindEnvBegin){if (pszCur[0] != '%'){pszDst[iPosDst++] = pszCur[0];}else {bFindEnvBegin = true;memset(szEnv, 0, sizeof(szEnv));pszCur++;continue;}}else if (bFindEnvBegin && !bFindEnvEnd){if (pszCur[0] != '%'){szEnv[iPosEnv++] = pszCur[0];}else {bFindEnvEnd = true;// get %szEnv% value pEnvpszEnvValue = getenv(szEnv);if (NULL == pszEnvValue){goto END;}// append pEnv to pszDststrcpy(pszDst, szEnv);}}pszCur++;}b_rc = true;} while (false);END:if (!b_rc){if (NULL != pszDst){delete[] pszDst;pszDst = NULL;}lenDst = 0;}return b_rc;
}

END

相关文章:

用WHERE命令可以在命令行搜索文件

文章目录 用WHERE命令可以在命令行搜索文件概述笔记没用的小程序END 用WHERE命令可以在命令行搜索文件 概述 想确认PATH变量中是否存在某个指定的程序(具体是在PATH环境变量中给出的哪个路径底下?). 开始不知道windows有where这个命令, 还自己花了2个小时写了一个小程序. 后…...

持续交付/持续部署流水线介绍(CD)

目录 一、概述 二、典型操作流程 2.1 CI/CD典型操作流 2.2 CI/CD操作流程说明 2.3 总结 三、基于GitHubDocker的持续交付/持续部署流水线&#xff08;公有云&#xff09; 3.1 基于GitHubDocker的持续交付/持续部署操作流程示意图 3.2 GitHubDocker持续交付/持续部署流水…...

第四百三十八回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容&#xff0c;本章回中将介绍如何在页面上显示蒙板层.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…...

Python学习:面相对象

面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实…...

SSM学习——Spring AOP与AspectJ

Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming&#xff0c;即面向切面编程。 想象你是汉堡店的厨师&#xff0c;每一份汉堡都有好几层&#xff0c;这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡&#xff0c;如果按照传统的方…...

Android 使用LeakCanary检测内存泄漏,分析原因

内存泄漏是指无用对象&#xff08;不再使用的对象&#xff09;持续占有内存或无用对象的内存得不到及时释放&#xff0c;从而造成内存空间的浪费称为内存泄漏。 平时我们在使用app时&#xff0c;少量的内存泄漏我们是发现不了的&#xff0c;但是当内存泄漏达到一定数量时&…...

Linux部署Kafka2.8.1

安装Jdk 首先确保你的机器上安装了Jdk&#xff0c;Kafka需要Java运行环境&#xff0c;低版本的Kafka还需要Zookeeper&#xff0c;我此次要安装的Kafka版本为2.8.1&#xff0c;已经内置了一个Zookeeper环境&#xff0c;所以我们可以不部署Zookeeper直接使用。 1、解压Jdk包 t…...

【pytest、playwright】allure报告生成视频和图片

目录 1、修改插件pytest_playwright 2、conftest.py配置 3、修改pytest.ini文件 4、运行case 5、注意事项 1、修改插件pytest_playwright pytest_playwright.py内容如下&#xff1a; # Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Ver…...

浅谈iOS开发中的自动引用计数ARC

1.ARC是什么 我们知道&#xff0c;在C语言中&#xff0c;创建对象时必须手动分配和释放适量的内存。然而&#xff0c;在 Swift 中&#xff0c;当不再需要类实例时&#xff0c;ARC 会自动释放这些实例的内存。 Swift 使用 ARC 来跟踪和管理应用程序的内存&#xff0c;其主要是由…...

Spring IoCDI(2)

IoC详解 通过上面的案例, 我们已经知道了IoC和DI的基本操作, 接下来我们来系统地学习Spring IoC和DI的操作. 前面我们提到的IoC控制反转, 就是将对象的控制权交给Spring的IoC容器, 由IoC容器创建及管理对象. (也就是Bean的存储). Bean的存储 我们之前只讲到了Component注解…...

30. UE5 RPG GamplayAbility的配置项

在上一篇文章&#xff0c;我们介绍了如何将GA应用到角色身上的&#xff0c;接下来这篇文章&#xff0c;将主要介绍一下GA的相关配置项。 在这之前&#xff0c;再多一嘴&#xff0c;你要能激活技能&#xff0c;首先要先应用到ASC上面&#xff0c;才能够被激活。 标签 之前介绍…...

提升自己最快的方式是什么?

提升自己最快的方式通常涉及到个人成长的各个方面&#xff0c;包括心理、情感、技能和知识等。根据查阅到的资料&#xff0c;以下是一些具体的方法和步骤&#xff0c;帮助你快速提升自己&#xff1a; 1. 培养屏蔽力 荷兰畅销书作家罗伊马丁纳提到&#xff0c;屏蔽力是个人成长…...

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

题目&#xff1a;一个5位数&#xff0c;判断它是不是回文数。即12321是回文数&#xff0c;个位与万位相同&#xff0c;十位与千位相同。    There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence…...

《HelloGitHub》第 96 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …...

C++tuple类型

tuple 类型 tuple是类似pair的模板。 每个pair的成员类型都不相同&#xff0c;但每个pair都恰好有两个成员。不同tuple类型的成员类型也不相同&#xff0c;但一个tuple可以有任意数量的成员。 每个确定的tuple类型的成员数目是固定的&#xff0c;但一个tuple类型的成员数目可…...

亚远景科技-浅谈ASPICE标准和ASPICE认证/评估

ASPICE&#xff08;Automotive SPICE&#xff09;是一种针对汽车行业的软件开发过程的评估模型&#xff0c;它旨在帮助汽车制造商和供应商提高软件开发过程的能力和质量&#xff0c;从而提升产品的质量、安全性和效率。 ASPICE标准涵盖了软件开发的各个阶段和活动&#xff0c;…...

PHP性能提升方案

一、背景与介绍 PHP语言开发效率高&#xff0c;特别应用于适合中小型项目&#xff0c;对于创业初期敏捷开发验证项目可行性或者Demo演示绝对占据优势。 但是随着现在Web应用的复杂性&#xff0c;针对项目要适应高并发、高流量的访问特性&#xff0c;PHP确实在性能方面相对Go、J…...

关系(二)利用python绘制热图

关系&#xff08;二&#xff09;利用python绘制热图 热图 &#xff08;Heatmap&#xff09;简介 热图适用于显示多个变量之间的差异&#xff0c;通过颜色判断彼此之间是否存在相关性。 快速绘制 基于seaborn import seaborn as sns import pandas as pd import numpy as np i…...

P8597 [蓝桥杯 2013 省 B] 翻硬币

# [蓝桥杯 2013 省 B] 翻硬币 ## 题目背景 小明正在玩一个“翻硬币”的游戏。 ## 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#x…...

主流公链 - Fantom

Fantom&#xff1a;高性能的区块链协议 Fantom是一种开创性的区块链协议&#xff0c;旨在革新去中心化应用和数字金融领域 技术特点 共识机制 Lachesis协议&#xff1a;Fantom使用了Lachesis协议作为其共识算法。Lachesis是一种 异步拜占庭容错&#xff08;ABFT&#xff09;共…...

vue-quill-editor 富文本编辑器(可上传视频图片),组件挂载的方式实现

1.安装 npm install vue-quill-editor --save npm install quill-image-drop-module --save npm install quill-image-resize-module --save2.在组件下面新增组件 QlEditor (1)index.vue <template><div><div idquillEditorQiniu><!-- 基于element…...

入门编程第一步,从记住这些单词开始

** 入门编程第一步&#xff0c;从记住这些单词开始 ** 2023-10-18 一、交互式环境与 print 输出 1、print : 打印/输出 2、coding : 编码 3、syntax : 语法 4、error : 错误 5、invalid : 无效 6、idenfifier : 名称/标识符 7、character : 字符 二、字符串的操作&#x…...

[C++]使用OpenCV去除面积较小的连通域

这是后期补充的部分&#xff0c;和前期的代码不太一样 效果图 源代码 //测试 void CCutImageVS2013Dlg::OnBnClickedTestButton1() {vector<vector<Point> > contours; //轮廓数组vector<Point2d> centers; //轮廓质心坐标 vector<vector<Point&…...

vscode连接不上,终端ssh正常,一直输入密码正确但是无法登录

若是之前链结果突然等不上&#xff0c;使用第一个链接 若是第一次链接连不上&#xff0c;先使用第二个链接&#xff0c;在使用第一个链接 原因&#xff1a;原因是服务器端的wget命令不能使用&#xff0c;vscode需要服务器端下载个文件&#xff0c;无法下载就导致了如上的错误…...

Hive on Spark 配置

目录 1 Hive 引擎简介2 Hive on Spark 配置2.1 在 Hive 所在节点部署 Spark2.2 在hive中创建spark配置文件2.3 向 HDFS上传Spark纯净版 jar 包2.4 修改hive-site.xml文件2.5 Hive on Spark测试2.6 报错 1 Hive 引擎简介 Hive引擎包括&#xff1a;MR&#xff08;默认&#xff09…...

ROS 基本

ROS创建自己的功能包 ROS中工作空间(workspace)是一个存放工程开发相关文件的文件夹&#xff0c;其中有四个文件夹。 src:代码空间(Source Space)build:编译空间(Build Space)devel:开发空间(Development Space)install:安装空间(Install Space) OK接下来创作工作空间&#…...

Pygame基础9-射击

简介 玩家用鼠标控制飞机&#xff08;白色方块&#xff09;移动&#xff0c;按下鼠标后&#xff0c;玩家所在位置出现子弹&#xff0c;子弹匀速向右飞行。 代码 没有什么新的东西&#xff0c;使用两个精灵类表示玩家和子弹。 有一个细节需要注意&#xff0c;当子弹飞出屏幕…...

Ps:颜色查找

颜色查找 Color Lookup命令通过应用预设的 LUT 来改变图像的色彩和调性&#xff0c;从而为摄影师和设计师提供了一种快速实现复杂色彩调整的方法&#xff0c;广泛应用于颜色分级、视觉风格的统一和创意色彩效果的制作。 Ps菜单&#xff1a;图像/调整/颜色查找 Adjustments/Colo…...

vue3+vite 模板vue3-element-admin框架如何关闭当前页面跳转 tabs

使用模版: 有来开源组织 / vue3-element-admin 需要关闭的.vue 页面增加以下方法 //setup 里import {LocationQuery, useRoute, useRouter} from "vue-router"; const router useRouter(); function close() {console.log(|--router.currentRoute.value, router.cur…...

JavaScript 对象管家 Proxy

JavaScript 在 ES6 中&#xff0c;引入了一个新的对象类型 Proxy&#xff0c;它可以用来代理另一个对象&#xff0c;并可以在代理过程中拦截、覆盖和定制对象的操作。Proxy 对象封装另一个对象并充当中间人&#xff0c;其提供了一个捕捉器函数&#xff0c;可以在代理对象上拦截…...

视频网站怎么做统计/网络代运营推广

1 前言 1.1 学习阶段说明   从2016年9月开始接触IT&#xff0c;学习经历主要分为以下三个阶段 1.1.1 入门阶段 从最基础的前端技术HTML、JavaScript、CSS开始入门&#xff0c;再到后端技术Java基础、MySQL数据库基础知识、JDBC、Servclet、JSP。利用这些简单技术实现了从前端…...

国内著名平面设计师的个人网站/seo薪资seo

前言我于2020年开始接触、使用Vercel(ZEIT)的&#xff0c;要是我能早点知道的话&#xff0c;我也不会煞费苦心去优化Github上的个人博客的加载速度问题&#xff0c;当然国内也有类似Github的代码托管网站&#xff0c;如Gitee(码云)&#xff0c;Coding(被腾讯收购&#xff0c;还…...

宁夏企业网站建设/临沂网站建设

1. 相对定位 relative&#xff1a;定位是相对于自身位置定位&#xff08;设置偏移量的时候&#xff0c;会相对于自身所在的位置偏移&#xff09;。设置了relative的元素仍然处在文档流中&#xff0c;元素的宽高不变&#xff0c;设置偏移量也不会影响其他元素的位置。最外层容器…...

我的世界是怎么做的视频网站/免费的网站推广平台

导读&#xff1a;习惯的力量是惊人的。习惯能载着你走向成功&#xff0c;也能驮着你滑向失败。如何选择&#xff0c;完全取决于你自己。 1.习惯的力量:35岁以前养成好习惯 你想成功吗&#xff1f;那就及早培养有利于成功的好习惯。 习惯的力量是惊人的&#xff0c;35岁以前养成…...

网络编程有哪些/百度搜索优化

焦红伟&#xff0c;博士&#xff0c;副教授&#xff0c;硕士生导师&#xff0c;河南省高校青年骨干教师。2015年毕业于西安电子科技大学&#xff0c;获理学博士学位。主要从事最优化算法及应用、系统优化、智能优化算法及应用等方面的研究工作。近年来对非凸规划问题的全局优化…...

网站提交至google/谷歌自然排名优化

这里介绍的就是 MSF 的一些简单的基本使用&#xff0c;创始人 HD 摩尔曾说谁为 MS 写教程其实就是自作自受&#xff0c;纯属找虐&#xff0c;因为真的变化太快了&#xff0c;所以这里所写使一些基本功能&#xff0c;其余的需要自己去摸索… !!! 但虽然这样&#xff0c;还是有人…...