批处理文件打开程序,移动文件,然后在手动程序关闭时替换文件

时间:2017-03-03 07:09:26

标签: windows batch-file

更具体地说,我想使用批处理文件加载"程序X"。然后,一旦程序完全加载并在屏幕上打开,从"文件夹A"移动一些文件。到"文件夹B"。然后,当手动退出程序X时,将先前移动的文件移回文件夹B.这是我尝试过的,但没有用。我没想到会这样。

start "" "C:\ProgramX.exe"
move /-y "C:\FolderA\File1.txt" "C:\FolderB\"
move /-y "C:\FolderA\File2.txt" "C:\FolderB\"

/wait "C:\ProgramX.exe"

move /-y "C:\FolderB\File1.txt" "C:\FolderA\"
move /-y "C:\FolderB\File2.txt" "C:\FolderA\"

最初我制作了两个单独的批处理文件,只是来回移动文件(我手动打开和关闭程序)并且它可以工作,但我想只有一个批处理文件加载程序,然后移动文件退出程序后再移回它们。

3 个答案:

答案 0 :(得分:0)

您可以构建一个循环(goto),查看程序是否仍在运行(如果..then),并在循环后放回文件。

查看此代码段:

tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end

start notepad.exe

:end

del search.log

检查notepad.exe是否正在运行。如果它没有运行,它将启动notepad.exe。

答案 1 :(得分:0)

我认为这是最有效的方式:

Dim examinee As Variant
Dim cell As Range
Dim word As String
Dim myCell As String

examinee = InputBox("How many sheets?")
word = InputBox("Looking for?")

For A = 1 To examinee

Sheets("sheet" & A).Select
On Error Resume Next
Range("A3", Range("A3").End(xlToRight)).Select
    For Each Cell In Selection.Cells
        myCell = Right(Cell, Len(Cell) - (InStrRev(Cell, " ") - 1))
        MsgBox myCell ' just to be sure the word is found
        If myCell Like word Then
        Selection.Cells.Bold = False
        Else
        Delete.Column
        End If
    Next Cell
Next

在此方法中,等待状态为事件驱动(由OS控制),因此不会浪费CPU时间!更多详情here

答案 2 :(得分:-1)

简单的方法是

move /-y "C:\FolderA\File1.txt" "C:\FolderB\"
move /-y "C:\FolderA\File2.txt" "C:\FolderB\"
"C:\ProgramX.exe"

move /-y "C:\FolderB\File1.txt" "C:\FolderA\"
move /-y "C:\FolderB\File2.txt" "C:\FolderA\"

move /-y "C:\FolderA\File1.txt" "C:\FolderB\"
move /-y "C:\FolderA\File2.txt" "C:\FolderB\"
start /wait "" "C:\ProgramX.exe"

move /-y "C:\FolderB\File1.txt" "C:\FolderA\"
move /-y "C:\FolderB\File2.txt" "C:\FolderA\"

但如果您坚持在move之后执行start

@ECHO OFF
SETLOCAL
start /b "process running" "arj.exe"
move /-y "C:\FolderA\File1.txt" "C:\FolderB\"
move /-y "C:\FolderA\File2.txt" "C:\FolderB\"

ECHO waiting
:wait
tasklist /FI "IMAGENAME eq arj.exe"|FINDSTR /i "arj.exe">nul&IF NOT errorlevel 1 timeout /t 1 >nul&goto wait

move /-y "C:\FolderB\File1.txt" "C:\FolderA\"
move /-y "C:\FolderB\File2.txt" "C:\FolderA\"
ECHO finished

pause

GOTO :EOF

我在这里使用arj.exe来测试方法。当然,它可以是在用户控制下退出的任何可执行文件,而不像notepad立即退出实例化的交互式实例。

我假设任何时候系统中只有一个programx活动的实例。

echopause仅用于演示批处理程序状态。