Articles of for loop

用可变的顶端编写一个bash for-loop

我经常使用众所周知的语法在bash中编写for循环: for i in {1..10} […] 现在,我正试图写一个顶部由variables定义的地方: TOP=10 for i in {1..$TOP} […] 我已经尝试了各种各样的parens,花括号,评估等,并且通常会返回一个错误的“错误替代”。 我怎么能写我的for循环,以便极限取决于一个variables,而不是一个硬编码值?

用空格循环数组string

我试图通过包含其他数组的数组循环,这些数组由包含空格的string组成。 问题是,我似乎无法保留string中的间距。 如果我将IFS更改为\ n,或者将数组的所有元素都视为1项,如果我将IFS保持不变,则这些包含空格的string将被分成多个项目: #!/bin/sh low1=("AA QQ" "BB LL") low2=("CC" "DD") low3=("EE" "FF") high=(low1 low2 low3) for high_item in ${high[@]} do eval arrayz=\${$high_item[@]} #IFS=$'\n' for item in $arrayz do echo $item done done 输出: AA QQ BB 二 CC DD EE FF 正如你所看到的,“AA QQ”和“BB LL”的元素已经被拆分了。 如果我取消注释将IFS设置为\n的行,我会得到以下结果: AA QQ BB LL CC DD EE FF 现在“AA […]

为什么不能用cat来逐行读取文件,每行都有分隔符

我有一个文本文件,包含这样的东西: abc 123, comma the quick brown fox jumped over the lazy dog comma, comma 我写了一个脚本 for i in `cat file` do echo $i done 出于某种原因,脚本的输出不会逐行输出文件,而是在逗号处以及换行符处将其分开。 为什么是猫或“在cat xyz ”这样做,如何使它不这样做? 我知道我可以使用一个 while read line do blah balh blah done < file 但是我想知道为什么cat或者“for blah in”这样做是为了进一步理解unix命令。 猫的手册页没有帮助我,并在bash手册中查找或循环没有得到任何答案( http://www.gnu.org/software/bash/manual/bashref.html )。 在此先感谢您的帮助。

我怎样才能做一个bash脚本recursionforeach * .mp3文件?

以下在当前文件夹中正常工作,但我希望它也扫描子文件夹。 for file in *.mp3 do echo $file done

如何在batch file中使用嵌套的FOR循环

我有一些代码,我想用FOR循环来处理一组文件。 作为处理文件的一部分,有一个FOR /F循环来读取它,并根据文件名将数据追加到另一个文件中。 为了能够设置输出文件名我有延迟variables扩展设置。 这是代码应该看起来像我原本打算的那样: setlocal enabledelayedexpansion for %%f in (DataFolder\*.Ext) do ( set POI=%%~f set POI=!JbPOI:DataFolder\=! set POI=!JbPOI:.Ext=! for /f "tokens=1,2,3 delims=," %%a in ("%%~f") do ( set CX=%%a set CY=%%b set FN=%%c echo !FN!,9,!CX!,!CY! >> "DataFolder\!POI!.tmp" ) ) endlocal 此代码不起作用,因为variables%%a , %%b和%%c永远不会收到一个值, %%a始终与%%f具有相同的值。 我已经阅读了一些有关这个问题的文章,但不能从他们的工作中提取解决scheme。 我已经尝试了几件事,迄今为止没有工作… 添加一个虚拟的外部循环来显式地创buildvariables%%a到%%j 内部FOR循环取出,并使其成为一个子程序 内部FOR循环取出,并使其成为一个单独的batch file 任何人都可以告诉我,这可以 – 或必须 – […]

批处理脚本调用可执行文件,如果挂起则退出

因此,我需要编写一个批处理脚本来启动一个可执行文件,并在可执行文件完成后立即退出脚本(所以不需要ip ping等待脚本),但是如果可执行文件仍在运行,会在30分钟后自动终止该脚本并退出脚本挂起,没有回应等) 这是我迄今为止。 find语句正确地输出匹配的进程数,但是我的问题是ERRORLEVEL总是返回0,无论是否有正在运行的匹配的可执行文件。 我对批处理脚本相当陌生,所以很可能我忽略了一些非常简单的事情。 @echo off start calc.exe REM loop 600 times, each loop being 3 seconds (30 minutes total) FOR /L %%A IN (1,1,600) DO ( REM find the running executable tasklist | find /I /C "calc.exe" > nul echo %ERRORLEVEL% Rem exit the script if no executable is found (ie it has […]

在FOR循环中用复杂的调用检索%ERRORLEVEL%

在Windowsbatch file中,我需要将程序执行的结果检索到一个variables,当程序调用复杂的空间和几个选项。 经过多次讨论,通过使用CALLfind了一个解决方法: FOR /F "delims=" %%G IN ('CALL "C:\path with spaces\foo.bat" "blah blah='foobar' blah"') do set foo=%%G 请参阅以下问题了解更多细节并了解上下文: 当命令有空格时,将命令输出检索到variables 实际上batch file调用PostgreSQL 9.3,就像这样: SET PSQL_EXE=C:\Program Files\Foo\Bar\PostgreSQL\9.3\bin\psql.exe SET FOO=1 REM psql query should result in a 0 or 1 based on the mydbproperty table value FOR /F %%G IN ('call "%PSQL_EXE%" -U pguser -d MyDB -p […]

批处理:如何在parsing输出时纠正variables覆盖不当行为

在batch file中,我正在检查Baseboard信息,其中包含以下内容: BaseboardCheck.cmd @echo off setlocal enabledelayedexpansion for /f "tokens=1,2* delims==" %%a in ('wmic baseboard get /format:list') DO ( if ["%%a"] EQU ["Product"] ( set PlatformInfo=%%b if defined PlatformInfo ( echo.!PlatformInfo! echo.!PlatformInfo!This overwrites the variable ) ) if ["%%a"] EQU ["Version"] ( set BaseboardVersion=%%b if defined BaseboardVersion ( echo.!BaseboardVersion! echo.!BaseboardVersion!This overwrites the variable ) ) […]

loop&nslookup的批处理脚本

我之前看过这个问题,但没有解决我的问题。 我只是试图遍历包含主机名的文本文件。 当我从命令行尝试相同的命令(省略额外的百分号)时,它将工作一两次然后给出下面指出的错误。 将其作为batch file运行,batch file将不做任何事情而退出。 这一个真的难倒我。 以下是我的batch file中的代码: @echo off set OUTPUTFILE=Results/Results.txt set lookup=HostNames.txt FOR /F %%i in (%lookup%) do FOR /F "usebackq skip=3 delims=: tokens=2" %j in (`nslookup %i`) do @echo %%i %%j >> %OUTPUTFILE% 在一个命令行我得到: 我)在这个时候是意外的。 当我在命令行中运行它时,我将在batch file中运行时取出其他百分号。 我也在命令行中使用绝对path,以确保这不是我设置的环境variables的问题。

拆分path并在批处理脚本中取最后的文件夹名称

我想用\分割string(有一个path),并把最后一个文件夹名称放在一个variables中。 请帮忙。 例如 mypath中= d:\ FOLDER1 \ FOLDER2 \ FOLDER3 \ 我想在一个variables的FOLDER3。 我试着用下面的命令工作,如果最后一个字符不是\ : for %f in (C:\FOLDER1\FOLDER2\FOLDER3) do set myfolder=%~nxf 如果最后一个字符是\ 另外它不工作,如果使用variables如: for%f(%mypath%)do set myfolder =%〜nxf