2014-05-12 187 views
0

所有, 我想一個文件重命名帶有時間戳,並將其移動到另一個文件夾中的批處理腳本,這需要每一秒都在持續的基礎上完成的,因爲過程與創建文件相同的名稱,但它不會覆蓋,直到前一個文件已被移動。在後臺運行

:top 
    @ECHO OFF 
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
    set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" 

    set "fullstamp=%YYYY%%MM%%DD%.%HH%%Min%%Sec%" 

    MOVE /Y C:\MyPath\Scripts\origfile.txt C:\MyPath\Scripts\997\newfile_%fullstamp%.txt 

    sleep 1 
    goto top 

批處理文件執行其作業並重命名並將文件移動到新的目標。但是,我能夠做到這一點的唯一方法是如果我運行批處理文件並打開命令窗口。 我已經嘗試了很多建議,先從/ B開關的命令,從insde一個Java類啓動它,加入退出0到批處理腳本的末尾,使用NSSM創建服務,並從那裏運行它。 我在精神障礙。我需要做的就是能夠在後臺啓動這個批處理腳本文件,一旦我完成啓動腳本,關閉窗口,並沒有任何可見的窗口打開。

謝謝任何​​幫助!

+0

[在Windows中運行一個bat文件在背景中]可能的副本(http://stackoverflow.com/questions/20902282/running-a-bat-file-in-background-in-windows) –

+0

http:// superuser.com/questions/62525/run-a-completly-hidden-batch-file – SachaDee

回答

1

這是從previous answer

@if (@[email protected]) @then 
@echo off 
rem **** batch zone ********************************************************* 

    rem Check if started from javascript part of script. 
    rem We are checking an environment variable set from javascript part. 
    if "%_run_hidden_%"=="true" (
     goto startBatchWork 
    ) 

    rem if not started from javascript, call javascript part to restart batch. 
    wscript //E:JScript "%~dpnx0" 
    exit /b 

:startBatchWork 

    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
    set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" 
    set "fullstamp=%YYYY%%MM%%DD%.%HH%%Min%%Sec%" 

    MOVE /Y C:\MyPath\Scripts\origfile.txt C:\MyPath\Scripts\997\newfile_%fullstamp%.txt 
    sleep 1 
    goto startBatchWork 

    rem End of batch area. Ensure batch ends execution before reaching javascript zone 
    exit /b 

@end 
// **** Javascript zone ***************************************************** 
// Instantiate the needed component to interact with Shell 
var shell = WScript.CreateObject('WScript.Shell'); 

    // Set the environment variable that the batch part will check to know 
    // it's running hidden 
    shell.Environment('Process').Item('_run_hidden_')='true'; 

    // start the batch part of the script calling %comspec% with the current 
    // script as parameter, hidden (0) and not waiting for it to end (false) 
    shell.Run('"' + shell.ExpandEnvironmentStrings('%comspec%') + '" /c "' + WScript.ScriptFullName + '"', 0, false); 

    // All done. Exit 
    WScript.Quit(0); 

它是一種混合CMD/JavaScript和你的代碼文件包括:startBatchWork後。將其另存爲.cmd文件。

你可以把它作爲一個cmd文件。它將啓動一個控制檯(如果不在控制檯中)來運行初始批處理部分。它將檢查是否存在標誌變量,以確定文件是否正在隱藏(從js部分開始)。如果沒有隱藏,則調用代碼的JavaScript部分,並設置標誌變量並啓動隱藏的批處理文件。

或者,你可以直接與wscript //e:JScript batchfile.cmd調用JavaScript部分和沒有初始的可見控制檯啓動的所有進程。

在任何情況下,該進程將繼續無可見控制檯運行隱患。

+0

謝謝MC ND,該訣竅,我很感激。 – user2797021