批处理文件 – Windows批处理(cmd.exe)命令行参数和字符串操作
让我们在
Windows批处理脚本中考虑这个FOR循环:
D:MiLuDevC++temp :: type string.bat @ECHO OFF FOR %%a IN (%*) DO ECHO %%a 它一个接一个地回应所有的论点.真? D:MiLuDevC++temp :: string.bat foo.obj bar.obj CPPFLAGS=/EHsc foo.obj bar.obj CPPFLAGS /EHsc 它不仅在空格(好)上分割命令行参数,而且在=(不好)上分割命令行参数. 我想要实现的很简单:NMAKE.exe的包装器指定/ nomao到nmake,并且 – 这也是问题 – 通过环境变量CFLAGS和CPPFLAGS到编译器,同时包括CFLAGS的任何设置和在命令行上提供CPPFLAGS. 换句话说,我希望将脚本add / nologo添加到CFLAGS和CPPFLAGS的命令行输入中,即使没有.永远/ nologo!不要用你的徽标,同志编译器惹恼我! 更新 以下是我根据迈克的答案得出的结论: @ECHO OFF SETLOCAL SETLOCAL ENABLEDELAYEDEXPANSION FOR %%a IN (%*) DO ( SET var1=%%a ECHO %%a - !var1! - !var1:~0,1! IF "!var1:~0,1!" EQU "/" ( ECHO gefunden: %%a !var1! ) ) 明天继续…… 更新2 好的,鉴于明天已经在这里,我也可以继续……所以这是一个有效的解决方案,自豪地呈现.随意评论如何改进它. @ECHO OFF SETLOCAL SETLOCAL ENABLEDELAYEDEXPANSION SET files= SET CFLAGS=/nologo %CFLAGS% SET CPPFLAGS=/nologo %CPPFLAGS% SET state=normal FOR %%a IN (%*) DO ( SET curarg=%%a REM ECHO %%a - !curarg! - !curarg:~0,1! IF /I "%%a" EQU "CFLAGS" ( SET state=expecting_cflags ) ELSE IF /I "%%a" EQU "CPPFLAGS" ( SET state=expecting_cppflags ) ELSE ( IF "!curarg:~0,1!" EQU "/" ( REM ECHO gefunden: %%a !curarg! IF "!state!" EQU "expecting_cflags" ( REM ECHO expecting_cflags SET CFLAGS=!CFLAGS! !curarg! ) ELSE IF "!state!" EQU "expecting_cppflags" ( REM ECHO expecting_cppflags SET CPPFLAGS=!CPPFLAGS! !curarg! ) ELSE ( ECHO Logikfehler >&2 ) ) ELSE ( SET files=!files! !curarg! ) SET state=normal ) ) ECHO Dateien: !files! >&2 ECHO CFLAGS: !CFLAGS! >&2 ECHO CPPFLAGS: !CPPFLAGS! >&2 :: ECHO ON nmake /nologo %files% CFLAGS="%CFLAGS%" CPPFLAGS="%CPPFLAGS%" ENDLOCAL 解决方法
解决这个问题的一种方法是指定“CPPFLAGS = / EHsc”,然后在循环中使用%% ~a来删除双引号.
解决这个问题的另一种方法是检查%% a的第一个字符,如果它是/然后在它之前加上一个=.为了实现这一点,你需要setlocal enabledelayedexpansion,将%% a赋值给变量,然后使用%变量:~1.1%表示法来提取第一个字符,这样你就可以将它与/进行比较.有关此表示法的更多信息,请键入help set. 更新(OP更新后) 以下片段似乎有效,它比解决方案中的相应片段简单一点,并且它不包含任何参数的硬编码名称,因此它更通用: SET allargs= FOR %%a IN (%*) DO ( SET curarg=%%a IF "!curarg:~0,1!" EQU "/" ( SET allargs=!allargs!=!curarg! ) ELSE ( SET allargs=!allargs! !curarg! ) ) ECHO !allargs! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-server-2003 – 如何禁用系统服务监听Windows Serv
- 批处理文件 – cmd / DOS批处理脚本中变量周围的方括号表示
- Win7 VS2017 NASM编译FFMPEG
- Windows SBS2008上的DNS问题 – 某些外部网站不可用
- Microsoft Fakes和.Net 4.0
- WPF vs WinForms或Rich UI与稳定的应用程序?你对Windows F
- windows-installer – 无提示Windows Installer安装程序,无
- 无法远程桌面进入Windows Azure VM
- Windows批处理编程:间接/嵌套变量评估
- Vagrant在主机关机后销毁,Windows