我有一个任务:在新行上打印%PATH%变量的所有条目.例如:
C:\Program Files\
C:\Windows
C:\Windows\System32
Run Code Online (Sandbox Code Playgroud)
等等...
大多数编辑器允许您在从命令行打开文件时传递参数,以转到文件中的特定行号(和列).
我怎么能用Atom做到这一点?
我正在编写一个简单的脚本来替换环境变量中的文本和其他文本.我遇到的麻烦是从其他变量中提取替换或替换文本
SET a=The fat cat
ECHO %a%
REM Results in 'The fat cat'
ECHO %a:fat=thin%
REM Results in 'The thin cat'
Run Code Online (Sandbox Code Playgroud)
工作正常(输出是'肥猫'和'瘦猫'
但是,如果'fat'或'thin'在变量中,它就不起作用
SET b=fat
ECHO %a:%c%=thin%
REM _Should_ give 'The thin cat'.
REM _Actually_ gives '%a:fat=thin%' (the %c% is evaluated, but no further).
REM using delayed evaluation doesn't make any difference either
ECHO !a:%c%=thin!
REM Actual output is now '!a:fat=thin!'
Run Code Online (Sandbox Code Playgroud)
我知道这可以像以前在博客中看到的那样完成,但我从未保存过博客的链接.
有人有主意吗?
PS.我在Windows 7上运行脚本
PPS.我知道这在Perl/Python /其他脚本语言中更容易选择,但我只是想知道为什么那些应该很容易的事情并不是很明显.
购买力平价.我还尝试了明确打开延迟扩展的脚本
SETLOCAL enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)
这没什么区别.
我想找出目录中的哪些文件是dos文本文件(而不是unix文本文件).
我尝试过的:
find . -name "*.php" | xargs grep ^M -l
Run Code Online (Sandbox Code Playgroud)
它没有给我可靠的结果......所以我正在寻找一个更好的选择.
有什么建议,想法?
谢谢
澄清
除了我上面所说的,问题是我有一堆dos文件,其中没有^ M字符(因此我关于可靠性的说明).
我目前确定文件是否为dos的方式是通过Vim,其底部是:
"filename.php" [dos] [noeol]
Run Code Online (Sandbox Code Playgroud) 摘要:
从命令行(在Windows Server 2003 R2上),我键入:
> SET password=a^b
> ECHO %password%
Run Code Online (Sandbox Code Playgroud)
结果是"ab".怪胎插入符号(^)去了哪里?然后我尝试用^^,`^,%^,^^^"逃避"它,并且这些都没有使插入符号传递给echo命令.这个批处理文件位于中间.因此,我既不能更改源系统的密码以避免使用插入符,也不能将目标系统的密码更改为与源系统不同步.
细节:
我搜索了Google,然后搜索了SO.虽然我现在有很多关于如何更好地设计我的血腥Windows批处理文件的技巧,但问题仍然存在.
我有一个名为run.bat的批处理文件,它由一系列SET语句组成,用于设置运行Java命令行应用程序的上下文.在"cd"到正确的文件夹之后,在命令行上的提示符下(在Windows Server 2003 R2上),我输入:
> run the_name the_pass^word
Run Code Online (Sandbox Code Playgroud)
当我查看回显到命令行的输出时,我看到"java ... config.user_name = the_name config.password = the_password",其中...是一堆参数和库噪声与此问题无关.血腥的插入符号(^)消失了.
我已经尝试了各种逃避策略,我试图让插入符号显示出来.我无法找到任何会导致插入符号显示的内容...除了用引号包围密码,如我输入:
> run the_name "the_pass^word"
Run Code Online (Sandbox Code Playgroud)
...然后生成的命令行如下所示:
java...config.user_name=the_name config.password="the_pass^word"
Run Code Online (Sandbox Code Playgroud)
即我得到插入符号,但引号现在出现在字符串的内容中...这自然不适用于它们被传递的应用程序.
有没有人有一个明显的提示或技巧我错过了在命令行中输入的内容通过UNTOUCHED传递给我的内部利用?该值实际上是在%2的批处理文件变量中.但是,当我第一次看到%2的内容时,它已被"解除".
嗯,我不是Windows批处理文件的粉丝.
更新:
非常感谢Joshua McKinnon的回应.我选择了他作为答案,因为它解决了我的直接问题.但是,我想进一步阐述解决方案(是的,复数).
在批处理文件"run.bat"中,使用%~1语法,如下所示:
java MyClass username=%~1 password=%~2
Run Code Online (Sandbox Code Playgroud)
...然后在命令行输入:
> run mr_clean puke^^^^boy
Run Code Online (Sandbox Code Playgroud)
要么
> run mr_clean "puke^^boy"
Run Code Online (Sandbox Code Playgroud)
然后,这将导致最终执行的语句看起来像:
java MyClass username=mr_clean password=puke^boy
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他节省时间.我结束了6个小时的切线试图追捕这种特质(更像是白痴同步).
以下程序最终总是回应"machine-abc":
@echo Off
set dropLoc=machine-abc
IF %computername% == "xyz" (
%dropLoc% = machine-xyz
)
echo %dropLoc%
Run Code Online (Sandbox Code Playgroud)
这是范围问题吗?if语句中的dropLoc变量是否具有不同的范围?我已尝试以下方法来解决此问题:
@echo Off
set dropLoc=machine-abc
IF %computername% == "xyz" (
!dropLoc! = machine-xyz
)
echo %dropLoc%
Run Code Online (Sandbox Code Playgroud)
和
@echo Off
set dropLoc=machine-abc
IF %computername% == "xyz" (
set dropLoc = machine-xyz
)
echo %dropLoc%
Run Code Online (Sandbox Code Playgroud)
我该如何工作?
我正在尝试编写BAT脚本,我有以下内容:
@echo off
REM Comments here
SETLOCAL ENABLEDELAYEDEXPANSION
set PROG_ROOT=C:\Prog
set ONE=1
echo 1>> %PROG_ROOT\test.txt
echo %ONE%>> %PROG_ROOT\test.txt
for /f "tokens=*" %%f in (folders.txt) do (
echo %%f>> %PROG_ROOT\test.txt
)
ENDLOCAL
Run Code Online (Sandbox Code Playgroud)
我的folders.txt包含数字"5".
我的test.txt输出是
ECHO is off
ECHO is off
5
Run Code Online (Sandbox Code Playgroud)
我不明白为什么前两行输出有"ECHO关闭",而第三行输出正确.如何打印正确的输出?
ETA:我试过了
echo 1>> %PROG_ROOT\test.txt
echo %ONE% >> %PROG_ROOT\test.txt
Run Code Online (Sandbox Code Playgroud)
我能打印出来
ECHO is off
1
Run Code Online (Sandbox Code Playgroud)
但是,我不需要在数字后打印尾随空格.
对于我的汇编语言类,我们使用DPMI编写DOS程序.不幸的是,我无法一直访问32位Windows机器.我确实在我使用的每台计算机上安装了一个Debian虚拟机.
我安装了DOSBox和DOSEMU.有什么办法可以在Linux而不是DOS中汇编和编译程序吗?我正在使用nasm,所以我似乎没有任何问题得到它汇编DOS格式.但是,我无法通过编译器使用我的C代码运行它并获得DOS可执行文件(使用gcc或MinGW).
有没有办法做到这一点,或者我几乎要在DOS下安装所有工具?
我在VirtualBox虚拟机上安装了MS-DOS 6.22,一切运行良好,这样做的目的是编译用C语言编写的程序,该程序显示和编辑(虚拟)RAM中的位.但是,我需要一种在虚拟MS-DOS操作系统上安装C编译器的方法.
cmd ×7
windows ×7
batch-file ×4
c ×2
dos ×2
shell ×2
assembly ×1
atom-editor ×1
debian ×1
echo ×1
find ×1
if-statement ×1
linux ×1
nasm ×1
terminal ×1
vim ×1
virtualbox ×1