Parsing contents of file in CMD/Batch not working? - parsing

I have a simple text file with some numbers in it:
1122
2244
But when I run the CMD
FOR /F %i IN (CIFLIST.TXT) DO ECHO %i
Nothing is output to the screen?
I've also tried from a batch file as
FOR /F %%i IN (CIFLIST.TXT) DO ECHO %%i
But again, no output? Any ideas?
[I've been through How do you loop through each line in a text file using a windows batch file? but can't find anything obvious)

try this:
FOR /F "delims=" %%i IN ('type CIFLIST.TXT') DO ECHO %%i

FOR /F "delims=" %%i IN ('cmd /A /C type CIFLIST.TXT') DO ECHO %%i

Related

Find a string and only print the required keyword

05-08 23:38:08.484 11404 11764 I Ads : GMA Debug CONTENT {"timestamp":1588961288491,"event":"onNetworkRequest","components":["network_request_36385a69-b99e-4da6-b6a0-7bf2a106a285"],"params":{"firstline":{"uri":"https://pubads.g.doubleclick.net/gampad/ads?submodel=SM-N915G&android_app_volume=1&disable_ml=false&format=interstitial_mb&omid_v=a.1.3.1-google_20200121&is_nonagon=true&android_app_muted=false&am=0&dv=21400&gl=GB&hl=en&js=afma-sdk-a-v201004999.14300000.1&lv=0&ms=CoACClZSVfMXCRQ-WNImS5Q9B8Kr7uHr8m5cVL4sU3c951ZafOWUx64ymtfyXUpdXg0A95gRozZwS4W6-w_RmoEeWxq56UkgzPcVmiNEL1Aa8-v6Cik5s15gGkF5AHJpfjwSOynwJ7ZEgj78CEI_AvDrK8pfF4OhctAnxYwxMmeZDX4zqP8dLptQ8EIZtjfmEtXjFS3lzvdrHUpgsG8E_EscYo0xlLZu7zzQe8GpDRUhnkQr4xGv4ou4ZqbLmstqeZdPLcZX1xROBq_rLfY_3cY7z8Tf8seqVNsTI49EG2HZuMjCLRFOmtinp3mFO8du9pxSg4cNV2JxjxFox1TGQ2QLqQqAAjorBHB9GJsXM85JwwKB2h9tQAvgPoaJZRwBhJQHB_qs2iswjcSsJldAYHKe105wq7VihcvZVM7oLDfQhQqWuQFYb27LCf9UH43etMBZvMq7aAOpKj5ilbFHdg13wiFIdsNlQ1Kv6saMKKSi4WPoScw1bW9WEqPrSuLZDwo6NN4iFo1cJ_2dD5Xu4R52ytmY70NkOeTVa07KGAVwR0GARwuRX6VTKtDAsWap6OybQAF9ZtCwbs5h8Man9xrlaxJRuuzzhH1KEnp3Nld-8JfXglPI4-8yOXRWjnB3fQadPz2BLEKiq-pUtZVrrRqIeQu5jDMjX69Oks3XSHwECN6D32ASENSnE_R_crSMn7XDhwnuK-4&mv=81983300.com.android.vending&rm=2&sp=false&coh=true&riv=11&u_sd=2.4&request_id=4145396e-4ada-4bd7-854a-11556ade0f70&render_in_browser=false&target_api=29&carrier=40407&is_sidewinder=false&seq_num=1&eid=318482080%2C318490406%2C318484496%2C318486317%2C318484676%2C318482960%2C318482459%2C318483611%2C318486978%2C318487060%2C318489974%2C318475417%2C318483742&tag_for_child_directed_treatment=0&_c_csdk_npa_o=false&_c_req_npa=false&npa=0&guci=0.0.0.0.0.0.0.0&rbv=1&u_w=640&u_h=383&msid=com.ea.gp.nbamobile&_package_name=com.ea.gp.nbamobile&an=44310.android.com.ea.gp.nbamobile&net=wi&u_audio=3&u_so=l&preqs_in_session=2&support_transparent_background=true&preqs=0&time_in_session=310380&output=html&region=mobile_app&u_tz=330&url=44310.android.com.ea.gp.nbamobile.adsenseformobileapps.com&gdfp_req=1&markup=html&m_ast=afmajs&impl=ifr&iu=%2F220%2FNBALive%2FAndroid%2FRewarded_Video%2FDashboard&sz=480x320&oct_ist=1&correlator=1486806085148500&gsb=wi&lite=true&vfmt=18&vst=0&sdkv=o.201004999.14300000.1&sdki=3c4d&caps=inlineVideo_interactiveVideo_mraid1_mraid2_mraid3_sdkVideo_exo3_th_autoplay_mediation_scroll_av_transparentBackground_sdkAdmobApiForAds_di_sfv_dinm_dim_nav_navc_dinmo_ipdof_gls_gcache_xSeconds&bisch=true&blev=0.86&swdr=false&cans=5&canm=false&_mv=23.android&heap_free=9792968&heap_max=268435456&heap_total=38043632&wv_count=0&rdps=15650&blockAutoClicks=true&cust_params=excl_cat%26optout%3Dno%26coppa%3Dno&rewarded_version=1&includeDoritos=true&rdidl=36&idtypel=4&is_latl=-1&blob=ABPQqLGrcFoEjqzU1D-terFskdukGTLEuTUawcm0pBN0aB1d8YNSg6mLc5H5hWfITabn9X_sTUR-xainyvLxhx-QMpVlfZXee0FH8Z8Fjs6uM7kH5i5_Ej4OWZHYmzzc27g9uusoPfNAP_WRsabkoO4MOzGcL_wF_NLF8S72uFyd1TxihwAptei3UGc8midRCER_2m49ZCG92iIMZnSTLY3GHkm3yeGBDjP16FauKMJMYYX2n1MfK52OyblTrPquFX6adhiTApYLs-oIRLLuzbInS3P5cscrCxfBIHIkxOrqtg_fXXJTkgjUzk8Nhp3Tnm-4lN0lNRyzNnic-TU&et=125&tcar=194&jsv=sdk_20190107_RC02-canary-production-sdk_20200428_RC00&urll=2888#caps=inlineVideo_interactiveVideo_mraid1_mraid2_mraid3_sdkVideo_exo3_th_autoplay_mediation_scroll_av_transparentBackground_sdkAdmobApiForAds_di_sfv_dinm_dim_nav_navc_dinmo_ipdof_gls_gcache_xSeconds&eid=318482080%252C318490406%252C318484496%252C318486317%252C318484676%252C318482960%252C318482459%252C318483611%252C318486978%252C318487060%252C318489974%252C318475417%252C318483742&format=interstitial_mb&heap_free=9792968&heap_max=268435456&heap_total=38043632&js=afma-sdk-a-v201004999.14300000.1&msid=com.ea.gp.nbamobile&preqs=0&seq_num=1&target_api=29","verb":"GET"},"headers":[{"name":"User-Agent","value":"Mozilla/5.0 (Linux; Android 6.0.1; SM-N915G Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36 (Mobile; afma-sdk-a-v201004999.14300000.1)"},{"name":"Cookie","value":"IDE=AHWqTUlALo2Mq3Qp52ZNNvAhzeqdzEJ0K5nNOV3OKMFW3vapCmqRNqnN6tIrx26A"}]}}
From this I want the output to be printed as:
tag_for_child_directed_treatment=0, if I enter tag_for_child_directed_treatment in the input or else its fine if it prints complete string tag_for_child_directed_treatment=0
I have tried with the code:
#echo off
set /P search_string= Enter the string you would like to search for:
find "%search_string%" C:\Users\Bhargav\logcat1.txt
pause
It gives the output as a complete line, can anyone help me?
Get the string.
Cut it from the beginning to (including) the search-string.
extract the number.
#echo off
setlocal enabledelayedexpansion
set "search_string=tag_for_child_directed_treatment"
for /f "delims=" %%a in (test.txt) do set "string=%%a"
set "string=!string:*%search_string%=!"
for /f "delims==&" %%a in ("!string!") do set "result=%%a"
echo %search_string%=%result%
EDIT (slightly adapted to take care of multiple entries in the text file):
#echo off
setlocal enabledelayedexpansion
set "search_string=tag_for_child_directed_treatment"
for /f "delims=" %%t in (test.txt) do (
set "string=%%t"
set "string=!string:*%search_string%=!"
for /f "delims==&" %%a in ("!string!") do echo result=%%a
)
Batch is horrible to process such a string. A more reliable solution is possible with dbenham's utility jrepl.bat, a hybrid JScript/batch script with full REGEX support, which makes this task quite easy:
#echo off
set "search_string=tag_for_child_directed_treatment"
for /f "delims=" %%a in ('type test.txt ^| jrepl ".*tag_for_child_directed_treatment=([0-9]*).*" "$1" /XSEQ') do set "result=%%a"
echo %search_string%=%result%
EDIT (slightly adapted to take care of multiple entries in the text file):
#echo off
set "search_string=tag_for_child_directed_treatment"
for /f "delims=" %%a in ('type test.txt ^| jrepl ".*tag_for_child_directed_treatment=([0-9]*).*" "$1" /XSEQ') do echo result=%%a

Youtube-dl OUTPUT TEMPLATE %(title)s.%(ext)s is not working with set /p in windows

I used the batch file with commands :-
set /p ytlink="Enter the link of Youtube Video:- "
youtube-dl -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" -o "D:\Videos\%(title)s.%(ext)s" %ytlink%
pause
but the output file name is (ext)s.webm ,it seems cmd is treating %(title)s.% in -o "D:\Videos\%(title)s.%(ext)s" as variable.So how to get video title?
OS=Windows 10 64bit 1909
youtube-dl=2020.01.24
You have to use double % in a batch file.
set /p ytlink="Enter the link of Youtube Video:- "
youtube-dl -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" -o "D:\Videos\%%(title)s.%%(ext)s" %ytlink%
pause
Maybe someone will need it. Based on 1957classic answer. Download video and audio in the best quality to your desktop with the original name with the url taken from the clipboard.
setlocal enabledelayedexpansion
for %%I in (powershell.exe) do if "%%~$PATH:I" neq "" (
set getclip=powershell "Add-Type -AssemblyName System.Windows.Forms;$tb=New-Object System.Windows.Forms.TextBox;$tb.Multiline=$true;$tb.Paste();$tb.Text"
)
for /f "delims=" %%I in ('%getclip% ^| findstr /n "^"') do (
set "line=%%I" & set "line=!line:*:=!"
)
set "psCommand="[Environment]::GetFolderPath('DesktopDirectory')""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "Desktop=%%I"
%~d0"%~p0"youtube-dl.exe -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" -o "!Desktop!\%%(title)s.%%(ext)s" !line!

How to print multiple PDF files in different folders?

An example would be:
 Folder 1:
  a.pdf
  b.pdf
   Folder11
   c.pdf
  Folder 2:
  a.pdf
  b.pdf
   Folder21:
   c.pdf
printing all files between folders
And the cmd would have a way to find the file only putting part of the words?
Example
TEXT : ABC*.PDF
PRINT ABCDF.PDF
1. To loop over multiple files recursively:
FOR /f "tokens=*" %%F in ('dir /s /b *.pdf') DO echo "%%F"
dir /s /b *.pfd finds all pdfs (*.pdf), in all subdirectories (/s), in bare format - ie just the path name (/b)
DO echo "%%F" just echo's the result to the console.
"tokens=*" adds the whole line into %%F regardless of white spaces / other tokens
/F makes it run the ('dir ...') command
2. To print from command line use: From this question
AcroRd32.exe /t "C:\Folder\File.pdf" "Brother MFC-7820N USB Printer" "Brother MFC-7820N USB Printer" "IP_192.168.10.110"
Note: Path to AcroRd32.exe must be in your path environment variable
3. Putting it all together -- edit -- 'I've added taskkill to close acrord32 after printing
FOR /f "tokens=*" %%F in ('dir /s /b *.pdf') DO AcroRd32.exe /t "%%~F" "Brother MFC-7820N USB Printer" "Brother MFC-7820N USB Printer" "IP_192.168.10.110" & taskkill /IM AcroRd32.exe

Issue while reading text file from batch script

While reading text file from batch script am not able to get the values which are already present.
doxygen.txt
Version
8.0.56336(There is no space between version and value)
test.bat
#echo off
setlocal EnableDelayedExpansion
set num=0
if %errorlevel%==0 (
FOR /F "tokens=* delims=" %%a IN ('"wmic product where "Name like 'Microsoft Visual C++ 2005 Redistributable'" get version"') do (
echo %%%a >> doxygen.txt
)
rem FOR /F "tokens=* delims=" %%x in (doxygen.txt) DO echo %%x
for /f "tokens=* delims=" %%i in (doxygen.txt) do (
set /a num+=1
set v[!num!]=%%i
)
del doxygen.txt
set line1=%v[1]%
set line2=%v[2]%
set line3=%v[3]%
set line4=%v[4]%
echo line1: %line1%
echo line2: %line2%
echo line3: %line3%
echo line4: %line4%
endlocal
)
)
Here am not able to get the values to line1,line2 etc.
Can anyone please suggest me where I have done the mistake.
Thanks In Advance.
Batch expands percent expression when a line or parenthesis block is parsed before it is executed.
So set line1=%v[1]% will simply expand to nothing, as it expands before the FOR loop even starts.
But you can use the delayed expansion syntax, as these are expanded at runtime.
#echo off
setlocal EnableDelayedExpansion
set num=0
if %errorlevel%==0 (
FOR /F "tokens=* delims=" %%a IN ('"wmic product where "Name like 'Microsoft Visual C++ 2005 Redistributable'" get version"') do (
echo %%a>> doxygen.txt
)
rem FOR /F "tokens=* delims=" %%x in (doxygen.txt) DO echo %%x
for /f "tokens=* delims=" %%i in (doxygen.txt) do (
set /a num+=1
set "v[!num!]=%%i"
)
del doxygen.txt
set "line1=!v[1]!"
set "line2=!v[2]!"
set "line3=!v[3]!"
set "line4=!v[4]!"
echo line1: !line1!
echo line2: !line2!
echo line3: !line3!
echo line4: !line4!
)
endlocal
if you're just trying to get the version from the output, here's an easier way to do it:
1:
#echo off
setlocal EnableDelayedExpansion
set num=0
if %errorlevel%==0 (
FOR /F "skip=1 tokens=* delims=" %%v IN ('wmic product where "Name like 'Microsoft Visual C++ 2005 Redistributable'" get version ^| findstr "."') do (
echo Version: %%v
set mc_vcpp_05=%%v
)
)
endlocal
2:
Here's if you need to read that file for some reason:
#echo off
if %errorlevel%==0 (
FOR /F "skip=1 tokens=1 delims= " %%a IN ('wmic product where "Name like 'Microsoft Visual C++ 2005 Redistributable'" get version ^| findstr "."') do (
echo %%a >> doxygen.txt
)
for /f "tokens=1* delims=" %%I in ('type doxygen.txt') do (
echo Version: %%I
)
del doxygen.txt
)
Why it's behaving for you in your original script, I don't know yet. Ill edit or comment my answer when I find out

parse batch line by line

i am trying to parse the output of another function which is output line by line. to understand the function, it returns several lines of parameter and numbers like "top=123456789" or "low=123456789" (without the quotations) -
i try to parse the lines now with
for /F "delims=" %%a in ('%%I ^| findstr top') do set updir=%%1
set "updir=%1:~4%"
echo. %updir%
i am trying to get the pure numbers by trimming the known keywords like top, which would need then to be set to a var to return (%~1% ???) to a calling function back (other batch file).
could anyone help me with this please? shure it would be better to trim right from "=".
UPDATE:
this is the code returning the lines from the script i linked. i tried several ways to parse the return but i seem to be blind or too stupid to see, all is going weird.
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do (
rem process the HTML line-by-line
org echo(%%I
try1 (echo %%I|findstr top
try2 for /F "delims=" %%a in ('%%I ^| findstr top') do set updir=%%a
try2 echo. %updir%
try3 for /F "delims=" %%a in ('%%I') do findstr top
try3 echo. %2%
)
didn't work either
for /F "tokens=1,2delims==" %%a in ('%%I') do if %1 == top set updir=%%b
echo %updir%
i tried both delim version beneath (too the tokens/delims version) but i don't get it right.
UPDATE SOLUTION:
for the ones reading the question here some additional comment:
rem trim whitespace from beginning and end of line
for /f "tokens=*" %%x in ("%%~I") do set "line=%%x"
rem test that trimmed line matches "variable=number"
to find a single item like e.g. "top" you have to add "to" or adjust whole first token
echo !line! | findstr /i "^to[a-z]=[0-9]" >NUL && (
rem test was successful. Scrape number.
for /f "tokens=2 delims==" %%x in ("%%I") do set "value=%%x"
echo !value!
)
If all you wish to do is to is to skip all lines until you find one that matches "text=numerals", then scrape the numeric portion of that line, all you need to do is this:
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do (
rem trim whitespace from beginning and end of line
for /f "tokens=*" %%x in ("%%~I") do set "line=%%x"
rem test that trimmed line matches "variable=number"
echo !line! | findstr /i "^[a-z]*=[0-9]*$" >NUL && (
rem test was successful. Scrape number.
for /f "tokens=2 delims==" %%x in ("%%I") do set "value=%%x"
)
)
I think that's right, anyway. I didn't test it.
But I suspect that this is not going to work as you intend, since what you are scraping will probably include HTML tags. We will probably not be able to help you scrape the HTML unless you pastebin the HTML source of an example page, and explain what you wish to scrape from that source example.
does this fit your needs?
for /F "delims=" %%a in ('type file.txt ^| findstr "top low"') do set /a %%a
set top
set low
echo %top%, %low%
Try this:
for /F "tokens=2delims==" %%a in ('findstr top file.txt') do set "updir=%%a"
echo.%updir%
According to your comment my new code:
#echo off &setlocal enabledelayedexpansion
set "string=%%I"
set "string=!string:*top=!"
for /f "delims== " %%z in ("!string!") do set "string=%%z"
echo !string!
.. output:
123456789
Edit2: "added.

Resources