user-0 提问: vs2015下，用C进行正文提取的疑惑

回复:
user: user-0
content: 引用 42 楼 zhao4zhong1 的回复:理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 谢谢赵四老师，我会记住的

user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 引用 39 楼 zhao4zhong1 的回复:本质上没区别，且c语言过滤文件用管道已经是业界通行做法。 https://zhidao.baidu.com/question/1446284622845532140.html 那这里面取标签之间的原理是什么，为什么要设置那么多参数，有点理解不了。。不明白为什么要加上那些判断语句什么的。能帮忙指点一下吗。

user: user-1
content: 本质上没区别，且c语言过滤文件用管道已经是业界通行做法。

user: user-0
content: 引用 36 楼 zhao4zhong1 的回复:开始、运行、cmd、确定 在黑色的cmd窗口中输入命令： cd /d "E:\我的VS之路\正文提取的test\Debug" "正文提取的test.exe" <www.txt >out.txt 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！ 最好可以用到C语言文件的读取fopen之类的，然后操作，放入文件

user: user-0
content: 引用 36 楼 zhao4zhong1 的回复:开始、运行、cmd、确定 在黑色的cmd窗口中输入命令： cd /d "E:\我的VS之路\正文提取的test\Debug" "正文提取的test.exe" <www.txt >out.txt 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！ 呃。1.我现在分开了2个程序，一个是WinExec然后一个是1楼给的代码，都编译了，但是我运行WinExec的时候，黑框上就直接显示，请按任意键继续，然后我打开那个out.txt文件，都没有东西。         2.还有就是我在cmd上面填写你给的那个，上面显示系统找不到指定文件。。。。。         3.其实我只是想用一些代码来实现，最好只有关于C的，引用，操作，结束。。。涉及到别的话。可能就有点跟我的初衷有点相反了。

user: user-1
content: 将1楼的代码放到控制台项目中,设置项目使用多字节字符集,生成对应的test.exe 在你需要去掉in.html中html marker的程序中开头添加#include <windows.h>,用WinExec……语句去掉in.html中html marker

user: user-1
content: 开始、运行、cmd、确定 在黑色的cmd窗口中输入命令： cd /d "E:\我的VS之路\正文提取的test\Debug" "正文提取的test.exe" <www.txt >out.txt 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！

user: user-1
content: 命令行解释器概述 命令行解释器是一个单独的软件程序，它可以在用户和操作系统之间提供直接的通讯。非图形命令行解释器用户界面提供运行基于字符的应用程序和实用程序的环境。通过使用类似于 MS-DOS 命令解释程序 Command.com 的单独字符，命令行解释器执行程序并在屏幕上显示其输出。Windows 服务器操作系统命令行解释器使用命令解释程序 Cmd.exe（该程序加载应用程序并指导应用程序之间的信息流动）将用户输入转换为操作系统可理解的形式。 可以使用命令行解释器创建和编辑可自动执行常规任务的批处理文件（也称作脚本）。例如，可以使用脚本自动管理用户帐户或夜间备份。还可以使用 Windows 脚本宿主 CScript 的命令行版本在命令行解释器中运行更高级的脚本。详细信息，请参阅运行 Windows 脚本宿主。通过使用批处理文件来执行操作，可比使用用户界面更有效率。批处理文件接受命令行上可用的所有命令。有关批处理文件和脚本的详细信息，请参阅使用批处理文件。 您可以自定义命令提示符窗口以易于查看并增强对程序运行方式的控制。有关自定义命令提示符窗口的详细信息，请参阅配置命令提示符。  使用命令语法 语法按命令及所带参数必须遵循的键入顺序出现。下面的 xcopy 命令示例显示了各种语法文本格式：  xcopy Source [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:MM-DD-YYYY]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a | /m}] [/n] [/o] [/x] [/exclude:File1[+[File2]][+[File3]] [{/y | /-y}] [/z]  下表说明如何解释不同的文本格式。  格式化图例 格式                                             含义 斜体                                             用户必须提供的信息 粗体                                             用户必须准确键入的要显示的元素 省略号(...)                                      在命令行中可多次重复的参数 中括号([])                                       可选项 大括号({})；选项用竖线(|)分隔。例如：{even|odd}  用户必须从选项集合中选择一个 Courier字体                                      代码或程序输出  使用多个命令和条件处理符号 使用条件处理符号可以在单个命令行或脚本中运行多个命令。通过条件处理符号运行多个命令时，条件处理符号右边的命令根据条件处理符号左边命令的执行结果来发挥作用。例如，只有在前一个命令失败的情况下才可能需要运行一个新命令。或者，只有在前一个命令成功时才可能需要运行一个新命令。 可以使用下表列出的特殊字符来传递多个命令。  字符       语法                            定义 & [...]    Command1 & Command2             用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令，然后运行第二个命令。 && [...]   Command1 && Command2            只有在符号 && 前面的命令成功时，才运行该符号后面的命令。Cmd.exe 运行第一个命令，然后只有在第一个命令运行成功时才运行第二个命令。 || [...]   Command1 || Command2            只有在符号 || 前面的命令失败时，才运行符号 || 后面的命令。Cmd.exe 运行第一个命令，然后只有在第一个命令未能运行成功（接收到大于零的错误代码）时才运行第二个命令。 ( ) [...]  (Command1 & Command2)           用来分组或嵌套多个命令。 ;或者,     Command1 Parameter1;Parameter2  用来分隔命令参数。  注意 “与”符号 (&)、管道符号 (|) 以及括号 () 是特殊字符，将它们作为参数传递时，必须在其前面加上转义字符 (^) 或引号。 如果某个命令成功完成操作，该命令就返回零 (0) 退出代码或不返回任何退出代码。有关退出代码的详细信息，请参阅 Microsoft Windows 部署和资源工具包。  嵌套命令行解释器 通过在命令提示符下打开新的 Cmd.exe 实例，可以在 Cmd.exe 内嵌套命令行解释器。默认情况下，Cmd.exe 的每个实例继承其父 Cmd.exe 应用程序的环境。通过嵌套 Cmd.exe 的实例，可以更改局部环境，而不会影响 Cmd.exe 的父应用程序。这使您能够保留 Cmd.exe 的原始环境，并在终止嵌套的命令行解释器之后返回到原始环境。但是在嵌套的命令行解释器中所做的更改将不会被保存。 要嵌套命令行解释器，请在命令提示符下键入：  cmd  出现类似于下面内容的消息：  Microsoft (R) Windows Server 2003 Standard Edition (TM) (C) 版权所有 1985-2002 Microsoft Corp. 要关闭嵌套的命令行解释器，请键入 exit。  使用 setlocal 和 endlocal 命令，可以在 Cmd.exe 的实例中（或在脚本中）进一步将更改局部化。Setlocal 创建局部作用范围，而 endlocal 终止局部作用范围。在 setlocal 和 endlocal 作用范围内所做的更改将会被放弃，从而保持原始环境不变。这两个命令的嵌套最高可达到 32 级。有关 setlocal 和 endlocal 命令的详细信息，请参阅 Setlocal 和 Endlocal。  将环境变量与 Cmd.exe 一起使用 Cmd.exe 命令行解释器环境由确定命令行解释器和操作系统行为的变量进行定义。可以使用两种类型的环境变量（系统和局部）来定义命令行解释器环境或整个操作系统环境的行为。系统环境变量定义全局操作系统环境的行为。局部环境变量定义 Cmd.exe 当前实例环境的行为。 系统环境变量预置于操作系统之中，并可用于所有 Windows 服务器操作系统进程。只有具有管理凭据的用户才可以更改系统变量。这些变量最常用于登录脚本。 局部环境变量只有在创建变量时针对的目标用户登录到计算机时才有效。HKEY_CURRENT_USER 配置单元中设置的局部变量只对当前用户有效，但它们可定义全局操作系统环境的行为。  下表按优先顺序的降序描述变量的各种类型： 1.内置系统变量 2.在 HKEY_LOCAL_MACHINE 配置单元中找到的系统变量 3.在 HKEY_CURRENT_USER 配置单元中找到的局部变量 4.在 Autoexec.bat 文件中设置的所有环境变量和路径 5.在登录脚本（如果有的话）中设置的所有环境变量 6.在脚本或批处理文件中交互使用的变量  在命令行解释器中，Cmd.exe 的每个实例都继承其父应用程序的环境。因此，可以在不影响父应用程序环境的情况下更改新的 Cmd.exe 环境中的变量。 下表列出 Windows server operating system 的系统和本地环境变量。  变量                     类型       描述 %ALLUSERSPROFILE%        本地       返回“所有用户”配置文件的位置。 %APPDATA%                本地       返回默认情况下应用程序存储数据的位置。 %CD%                     本地       返回当前目录字符串。 %CMDCMDLINE%             本地       返回用来启动当前的Cmd.exe的准确命令行。 %CMDEXTVERSION%          系统       返回当前的“命令处理程序扩展”的版本号。 %COMPUTERNAME%           系统       返回计算机的名称。 %COMSPEC%                系统       返回命令行解释器可执行程序的准确路径。 %DATE%                   系统       返回当前日期。使用与date/t命令相同的格式。由Cmd.exe生成。有关date命令的详细信息，请参阅Date。 %ERRORLEVEL%             系统       返回上一条命令的错误代码。通常用非零值表示错误。 %HOMEDRIVE%              系统       返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %HOMEPATH%               系统       返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %HOMESHARE%              系统       返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 %LOGONSERVER%            本地       返回验证当前登录会话的域控制器的名称。 %NUMBER_OF_PROCESSORS%   系统       指定安装在计算机上的处理器的数目。 %OS%                     系统       返回操作系统名称。Windows2000显示其操作系统为Windows_NT。 %PATH%                   系统       指定可执行文件的搜索路径。 %PATHEXT%                系统       返回操作系统认为可执行的文件扩展名的列表。 %PROCESSOR_ARCHITECTURE% 系统       返回处理器的芯片体系结构。值：x86或IA64（基于Itanium）。 %PROCESSOR_IDENTFIER%    系统       返回处理器说明。 %PROCESSOR_LEVEL%        系统       返回计算机上安装的处理器的型号。 %PROCESSOR_REVISION%     系统       返回处理器的版本号。 %PROMPT%                 本地       返回当前解释程序的命令提示符设置。由Cmd.exe生成。 %RANDOM%                 系统       返回0到32767之间的任意十进制数字。由Cmd.exe生成。 %SYSTEMDRIVE%            系统       返回包含Windowsserveroperatingsystem根目录（即系统根目录）的驱动器。 %SYSTEMROOT%             系统       返回Windowsserveroperatingsystem根目录的位置。 %TEMP%和%TMP%            系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP，而其他应用程序则需要 TMP。 %TIME%                   系统       返回当前时间。使用与time/t命令相同的格式。由Cmd.exe生成。有关time命令的详细信息，请参阅Time。 %USERDOMAIN%             本地       返回包含用户帐户的域的名称。 %USERNAME%               本地       返回当前登录的用户的名称。 %USERPROFILE%            本地       返回当前用户的配置文件的位置。 %WINDIR%                 系统       返回操作系统目录的位置。  设置环境变量 使用 set 命令创建、更改、删除或显示环境变量。set 命令只更改当前解释器环境中的变量。  要查看变量，请在命令提示符下键入：  set VariableName  要添加变量，请在命令提示符下键入：  set variablename=Value  要删除变量，请在命令提示符下键入：  set VariableName=  可以将大多数字符用作变量值，其中包括空格。如果使用特殊字符 <、>、|、& 或 ^，则必须在它们前面加上转义字符 (^) 或引号。如果使用引号，则必须将引号作为值的组成部分，因为等号后面的任何内容都会被视为值。请考虑下列示例：  要创建变量值 new&name，请键入： set varname=new^&name  要创建变量值 "new&name"，请键入： set varname="new&name"  如果在命令提示符下键入 set varname=new&name，就会出现与下面内容类似的错误消息： “'name' 不是内部或外部文件，也不是可运行的程序或批处理文件。” 变量名不区分大小写。但是，set 显示的变量与您键入的完全相同。可以在变量名中结合使用大写字母和小写字母，这样可以使代码更具有可读性（例如，UserName）。  注意  单个环境变量的最大大小为 8192 字节。 所有环境变量的大小总和（包括变量名和等号）最大为 65,536 KB。 替换环境变量值 要在命令行或脚本中启用变量值替换，请将变量名包括在百分号之中（即，%VariableName%）。使用百分号可以确保 Cmd.exe 引用变量值，而不是进行文字比较。为变量名定义变量值之后，请将变量名包括在百分号之中。Cmd.exe 搜索该变量名的所有实例，并用定义的变量值进行替换。例如，如果创建包含不同值（例如，用户名）的脚本，并且想要用这些值为每个用户定义 USERNAME 环境变量，可以使用包括在百分号之中的 USERNAME 来编写代码。运行此脚本时，Cmd.exe 将用变量值替换 %USERNAME%，这样就消除了为每个用户手动执行此任务的必要。变量替换是不可递归的。Cmd.exe 检查变量一次。有关变量替换的详细信息，请参阅 For 和 Call。

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-0
content: 引用 31 楼 zhao4zhong1 的回复:你不会不懂 “正文提取的test.exe”对应我#1楼的test.cpp生成的exe 包含WinExec语句的.cpp文件生成的是另一个exe 吧。  我猜你是傻傻地把WinExec语句写到“正文提取的test.exe”对应的.cpp中了。   呃。是有点绕哈。。。。我这个的确不是很清楚，这个是操作系统的吗，如果是的话。我还没学习。。。。。我就暂时学了C。现在在练C。 。。要不然我今晚再看看。但是不一定看的出来。

user: user-1
content: calltest.cpp:#include <windows.h> int main() {  WinExec("cmd /c cd /d \"E:\\我的VS之路\\正文提取的test\\Debug\"&\"正文提取的test.exe\" <www.txt >out.txt",SW_HIDE);  return 0; } 用这个代码生成比如“E:\我的VS之路\正文提取的test\Debug\calltest.exe" 然后你双击运行calltest.exe，作用是调用”“E:\我的VS之路\正文提取的test\正文提取的test.exe“并指定输入输出重定向文件。

user: user-1
content: 你不会不懂 “正文提取的test.exe”对应我#1楼的test.cpp生成的exe 包含WinExec语句的.cpp文件生成的是另一个exe 吧。  我猜你是傻傻地把WinExec语句写到“正文提取的test.exe”对应的.cpp中了。

user: user-1
content: 在任务管理器中先结束进程“正文提取的test.exe”  这些都是常识啊！  程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。

user: user-0
content: 引用 27 楼 zhao4zhong1 的回复:WinExec("cmd /c cd /d \"E:\\我的VS之路\\正文提取的test\\Debug\"&\"正文提取的test.exe\" <www.txt >out.txt",SW_HIDE);  还是一样。。一样是另外一个进程在使用，进程无访问。。 还是说，可以用C写个语句，来读取这个txt文件，然后加上底下的操作之后，再输入到另外一个txt文件里面？

user: user-1
content: 此内容可能已更新，有关最新信息，请参见 TechCenter 网站。Cmd启动命令解释程序 Cmd.exe 的新实例。如果在不含参数的情况下使用，cmd 将显示操作系统的版本和版权信息。  语法 cmd [{/c | /k}] [/s] [/q] [/d] [{/a | /u}] [/t:FG] [/e:{on | off}] [/f:{on | off}] [/v:{on | off}] [String]  参数 /c  执行 String 指定的命令，然后停止。  /k  执行 String 指定的命令并继续。  /s  修改 /c 或 /k 后对 String 的处理。  /q  关闭回显。  /d  禁用“自动运行”命令执行。  /a  将内部命令输出按美国国家标准协会 (ANSI) 格式化为管道或文件。  /u  将内部命令输出作为 Unicode 格式化为管道或文件。  /t:FG  设置前景 F 色和背景 G 色。下表列出了可用作 F 和 G 值的有效的十六进制数字。 值 颜色  0 黑色  1 蓝色  2 绿色  3 浅绿色  4 红色  5 紫色  6 黄色  7 白色  8 灰色  9 淡蓝色  A 淡绿色  B 淡浅绿色  C 淡红色  D 淡紫色  E 淡黄色  F 亮白色   /e:on  启用命令扩展。  /e:off  禁用命令扩展。  /f:on  启用文件和目录名自动完成。  /f:off  禁用文件和目录名自动完成。  /v:on  启用延迟的环境变量扩展。  /v:off  禁用延迟的环境变量扩展。  String  指定要执行的命令。  /?  在命令提示符下显示帮助。  注释 使用多个命令  可以在 String 中使用由命令分隔符 && 分隔的多个命令，但这些命令必须用引号括起来（例如，"Command&&Command&&Command"）。  处理引号  如果指定了 /c 或 /k，cmd 会处理 String 中的其余命令，并且只有在满足下述所有条件的情况下，才保留引号：  未使用 /s。  准确使用了一对引号。  在引号内未使用任何特殊字符（例如：&<>( ) @ ^ |）。  在引号内使用了一个或多个空白字符。  引号内的 String 为可执行文件的名称。  如果上述条件不能满足，则处理 String 时将首先检查它的第一个字符以验证其是否为左引号。如果第一个字符是左引号，则它会与右引号分离开。跟在右引号之后的任何文本都会得到保留。  执行注册表子项  如果在 String 中未指定 /d，则 Cmd.exe 会查找以下注册表子项：  HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun\REG_SZ   HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun \REG_EXPAND_SZ  如果上述的一个注册表子项或两个都存在，则会在执行其他变量之前执行它们。   警告  编辑注册表不当可能会严重损坏您的系统。在更改注册表之前，应备份计算机上任何有价值的数据。  启用和禁用命令扩展  在 Windows XP 中，命令扩展在默认情况下是启用的。对于特定进程，可使用 /e:off 禁用它们。通过设置下述 REG_DWORD 值，可以在计算机上或用户会话中启用或禁用所有 cmd 命令行选项的扩展名：  HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD   HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD   在注册表中使用 Regedit.exe 可以将 REG_DWORD 值设为 0×1（即启用）或 0×0（即禁用）。用户特定设置优先于计算机设置，并且命令行选项优先于注册表设置。   警告  编辑注册表不当可能会严重损坏您的系统。在更改注册表之前，应备份计算机上任何有价值的数据。  启用命令扩展后，会影响到下述命令：   assoc  call  chdir (cd)  color  del (erase)  endlocal  for  ftype  goto  if  mkdir (md)  popd  prompt  pushd  set  setlocal  shift  start（还包括将更改外部命令过程）   有关这些命令的详细信息，请参阅“相关主题”。  启用延迟的环境变量扩展  启用延迟的环境变量扩展，可以使用感叹号字符来替代运行时的环境变量值。  启用文件和目录名自动完成  默认情况下，禁用文件和目录名自动完成。对于特定的 cmd 命令处理，可以通过 /f:{on|off来启用或禁用文件名自动完成。通过设置下述 REG_DWORD 值，可以在计算机上或用户登录会话中启用或禁用所有 cmd 命令处理的文件和目录名自动完成：  HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD   HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD   HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD   HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD   要设置 REG_DWORD 值，请运行 Regedit.exe 并使用特定功能的控制字符的十六进制值（例如，用 0×9 表示 Tab，用 0×08 表示 Backspace）。用户特定设置优先于计算机设置，并且命令行选项优先于注册表设置。   警告  编辑注册表不当可能会严重损坏您的系统。在更改注册表之前，应备份计算机上任何有价值的数据。  如果使用 /f:on 启用了文件和目录名自动完成，则对于目录名自动完成，可使用 Ctrl+D；而对于文件名自动完成，可使用 Ctrl+F。要禁用注册表中特定字符的自动完成，请使用空格值 [0×20]，因为空格不是有效的控制字符。  按 Ctrl+D 或 Ctrl+F 时，cmd 会处理文件和目录名的自动完成操作。这些组合键的作用是在 String 后附加通配符（如果还未使用），并创建匹配的路径列表，然后显示第一个匹配的路径。如果所有路径都不匹配，文件和目录名自动完成操作会发出警告声，并且不更改所显示的内容。要逐个查看匹配路径列表中的路径，请重复按 Ctrl+D 或 Ctrl+F。要向后查看该列表，请在按 Shift 的同时按 Ctrl+D 或 Ctrl+F。要放弃已保存的匹配路径列表并生成新列表，可以编辑 String，然后按 Ctrl+D 或 Ctrl+F。如果在 Ctrl+D 和 Ctrl+F 之间切换，将会放弃已保存的匹配路径列表并生成新列表。Ctrl+D 组合键与 Ctrl+F 组合键之间唯一的不同在于，Ctrl+D 仅匹配目录名，而 Ctrl+F 既匹配文件名，又匹配目录名。如果在任何内部目录命令（CD、MD 或 RD）中使用文件和目录名的自动完成，将仅使用目录的自动完成。  如果将匹配路径置于引号之中，则文件和目录名自动完成会正确地处理含有空格或特殊字符的文件名。  下述特殊字符需要有引号：& < > [ ] { } ^ = ; !' + , ` ~ [空白区域]  如果所提供的信息包含空格，请使用引号将内容引起来（例如，"Computer Name"）。  如果从 String 内处理文件和目录名自动完成操作，则将放弃 [Path] 在光标右侧的任何部分（即在 String 中处理自动完成操作的位置）。  格式化图例 格式 含义  斜体 用户必须提供的信息  粗体 用户必须准确键入的要显示的元素  省略号 (...) 在命令行中可多次重复的参数  中括号 ([]) 可选项  大括号 ({})；选项用竖线 (|) 分隔。例如：{even|odd} 用户必须从选项集合中选择一个   Courier 字体 代码或程序输出    相关主题

user: user-1
content: WinExec("cmd /c cd /d \"E:\\我的VS之路\\正文提取的test\\Debug\"&\"正文提取的test.exe\" <www.txt >out.txt",SW_HIDE);

user: user-0
content: 引用 25 楼 zhao4zhong1 的回复:将1楼的代码放到控制台项目中,设置项目使用多字节字符集,生成对应的test.exe 在你需要去掉in.html中html marker的程序中开头添加#include <windows.h>,用WinExec……语句去掉in.html中html marker  WinExec("cmd /c cd /d E:\\我的VS之路\\正文提取的test\\Debug\\&正文提取的test.exe <www.txt >out.txt",SW_HIDE); 这样子写了之后他会显示 另一个程序正在使用此文件，进程无法访问。  我停了其他程序，也重开电脑，但是都还是这个。。

user: user-2
content: fscanf(fp,"%c",pBuf); //写文件 rewind(fp); fwrite(pBuf, 1, length, fp);   读一个字符到pBuf中，然后写length  * 1个字节到文件中？ 这是做什么？