*/ EDIT
1. You have to use variable replace/substring (changes to the content of the character string in the variable that stores the name), in your case, define the name and operate the substitutions:
- Removing strings in variable (using replace unreplaceable):
Set "_Var=!_Var: String = ⇩ !" <==> Set "_Var=!_Var:String=!"
Set "_Var=!_Var: String = N a d a A q u i !" <==> Set "_Var=!_Var:Remover=!"
Set "_Var=!_Var:TESTE_ARQUIVO_= N a d a A q u i !" <==> Set "_Var=!_Var:TESTE_ARQUIVO_=!"
- Replacing strings in variable (using replace):
Set "_Var=!_Var: String = ⇩ !" <==> Set "_Var=!_Var:string=adicionar!"
Set "_Var=!_Var: String = Substituir Por !" <==> Set "_Var=!_Var:Replace=EssaString!"
Set "_Var=!_Var:TESTE_ARQUIVO_= Substituir Por !" <==> Set "_Var=!_Var:TESTE_ARQUIVO_=NOVO_!"
2. Use the command Rename string*.* stringNOVO_*.*
is too vague to run on one or multiple files/names, does not work well so:
- Commando
rename
and as the command interpreter (cmd.exe) will take over/understand and execute "mechanically":
rem :: vai renomear todos os arquivos de todas as extensões
rem :: onde a string no nome literalmente bata com "a_string"
rem :: alterando para "b_string" apenas o nome e mantendo a extensão:
>rename a_string.* b_string.*
rem :: resulta a_string.txt ==> b_string.txt
rem :: resulta a_string.jpg ==> b_string.jpg
rem :: resulta a_string.rar ==> b_string.rar
rem :: vai renomear todos os arquivos com a extensão .txt onde o primeiro
rem :: caractere no nome bater com "a" e a sua extensão for igual ".txt",
rem :: alterando o primeiro caractere "a" no nome para "b", e mantendo
rem :: as outras strings no nome e a extensão do arquivo:
rem :: susbtituir o primeiro caractere a por b
>rename a*.txt b*.txt
rem :: resulta a_string.txt ==> b_string.txt
rem :: vai renomear todos os arquivos com a extensão .txt onde o primeiro caractere no
rem :: nome for igual a "a", e alterando o tambem o segundo caractere no nome, onde
rem :: o primeiro ele vai alterar de "a" para "b", e o (um) segundo caracter
rem :: qualquer, ele vai alterar de "?" para "b", e mantendo as strings restantes
rem :: (do terceiro carater ao último caractere) no nome e a sua extensão sem
rem :: alterações, alterando o primeiro e um segundo caractere no nome
rem :: susbtituir o primeiro e o segundo caractere por bb
>rename a*.txt bb*.txt
rem :: resulta a_string.txt ==> bbstring.txt
rem :: vai renomear todos os arquivos com a extensão .txt onde o primeiro caractere no
rem :: nome for igual a "a", e alterando o tambem o segundo e terceiro caracteres no
rem :: nome, onde o primeiro ele vai alterar de "a" para "b", o (um) segundo caracter
rem :: qualquer e o (um) terceiro caracter qualquer ele vai alterar de "??" para "bb",
rem :: e mantendo as strings restantes (do quarto carater ao último caractere) no
rem :: nome e sua extensão sem alterações, assim soment alterando o primeiro,
rem :: o segundo e também o terceiro caractere no nome do arquivo
rem :: susbtituir primeiro, segundo e terceiro caractere por bbb
>rename a*.txt bbb*.txt
rem :: resulta a_string.txt ==> bbbtring.txt
rem :: da mesma forma que ocorreu nas ações acima, você também voce
rem :: pode entender que o ocorreu com o seu comando, onde os seus
rem :: cinco primeiros caracteres foraam susbtituidos por
rem :: outros cinco caracteres, renomeando o seu arquivo:
rem :: de "TESTE_ARQUIVO_*"
rem :: para "NOVO_*"
rem ::
rem :: O contraio também não funciona:
rem ::
rem :: // nome de origem não é explicitado, é selecionado
rem :: de "NOVO_*"
rem :: // nome de destino não é explicitado, é selecionado
rem :: para "TESTE_ARQUIVO_*"
3. To understand what happens, you need to realize the difference of selecting x explicitly:
rem :: nome de arquivo é passado para o interpretador por seleção
rem :: todos os arquivos que iniciam por TESTE_ARQUIVO_ e contenha
rem :: qualquer comprimento de carateres (*) após a string TESTE_ARQUIVO_,
rem :: passe ao comando interno rename/ren o (ou cada) arquivo para renomear
rem :: para NOVO_+todas as strings restantes, assim substituindo no arquivo(s)
rem :: selecionado(s), os cinco primeiras caracteres no nome, no seu caso, subtituir
rem :: TESTE pelos cinco caracters passadas na selação para destino, NOVO_
>rename "TESTE_ARQUIVO_*.txt" "NOVO_*.txt"
rem :: resulta TESTE_ARQUIVO_202111301.txt ==> NOVO__ARQUIVO_202111301.txt
rem :: passando de forma explicita os nomes de de origem e destino
>rename "TESTE_ARQUIVO_202111301.txt" "NOVO_20211301.txt"
4. It would be the case to use one for
loop to make the source file names to be passed in variables that can expand to the explicit form, and also with the destination names, but in these, using variables with the Replaces facilitating the use of explicitly:
for %i in ("\\caminho onde devo atualizar\*nome_anterior*.*")do set "_Nome=%~nxi" && cmd/v/c (ren "%~i" "!_Nome:Teste_Arquivo_=!")
rem :: esse loop vai te trazer em %i, o caminho completo e o nome do arquivo
rem :: de forma já explicita de cada arquivo que atende a seleção, dai é
rem :: fazer uso no comando rename "%~i" ....
rem :: defina o nome que retona na variavel %~i, já expandindo a variavel
rem :: para a forma explita compondo com replace, o nome explicito do destino
rem :: Nome eXtensão de %i
rem :: set "_Nome=%~nxi"
rem :: force a expanção da variável com atraso em tempo de execução
rem :: para remover !_Nome:Teste_Arquivo_=!
rem :: "!_Nome:Teste_Arquivo_=!"
rem :: as duas ações um só comando
rem :: set "_Nome=%~nxi" && cmd/v/c (ren "%~i" "!_Nome:Teste_Arquivo_=!")
EDIT */
rename \\caminho onde devo atualizar\TESTE_ARQUIVO_* NOVO_
Are you trying to apply/use a syntax of cmd/rename
in Powershell, it doesn’t work well like this...
Get-ChildItem -File '\\caminho onde devo atualizar' | rename-item -NewName {$_.name -replace 'ARQUIVO_',''} -WhatIf
Get-ChildItem -File
list your files
gci -af '\\caminho onde devo atualizar' | ren -New {$_.name -replace 'ARQUIVO_',''} -WhatIf
Note: 1 Does not apply to subdirectories, in such cases use: -Directory
or -re
| ren -new
Each item/file listed is redirected to rename by setting the new name where the string is removed ARQUIVO_
Note: 2 To apply subfolders and not to files, remove -FILE | -af
and add recursion -Directory
or -ad
gci -ad -r '\\caminho onde devo atualizar' | ren -New {$_.name -replace 'ARQUIVO_',''} -WhatIf
Note: 3 Using -WhatIf
, Powershell gives you a forecast of the actions that will be executed, without effectively changing anything, so use to make sure that the command will be applied from the correct folder and files, then just remove -WhatIf
gci -af '\\caminho onde devo atualizar' | ren -New {$_.name -replace 'ARQUIVO_',''}
Note: 4 To apply the action only to a defined extension:
gci -af '\\caminho onde devo atualizar\*.xlsx' | ren -New {$_.name -replace 'ARQUIVO_',''} -WhatIf
Note: 5 To apply the action to a group of defined extensions:
'*.pdf','*.txt','*.rar' | % {gci -af -r '\\caminho onde devo atualizar' | ren -New {$_.name -replace 'ARQUIVO_',''} -WhatIf }
So this command needs to run at the MSDOS prompt, not in the Powershell (Updated Title)....
– Valter Silva
MSDOS prompt? It was not extinguished in the 90’s? MS-DOS prompt is the same thing as cmd?
– yoyo
@Yoyo This is more for speaking mode that refers/association to
prompt de comando
in the current command interpreter (cmd.exe
for the former users ofcommand.com
in thePrompt/MS-DOS
)– It Wasn't Me
@Valtersilva Eh I guided by Tag Powershell of his previous edition
– It Wasn't Me