Por que os scripts .bat são bloqueados após a execução no Windows 7?

3

Desde que me mudei para o Windows 7, sempre que estou desenvolvendo um script .bat, tenho exatamente uma chance de acertar. Assim que executo o script, ele fica bloqueado por um processo desconhecido, mesmo que a execução pareça ter sido concluída, e eu preciso forçar a saída do explorador ou a reinicialização para poder editar o arquivo .bat novamente.

Por exemplo, se eu criar um arquivo .bat,

@echo off
@start prog\ConsolePortable\ConsolePortable.exe

em seguida, percebo depois de executá-lo que precisei alterar algum aspecto do script,

@echo off
@cd prog\ConsolePortable
@start ConsolePortable.exe

Então não poderei salvar minhas alterações. Por exemplo, em gvim eu recebo a mensagem, "'console.bat' é somente leitura (adicione! Para substituir)," e quando tento substituir, recebo a mensagem "E212: Não consigo abrir o arquivo para escrita."

Certamente deve haver alguma maneira de criar scripts sem exigir ProcessExplorer em todos os computadores que eu uso. Como alguém acha o processo de um arquivo .bat para pará-lo, afinal? Eu tentei ProcessExplorer e BSOD'd o compy tentando pará-lo. Eu também tentei usar o cmd / c no lugar do início.

EDITAR: O ConsolePortable inicia bem aqui e parece sair bem, no entanto, a seguinte configuração de teste não congela o editor:

// Program.java
class Program {public static void main(String[] args) {System.exit(0);}}

// startProgram.bat 
echo Starting Program in Java ...
start java Program
echo exiting bat file ...

EDIT 2: Talvez eu deva mencionar que criei o arquivo usando o comando touch no cygwin. Depois de reiniciar o computador, não posso duplicar esse problema, embora já tenha encontrado em outros computadores.

    
por Peter Nore 13.06.2011 / 12:21

2 respostas

2

Eu diria que isso é possivelmente um erro com o seu editor, ou você tem permissões estranhas configuradas.

Frequentemente, eu edito arquivos em lote com o bloco de notas (enquanto estou em execução) e não tive nenhum problema.

No entanto, não tenho certeza se você pode apenas injetar comandos - ele lembra o número da linha (eu acho) em que estava.

por exemplo. no seu arquivo bat, depois de iniciar, ele terá terminado o processamento.

Coloque uma pausa na terceira linha e, em seguida, execute, mas não pressione uma tecla após a pausa. Edite o arquivo bat original, coloque um comando na quarta linha - e você verá que a quarta linha será processada.

    
por 13.06.2011 / 13:48
2

Eu tentaria mudar a linha

@start ConsolePortable.exe

Para

@start "myProgram" ConsolePortable.exe

A partir do link :

START "title" [/Dpath] [options] "command" [parameters]

Notes:

Always include a TITLE this can be a simple string like "My Script" or just a pair of empty quotes "" According to the Microsoft documentation, the title is optional, but you may have problems if it is omitted.

Document files may be invoked through their file association just by typing the name of the file as a command. e.g. START "" WORD.DOC would launch the application associated with the .DOC file extension

Esse aqui me pegou de surpresa quando tentei programar o VLC há algum tempo e colocar um título lá resolveu um problema aparentemente relacionado para mim.

    
por 13.06.2011 / 14:29