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

对文件夹中的所有文件执行命令

我想运行一个目录中的所有文件的命令。 对于(c \ conversion * .ajt)%% 1 转换命令 %% 1 %% 2然而,我需要有一个输出文件名与input相同,但具有不同的文件扩展名。 asciitojt.exe filename1.ajt filename1.jt asciitojt.exe filename2.ajt filename2.jt asciitojt.exe filename3.ajt filename3.jt 是我想要离开系统。 我如何replace最后3个字符? 这是运行在一个batch file。

从csv文件读取并根据第一列值提取某些数据列

这是我的第一批程序,我一直在网上search,但仍然在努力写出一个解决scheme。 我有以下的CSV文件: "RH",2013/06/15 02:14:58 -0400,"X","LQ3SUEEWPWKL6",005, "FH",01 "SH",2013/06/14 00:00:00 -0400,2013/06/14 23:59:59 -0400,"LQ3SUEEWPWKL6","" "CH","TransactionID","InvoiceID", …… 我试图写一个简单的程序来执行以下操作: 如果column1 =“RH”,则提取column2的值(2013/06/15 02:14:58 -0400) 如果column1 =“SH”,则提取第4列值(LQ3SUEEWPWKL6) 和pipe道输出到一个文件。 这是我的代码到目前为止,但如果条件不适合我 @echo off :: Set input file in variable ::Set _InputFile=%1 :: Store input line into different variables FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO ( Set _var1=%%A Set _var2=%%B Set _var3=%%C Set […]

如何在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 ) ) […]