rinoatwisted

[Help] Convert batch script to Autoit

5 posts in this topic

#1 ·  Posted

Hello guys,

im just started in programming and all..

and i wanted to learn autoscript to.

Was wondering if any can convert my  one-liner batch script to an autoit script -

FOR /F %%i IN (names.txt) DO @copy system.act %%i.act

 

So what this does is open and read the file "names.txt" incrementally, and copy a certain file named "system.act" and rename it to each name that is listed on "names.txt"

 

So im trying this on autoit but no idea how to start file manipulation and do command -

 

#include <File.au3>

$file = "c:\names.txt"
FileOpen($file, 0)

For $i = 1 to _FileCountLines($file)
    $line = FileReadLine($file, $i)

 

Can anyone help me or guide me on how to continue this to get the result that i want..:)?

Thanks

Share this post


Link to post
Share on other sites



#2 ·  Posted

You can try:

#NoTrayIcon
#include <MsgBoxConstants.au3>

Global Const $sFileListName = @HomeDrive & "\names.txt" ; path of file list name
Global Const $iFile = @HomeDrive & "\system.act" ; Path to file want copy and rename
Global Const $iDirCopyTo = @HomeDrive
Global Const $iExtFile = ".act"
Global Const $sOverWrite = True

If Not FileExists($sFileListName) Then Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "Error 1", "The file doesn't exist: " & @CRLF & $sFileListName)
If Not FileExists($iFile) Then Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "Error 2", "The file doesn't exist: " & @CRLF & $iFile)

Global $iNewPath, $sListName = FileReadToArray($sFileListName) ; Read list name to array by line

For $i = 0 To UBound($sListName) - 1
    $iNewPath = $iDirCopyTo & "\" & $sListName[$i] & $iExtFile
    ConsoleWrite("Copy (" & $i & ") to :> " & $iNewPath & "  :>: " & (FileCopy($iFile, $iNewPath, $sOverWrite) ? "OK" : "Error") & @CRLF)
Next

 

1 person likes this

Regards,
 

Share this post


Link to post
Share on other sites

#3 ·  Posted

Holy ****

Its perfect.

I like to thank you that you make an effort to actually make me a whole script..

and i learned a lot from your script. 

the real reason why i want it on autoit is that, the batch file that i made does not work if there is a  sp. charcter on the file name..

and i just tried this code and WOW.. thank you again from the bottom of my hearts..this will save me a countless hours..

 

thanks

Share this post


Link to post
Share on other sites

#4 ·  Posted

One question though, the file being renamed has a space between the last letter and the .act extension.

for example "nextserver .act" is should be "nextserver.act" only no space..:)

 

can i ask where to edit it? or remove the space?

Share this post


Link to post
Share on other sites

#5 ·  Posted

Try search before ask!
use StringStripWS() or StringReplace()

#NoTrayIcon
#include <MsgBoxConstants.au3>

Global Const $sFileListName = @HomeDrive & "\names.txt" ; path of file list name
Global Const $iFile = @HomeDrive & "\system.act" ; Path to file want copy and rename
Global Const $iDirCopyTo = @HomeDrive
Global Const $iExtFile = ".act"
Global Const $sOverWrite = True

If Not FileExists($sFileListName) Then Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "Error 1", "The file doesn't exist: " & @CRLF & $sFileListName)
If Not FileExists($iFile) Then Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "Error 2", "The file doesn't exist: " & @CRLF & $iFile)

Global $iNewPath, $sListName = FileReadToArray($sFileListName) ; Read list name to array by line

For $i = 0 To UBound($sListName) - 1
;~     $iNewPath = $iDirCopyTo & "\" & $sListName[$i] & $iExtFile
    $iNewPath = $iDirCopyTo & "\" & StringStripWS($sListName[$i] & $iExtFile, 8) ; No space on file name
;~  $iNewPath = $iDirCopyTo & "\" & StringReplace($sListName[$i] & $iExtFile, " .", ".") ; No space on file name
    ConsoleWrite("Copy (" & $i & ") to :> " & $iNewPath & "  :>: " & (FileCopy($iFile, $iNewPath, $sOverWrite) ? "OK" : "Error") & @CRLF)
Next

 


Regards,
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • rootx
      By rootx
      Hi, I need to convert this batch, I follow microsoft specs here https://technet.microsoft.com/en-us/library/bb491005.aspx
      Ex:
      start /b 1.exe "path\2.exe"
      start /b mypgrcommand
      start /b /wait 3.exe "path\4_.exe"
      taskkill /F /IM 5.exe
      Somethings like this...
      RunWait( @COMSPEC & " /c start /b 1.exe 'path\2.exe' start /b mypgrcommand start /b /wait 3.exe 'path\4_.exe' taskkill /F /IM 5.exe", "", @SW_SHOW ) Thx
    • TheSaint
      By TheSaint
      TeraCopy Timer - A program of mine, front end really, that I have been working on (on & off) for some time, but not shared here before, that I recall. Third party program TeraCopy is required.
      Many of you will be familiar with TeraCopy, and it has been discussed here at AF on several occasions, in various sub forums, including Chat.
      BE ADVISED - I still use an older version of TeraCopy (v2.27), a goody but an oldy, so have only tested my program with that. It may work with the newer v3.xx, or may be easily adjusted to do so, but I have not yet gone that route. Likewise, I only use it with Win 7 and Win XP, but I don't imagine there should be any issues with newer Windows. Add to that, my program being devised and created in AutoIt v3.3.0.0.
      So what is TeraCopy Timer and why might you need it?
      I devised my program for two main reasons really, based on giving me greater control, using the Free version of TeraCopy, which has some limitations (perhaps even with the paid full version). My program utilizes the features of the TeraCopy command-line.
      1. I was fed up with Thumbs.db files regularly halting the process in Win XP or preventing a folder being deleted after a move. Only happens with Win XP.
      2. I wanted to automate delays between jobs, allowing all HDD's to rest periodically when doing large and lengthy jobs. Letting HDD's heat up too much, can have tragic results or considerably shorten their lifespan. Prevention is better than cure or just relying on monitoring software etc.
      --------------------------------------------------------------------------------------
      Those familiar with TeraCopy use, know you can run multiple copy or move jobs either simultaneously or concurrently (one immediately after another has finished). With the free version at least, you have no control over precise order or timing, and no way to deal (without manual interaction) with the pesky Thumbs.db files in Win XP. TeraCopy Timer allows you to do all those things, and in a batch fashion.
      --------------------------------------------------------------------------------------
      Some screenshots and brief explanation
      Main Window

      You can browse to set the Source and Destination paths, or like me, just use Drag & Drop to those inputs.
      Once the Destination path has been set, the MIN (minimalist GUI) button becomes available. In Minimal mode, you get a further level of automation, once initial options are set, and thus less prompts ... none in fact, as jobs are created automatically based on either COPY or MOVE.
      Minimalist Window

      In the Minimalist mode, you can only use Drag & Drop to add a source file or folder, and COPY or MOVE is permanently set when the window first opens, via a choice prompt.
      Assigning a WAIT is simple and easy, and is the latest feature added to the program ... I used a much more complex variant before that (see Advanced Delay).

      The program now displays three file size reports.
      Individual Size of the current (last added) job (Blue label).
      Total Size of all jobs combined (Black label).
      Subtotal Size for each grouping of jobs, defined by a WAIT selection (Red label).
      You toggle between Black and Red, by just clicking that label. If no WAIT has been set, then the values will be the same.
      The wait of 5 minutes in the screenshot above is set for the source shown. It means wait 5 minutes before copying (or moving) that source.
      More sources added from that point, add to a new subtotal. To see the previous subtotal, you need to be at the main (MAX) window, and select the prior job.
      So every time a WAIT is clicked for a source a new subtotal count is started.

      In the screenshot above, you can see the Job name, and that it is Job number 5 order wise. MOVE has been set for that job.
      Selecting Job 4, you will see the previous (complete) Subtotal. Selecting job 3 (in this instance), you would see the subtotal up to that job.
      Click the red Total label and it will change to Black, and show you the total size over all, as shown in the second screenshot above.
      This new WAIT feature is the simplest and best way to use the program generally (in my view) ... but check out the following, as it is not always the case.
      Advanced Delay Window

      The Advanced Delay Options, are a further level of automation, added during the early stages of development, before I thought to create the Minimalist window and show Sizes. It was before I decided to put a lot more effort into the program. As with all my programs though, it is continual use that eventually dictates what I ultimately want to happen, to make my life easier ... simpler, better, smarter, quicker.
      The main difference between this older method, and the new WAIT one, where you specify delays precisely, is that the program attempts to determine the best moments to pause, based on various factors, which you setup and can vary between different types of Job sessions.
      The chief purpose for all the advanced options, is an attempt to cater for the difference between moving a small number of big files and a lot of small files. Moving or Copying lots of small files (hundreds or thousands), as many would know, can heat up a HDD far quicker and to a much higher temperature than a small number of (even very) large files. I guess that is primarily due to the sheer number of indexes that need to be created, and with small files are done at a staggering rate.
      Which method you use, is up to you, and should be governed by the type of job. Both methods can be used together, but not advised if you don't want the possibility of unnecessary extra long delays. EDIT - That said, you could use the WAIT option just for a delayed start of the first job ... perhaps your PC is busy doing something else until then, but you want to go and do something else for a bit, and have it all done by the time you return (i.e. watch a movie).
      WARNING - It should go without saying, that you take all the usual precautions. For instance, don't use move with the only copy you have of precious files. BACKUP BACKUP BACKUP! Don't hold me liable for anything, except for being a nice guy who likes to share.
      TeraCopy Timer v2.0.zip
      Enjoy!
      P.S. I am not affiliated in any way with those who created and provide the excellent third party program - TeraCopy.
    • Eggsplorer
      By Eggsplorer
      Hi,
      Ich hab ein Script für Windows Updates, dass nach dem OOBE aufgerufen werden soll. Run/RunOnce ist daher nicht möglich.
      Stattdessen möchte ich das Script in den Autostart schreiben lasse. Wenn die OOBE beendet wird und der Administrator angemeldet wird, soll das Update-Script einmalig aufgerufen werden und sich anschl. selbst löschen.
      Lang rede, kurzer Sinn:
      Wie kann ich folgendes Script in den Autostart schreiben?
      RunWait(@ComSpec & " /c " & "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File C:\UA\Scripts\win-updates.ps1 -MaxUpdatesPerCycle 100 -RestartRequired 1", "") Ich würde ungern eine BAT oder EXE reinkopieren, da ich es unsauber finde. Die müsste ja auch zusätzlich irgendwo liegen.
      Danke
      Eggsplorer
    • ur
      By ur
      I am running the tomcat batch file through autoit   and need to wait until the below line I get in console output.

      But when I am trying to read the console output using the ProcessEx UDF, I am getting only the partial output.
      So, can you please suggest how to handle this.
    • fosil
      By fosil
      Hi everyone.

      I'm currently working a program that constantly prints out log files through "consolewrite" and the "#AutoIt3Wrapper_Change2CUI=y" wrapper.

      Part of this program requires me to run a batch script.

      My issue is the batch script launches from the same window as consolewrite. I need the batch file to be launched through a different window as currently this causes an issue with the logs (which need to be very precise) but also causes the batch file to produce some funny behavior...

      Does anyone know how I can force the file to run on a second DOS window?

      Thanks in advance!!!
       
      Edit: Im using the "run" command if that helps. I tried "shellexecute" but that seemed to not launch the batch scripts at all.