static void Main(string[] args)问题
static void Main(string[] args)中为什么传递近来的args中双引号"总给去掉了呢?
比如"e:\Program Files\a.txt"传入,出来引号就没有了,怎么样把引号给加上?
问题点数:20、回复次数:20Top
1 楼yuhongwei(不会的太多)回复于 2005-01-19 13:14:18 得分 0
自己up先Top
2 楼FJGoodGood(_FJ_强中强)回复于 2005-01-19 13:15:47 得分 2
要想传入双引号,用两个连续的双引号试试,例如:""abc"" ,得到 "abc"Top
3 楼yuhongwei(不会的太多)回复于 2005-01-19 13:18:28 得分 0
帮帮忙Top
4 楼lyvvvv(lyvvvv)回复于 2005-01-19 13:18:40 得分 2
"\"e:\Program Files\a.txt\""Top
5 楼lyvvvv(lyvvvv)回复于 2005-01-19 13:21:13 得分 1
"\"e:\Program Files\a.txt\""Top
6 楼hnhl(荒凉)回复于 2005-01-19 13:26:51 得分 1
同意楼上Top
7 楼yuhongwei(不会的太多)回复于 2005-01-19 13:26:58 得分 0
可是如果客户输入的就是"e:\Program Files\a.txt",程序中如何判断?Top
8 楼FJGoodGood(_FJ_强中强)回复于 2005-01-19 13:27:31 得分 1
果然是用\作转义,例如: "\"abc\"" 得到 "abc", 楼上正解!Top
9 楼yuhongwei(不会的太多)回复于 2005-01-19 13:30:07 得分 0
可是如果客户输入的就是"e:\Program Files\a.txt",程序中如何判断是否输入了双引号?
Top
10 楼CopyS(copys)回复于 2005-01-19 13:31:22 得分 1
同意楼上,把用户输入进行容错处理(进行转义)。Top
11 楼yuhongwei(不会的太多)回复于 2005-01-19 13:33:02 得分 0
如何把用户输入进行容错处理(进行转义)?Top
12 楼FJGoodGood(_FJ_强中强)回复于 2005-01-19 13:33:11 得分 1
if (args[0].IndexOf("\"") >= 0)
{
// 输入了双引号
}Top
13 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-01-19 13:34:52 得分 2
如果客户输入"e:\Program Files\a.txt"
就会被解释成:
args[0] = "e:\Program Files\a.txt";
如果客户输入e:\Program Files\a.txt
就会被解释成:
args[0] = "e:\Program";
args[1] = "Files\a.txt";
引号本来就是避免参数中的空格被解释成分隔符的。Top
14 楼CopyS(copys)回复于 2005-01-19 13:40:08 得分 1
长见识,那么如果输入都类似于"e:\Program Files\a.txt",只能在程序中写死了,进行判断了 。Top
15 楼yuhongwei(不会的太多)回复于 2005-01-19 13:40:08 得分 0
FJGoodGood(_FJ_强中强) :
if (args[0].IndexOf("\"") >= 0)
{
// 输入了双引号
}
查找不到双引号
=========================
Ivony()
我怎么知道用户输入的参数中是否含有双引号?Top
16 楼luyiping(路亦平)回复于 2005-01-19 13:47:03 得分 2
试试传下面这个,前面加个@
@"e:\Program Files\a.txt"Top
17 楼fsonly(FSG)回复于 2005-01-19 14:06:05 得分 1
没有必要性呀,自己程序内加上不就OK了么?Top
18 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-01-19 14:07:36 得分 5
=========================
Ivony()
我怎么知道用户输入的参数中是否含有双引号?
无解,双引号禁止作为命令行的参数。Top
19 楼yuhongwei(不会的太多)回复于 2005-01-19 15:15:13 得分 0
谢谢,揭帖。Top
20 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-01-19 15:25:01 得分 0
这个东西会对你有帮助。
启动 Windows 命令解释程序一个新的实例
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C 执行字符串指定的命令然后中止
/K 执行字符串指定的命令但保留
/S 在 /C 或 /K 后修改字符串处理(见下)
/Q 关闭回显
/D 从注册表中停用执行 AutoRun 命令(见下)
/A 使向内部管道或文件命令的输出成为 ANSI
/U 使向内部管道或文件命令的输出成为 Unicode
/T:fg 设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON 启用命令扩展(见下)
/E:OFF 停用命令扩展(见下)
/F:ON 启用文件和目录名称完成字符(见下)
/F:OFF 停用文件和目录名称完成字符(见下)
/V:ON 将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会
允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF 停用延迟环境扩展。
请注意,如果字符串有引号,可以接受用命令分隔符 '&&' 隔开
的多个命令。并且,由于兼容原因,/X 与 /E:ON 相同,/Y 与
/E:OFF 相同,并且 /R 与 /C 相同。忽略任何其他命令行开关。
如果指定了 /C 或 /K,命令行开关后的命令行其余部分将作为命令行处
理;在这种情况下,会使用下列逻辑处理引号字符("):
1. 如果符合下列所有条件,那么在命令行上的引号字符将被
保留:
- 不带 /S 命令行开关
- 整整两个引号字符
- 在两个引号字符之间没有特殊字符,特殊字符为下列中的
一个: <>()@^|
- 在两个引号字符之间有至少一个空白字符
- 在两个引号字符之间有至少一个可执行文件的名称。
2. 否则,老办法是,看第一个字符是否是一个引号字符,如果
是,舍去开头的字符并删除命令行上的最后一个引号字符,
保留最后一个引号字符之后的文字。
如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找
以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或
两个都存在,这两个变量会先被执行。
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
命令扩展是按默认值启用的。您也可以使用 /E:OFF,为某一
特定调用而停用扩展。您可以在机器上和/或用户登录会话上
启用或停用 CMD.EXE 所有调用的扩展,这要通过设置使用
REGEDT.EXE 的注册表中的一个或两个 REG_DWORD 值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
到 0x1 或 0x0。用户特定设置比机器设置有优先权。命令行
开关比注册表设置有优先权。
命令扩展包括对下列命令所做的更改和/或添加:
DEL 或 ERASE
COLOR
CD 或 CHDIR
MD 或 MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (同时包括对外部命令调用所做的更改)
ASSOC
FTYPE
有关特定详细信息,请键入 commandname /? 查看。
延迟环境变量扩展不按默认值启用。您可以用/V:ON 或 /V:OFF
开关,为 CMD.EXE 的某个调用而启用或停用延迟环境变量扩展。
您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有
调用的延迟扩展,这要通过设置使用 REGEDT.EXE 的注册表中的
一个或两个 REG_DWORD 值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
到 0x1 或 0x0。用户特定设置比机器设置有优先权。命令行开关
比注册表设置有优先权。
如果延迟环境变量扩展被启用,惊叹号字符可在执行时间,被用来
代替一个环境变量的数值。
您可以用 /F:ON 或 /F:OFF 开关为 CMD.EXE 的某个
调用而启用或禁用文件名完成。您可以在计算上和/或
用户登录会话上启用或禁用 CMD.EXE 所有调用的完成,
这可以通过使用 REGEDIT.EXE 设置注册表中的下列
REG_DWORD 的全部或其中之一:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar
由一个控制字符的十六进制值作为一个特定参数(例如,0x4
是Ctrl-D,0x6 是 Ctrl-F)。用户特定设置优先于机器设置。
命令行开关优先于注册表设置。
如果完成是用 /F:ON 开关启用的,两个要使用的控制符是:
目录名完成用 Ctrl-D,文件名完成用 Ctrl-F。要停用
注册表中的某个字符,请用空格(0x20)的数值,因为此字符
不是控制字符。
如果键入两个控制字符中的一个,完成会被调用。完成功能将
路径字符串带到光标的左边,如果没有通配符,将通配符附加
到左边,并建立相符的路径列表。然后,显示第一个相符的路
径。如果没有相符的路径,则发出嘟嘟声,不影响显示。之后,
重复按同一个控制字符会循环显示相符路径的列表。将 Shift
键跟控制字符同时按下,会倒着显示列表。如果对该行进行了
任何编辑,并再次按下控制字符,保存的相符路径的列表会被
丢弃,新的会被生成。如果在文件和目录名完成之间切换,会
发生同样现象。两个控制字符之间的唯一区别是文件完成字符
符合文件和目录名,而目录完成字符只符合目录名。如果文件
完成被用于内置式目录命令(CD、MD 或 RD),就会使用目录
完成。
用引号将相符路径括起来,完成代码可以正确处理含有空格
或其他特殊字符的文件名。同时,如果备份,然后从行内调用
文件完成,完成被调用时位于光标右方的文字会被调用。
需要引号的特殊字符是:
<space>
&()[]{}^=;!'+,`~Top
相关问题
- static void Main(string[] args)和static void Main()有什么区别啊?
- 郁闷的问题,static void Main(string[] args) 中的args
- public static void main(String [] args)中的string[] args是用来干什么的?
- public static void main(String args[]) throws IOException中,throws IOException是什么意思?
- 定义了public static void main(String args[]) 怎么接受不了输入的字符串?
- 求助:void 函数名(..., params String[] args)
- 曾看过很多程序,[STAThread]static void Main(string[] args) {}的“[STAThread]”表示什么意思?为什么用中括号括住呢?
- 问一个很蠢的问题:如:void main(String[] args);为什么一定要带上(如String[] args)参数
- public static void main(String args[]){...},父类与子类同时定义有这样的main方法,但在子类中运行main时,程序却跑到父类的main中执
- 请教:关于 main(String[] args)




