你怎么能从批处理文件输出中插入换行符?
我想做的事情如下:
echo hello\nworld
Run Code Online (Sandbox Code Playgroud)
哪个会输出:
hello
world
Run Code Online (Sandbox Code Playgroud) 如果我修改或添加环境变量,我必须重新启动命令提示符.是否有一个我可以执行的命令可以在不重新启动CMD的情况下执行此操作?
我有一个关于if - else批处理文件中的结构的问题.每个命令都单独运行,但是我无法安全地使用"if - else"块,所以我的程序的这些部分不起作用.我怎么能让这些部件运行?谢谢.
IF %F%==1 IF %C%==1 (
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==1 IF %C%==0 (
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==0 IF %C%==1 (
::copying a directory c from d, /s: bo? olanlar hariç, /e:bo? olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
)
ELSE IF %F%==0 IF %C%==0 (
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
Run Code Online (Sandbox Code Playgroud) 我需要将包含尖括号(<和>)的字符串回显到Windows计算机上的文件.基本上我想做的是以下内容:
echo some string < with angle > brackets >>myfile.txt
这不起作用,因为命令解释器与尖括号混淆.我可以像这样引用整个字符串:
echo "some string < with angle > brackets" >>myfile.txt
但后来我的文件中有双引号,我不想要.
转义括号ala unix也不起作用:
echo some string \< with angle \> brackets >>myfile.txt
想法?
如何使用转义双引号替换批处理文件参数中的所有双引号?这是我当前的批处理文件,它扩展了字符串中的所有命令行参数:
@echo off
call bash --verbose -c "g++-linux-4.1 %*"
Run Code Online (Sandbox Code Playgroud)
然后它使用该字符串调用Cygwin的bash,执行Linux交叉编译器.不幸的是,我将这些参数传递给我的批处理文件:
"launch-linux-g++.bat" -ftemplate-depth-128 -O3 -finline-functions
-Wno-inline -Wall -DNDEBUG -c
-o "C:\Users\Me\Documents\Testing\SparseLib\bin\Win32\LinuxRelease\hello.o"
"c:\Users\Me\Documents\Testing\SparseLib\SparseLib\hello.cpp"
Run Code Online (Sandbox Code Playgroud)
传入第一个路径的第一个引用是过早地结束传递给GCC的字符串,并将其余参数直接传递给bash(这非常失败.)
我想如果我可以将参数连接成一个单独的字符串然后转义它应该正常工作的引号,但我很难确定如何做到这一点.有人知道吗?
我非常擅长为Windows编写批处理脚本,但即便在这些年后如何正确地逃避字符让我感到困惑.在尝试找出正确的方法来逃避正则表达式以便与sed一起使用时,这一点尤其困难.有什么工具可以帮助我吗?也许某些东西允许我粘贴在"普通"字符串中并且它会吐出正确转义的字符串版本?
更新: 我不愿意举一个例子,因为我不是在寻找如何逃避一个特定字符串的答案.我也不是在寻找适合某个特定应用的解决方案.我正在寻找一种工具,它可以帮助我为每个我需要逃脱的字符串获取正确的转义语法,无论从命令行使用什么工具.
那就是我真正想要的正则表达式
(^.*)(Form Product=")([^"]*") FormType="[^"]*" FormID="([0-9][0-9]*)".*$
Run Code Online (Sandbox Code Playgroud)
采用真正的正则表达式(即就BATCH而言未转义)并将其包装成一些sed语法,例如ssed "s@ --- Insert escaped regex here --- @http://psph/\1/\2@g" "%~1"最后将其转义...再次,是否有任何工具可以帮助转义任何字符串以便在BATCH命令行上使用?
ps BATCH的逃避语法有很多例外,我甚至会选择一个好的备忘单.
我需要使用cmd.exe命令行(从gyp构建工具调用cmd.exe)来确定是否定义了环境变量.我怎样才能做到这一点?我可以假设变量值不包含单引号或双引号,但不能假设启用了命令扩展.
我尝试了以下内容,它在.bat文件中运行良好,但在命令行上直接输入时失败:
IF "%UNDEFINED%" == "" (echo yes)
Run Code Online (Sandbox Code Playgroud)
当该确切行在.bat文件中并执行时,我将其yes视为输出.当我在命令行上键入它时,输出为空.我在Windows XP SP3上测试这个,虽然我的同事在Windows 7上看到相同的结果.这是http://support.microsoft.com/kb/121170和http://www.robvanderwoude.com/建议的方法battech_defined.php.我不想使用,IF DEFINED UNDEFINED (echo yes)因为如果禁用了命令扩展,那将无法使用.
以下帖子中的最高投票回答让我相信这个问题与"CmdLineParser"与"BatchLineParser"中百分比扩展的处理方式有关,但仍然没有让我找到解决方案: 如何Windows命令解释器(CMD.EXE)解析脚本吗?
我创建了一个这样的数组:
set sources[0]="\\sources\folder1\"
set sources[1]="\\sources\folder2\"
set sources[2]="\\sources\folder3\"
set sources[3]="\\sources\folder4\"
Run Code Online (Sandbox Code Playgroud)
现在我想迭代这个数组:
for %%s in (%sources%) do echo %%s
Run Code Online (Sandbox Code Playgroud)
它不起作用!似乎脚本不会进入循环.这是为什么?我怎么能迭代呢?
这是一个简单的批处理文件,它演示了如果延迟扩展在正在通过管道传输的块中,它将如何失败.(失败是在脚本的末尾)任何人都可以解释为什么这是?
我有一个解决方法,但它需要创建一个临时文件.我最初在查找文件时遇到了这个问题,并在Windows批处理文件中按大小排序
@echo off
setlocal enableDelayedExpansion
set test1=x
set test2=y
set test3=z
echo(
echo NORMAL EXPANSION TEST
echo Unsorted works
(
echo %test3%
echo %test1%
echo %test2%
)
echo(
echo Sorted works
(
echo %test3%
echo %test1%
echo %test2%
) | sort
echo(
echo ---------
echo(
echo DELAYED EXPANSION TEST
echo Unsorted works
(
echo !test3!
echo !test1!
echo !test2!
)
echo(
echo Sorted fails
(
echo !test3!
echo !test1!
echo !test2!
) | sort
echo(
echo …Run Code Online (Sandbox Code Playgroud) 我有一个批处理文件,将文件从一个文件夹移动到另一个文件夹 批处理文件由另一个进程生成.
我需要移动的一些文件中包含字符串"%20":
move /y "\\myserver\myfolder\file%20name.txt" "\\myserver\otherfolder"
Run Code Online (Sandbox Code Playgroud)
这会失败,因为它试图找到一个名称为的文件:
\\myserver\myfolder\file0name.txt
Run Code Online (Sandbox Code Playgroud)
有什么办法可以忽略%吗?我无法改变生成的文件以逃避这种情况,例如加倍百分号(%%),逃避/或^(插入符号)等.
batch-file ×8
windows ×5
cmd ×2
escaping ×2
scripting ×2
for-loop ×1
if-statement ×1
newline ×1
parameters ×1
pipe ×1
quotes ×1