Usando Sed.exe para modificar arquivos com nomes que não começam com caracteres específicos

0

Sou novo nessas coisas, então espero na ajuda de alguém.

Estou fazendo isso na versão de 32 bits do Windows Vista.

Eu tenho 2 pastas na minha área de trabalho: folder_a (com sed.exe) e folder_b com esses arquivos:

  • sand.txt
  • tree.txt
  • chair.txt
  • xyz-fork.txt
  • xyz-spoon.txt

Se eu executar um arquivo em lotes com essa string:

call "C:\Users\X\Desktop\folder_a\sed.exe" -i "1c table-zeta" "C:\Users\X\Desktop\folder_b\*xyz*.txt

Consigo alterar a primeira linha desses arquivos cujo nome de arquivo contém xyz.

Agora, o que eu quero fazer é alterar a primeira linha desses arquivos cujo nome de arquivo NÃO contém xyz; neste caso, apenas sand.txt, tree.txt e chair.txt.

Como eu faria isso?

    
por paulo_setar 18.11.2016 / 00:41

1 resposta

0

Isso pode ser um pouco deselegante, mas coloque isso no seu arquivo de lote:

setlocal enabledelayedexpansion
        ︙
for %%f in (*) do (
    set tempname=%%f
    set tempname=!tempname:xyz=!
    if %%f == !tempname! (put your sed command here) %%f
)

O comando setlocal pode estar no início do arquivo de lote, ou logo antes do loop for ou em qualquer lugar entre eles. (Eu recomendo colocá-lo no início do arquivo de lote, logo após o @echo off .) Execute cmd /? e setlocal /? para obter mais informações sobre esse comando. Basicamente, ele permite manipular variáveis em loops de uma maneira um pouco sã.

Eu presumo que você saiba o suficiente sobre arquivos em lote que você entende que FOR variable IN (set) DO command faz um loop sobre os nomes de arquivos em set (que pode incluir curingas, como * ), definindo o variable para cada nome de arquivo, e executando o command . Os parênteses (depois de do e no final) vamos ter uma multi-linha command . A sintaxe da variável normal não funciona em %%variable s, então copiamos %%f para uma variável temporária. Então usamos o %variable:str1=str2% (encontrar e substituir) forma de expansão variável para substituir todas as ocorrências de xyz em %tempname% com nulo.

Exceto , já que estamos em um loop temos que usar ! em vez de % (é aqui que entra o setlocal enabledelayedexpansion ). Em seguida, comparamos o nome do arquivo abreviado com o nome original (ainda em %%f ). Se eles são iguais, não deve haver nenhuma instância de xyz no nome do arquivo, então nós executamos o seu comando. Se eles são diferentes, isso significa que a substituição encontrou pelo menos um xyz , por isso, não executamos o seu comando.

P.S. Eu acredito que você não precisa do comando call .

    
por 29.11.2016 / 23:12