como obter o caminho completo de um arquivo aberto

3

Eu tenho um script que é executado em um servidor Windows para executar operações em determinados arquivos. Muitas vezes, o script falha porque vários usuários (até eu) têm compartilhamentos de arquivos abertos no servidor que eles esqueceram de fechar, portanto as pastas estão bloqueadas.

Eu adicionei código para verificar se há arquivos abertos com net file e fechá-los se eles corresponderem a determinados padrões. A limitação é que net file resume o caminho dos arquivos abertos, por exemplo,

ID         Path                                    User name            # Locks
-------------------------------------------------------------------------------
2          C:\Program Files\...\cocoon-2.1.11\     huttarl               0

quando o caminho completo do arquivo aberto é

C:\Program Files\Apache Software Foundation\cocoon-2.1.11

Assim, quando meu script verifica se o caminho do arquivo corresponde a um determinado padrão, como "Apache", às vezes, ele perde arquivos que têm ... no meio da listagem net file .

Então, minha pergunta é: como posso obter o caminho completo de um arquivo aberto, em um script?

Atualmente, estou usando o cygwin / bash. Então, se eu tiver que mudar para o WSH, haverá alguma portabilidade para fazer. Mas se essa é a única opção, eu vou para isso.

Se for importante, o painel de informações do sistema informa que minha edição do Windows é o Windows Server Standard, (c) 2007, SP2.

    
por LarsH 16.05.2013 / 18:14

3 respostas

1

Ah ... parece que eu encontrei isso há um ano ou mais.

Acontece que, se você der a net file o ID de um arquivo aberto, ele exibirá o caminho completo.

Então, para o meu exemplo na pergunta, se eu digitei

C:\>net file 2

gostaria de receber

File ID         2
User name       huttarl
Locks           0
Path            C:\Program Files\Apache Software Foundation\cocoon-2.1.11\
Permissions     (none)
The command completed successfully.

Usar esse recurso significaria

  • analisando os números de ID da saída do comando inicial net file
  • percorrendo-os e chamando net file novamente com cada ID
  • testando a segunda saída
  • e fechando os arquivos cujos caminhos correspondem ao padrão.

Considerando que com o PSFile, eu poderia fazer tudo isso com um comando simples. Mas com net use , não preciso instalar software de terceiros quando migramos o script para um novo servidor. Decisões, decisões ...

    
por 16.05.2013 / 21:39
4

Eu achei o seguinte útil:

openfiles /query /v | findstr "string what You want"

    
por 28.04.2015 / 12:09
3

Você deve usar o PsFile

Sobre isso

The "net file" command shows you a list of the files that other computers have opened on the system upon which you execute the command, however it truncates long path names and doesn't let you see that information for remote systems. PsFile is a command-line utility that shows a list of files on a system that are opened remotely, and it also allows you to close opened files either by name or by a file identifier.

    
por 16.05.2013 / 18:29