@echo off
del 0List.txt 2 > nul
for /F "delims=" %%I in ('dir "D:\MyFolder\Ready\*.txt" /A-D /B /S 2^>nul') do echo %%~fI>>0List.txt
Usando este código, listo os arquivos TXT em uma pasta (Pronto) com suas subpastas. Ele cria o txt com a lista de arquivos. Só que quero finalmente me livrar do D;\ até Ready. Então
D:\MyFolder\Ready\file1.txt
D:\MyFolder\Ready\file2.txt
D:\MyFolder\Ready\My Sub Folder\file434.txt
deve apenas ser cortado na lista que eu crio para
Ready\file1.txt
Ready\file2.txt
Ready\My Sub Folder\file434.txt
Analisei algumas questões, mas não consegui implementá-las no código acima. Agradeceria se alguém pudesse me mostrar onde adicionar para remover a primeira parte do caminho.
Você está procurando algo assim, que mantém apenas a última folha de
%BaseDirectory%
:Antes de começarmos, observe a linha
SETLOCAL ENABLEDELAYEDEXPANSION
.Esta linha estabelece um "ambiente local", o que significa que quaisquer alterações no ambiente são descartadas quando o script termina (ou uma
ENDLOCAL
instrução é executada). O efeito é que a execução do ambiente não fica "poluída" por alterações feitas por outros trabalhos na mesma sessão.Portanto, é prática padrão incluir um
setlocal
comando no início de um arquivo em lote, imediatamente após um@echo off
O
enabledelayedexpansion
é opcional, mas é a única maneira de ativar adelayedexpansion
sintaxe, onde!var!
está o valor atual de uma variável, pois pode ser alterado em umacode block
(sequência de instruções entre parênteses). Consulte o link DELAYEDEXPANSION de Stephan para documentação.Você
del 0List.txt 2 > nul
não faz o que parece querer fazer. Ele exclui arquivos0List.txt
e2
você precisa2
diretamente antes de>
redirecionar mensagens de erro para o bit-bin.A substring em lote só pode ser conduzida em variáveis comuns, não
metavariables
como%%I
ou%1
, portanto é necessário atribuí-la a uma variável padrão antes que ela possa ser manipulada.A sintaxe
SET "var=value"
(onde value pode estar vazio; nesse casovar
torna-se indefinido ) é usada para garantir que quaisquer espaços à direita na linha de origem NÃO sejam incluídos no valor atribuído.Em seguida,
echo
o valor docutstring
segundo caractere (observe que a numeração dos caracteres no lote começa no "caractere #0" concatenado com o conteúdo atual dename
(comoname
mudará a cada loop) - exceto a string até o conteúdo decutstring
. Vejaset /?
no prompt para documentação - ou milhares de exemplos em SO.Deixei a saída sendo exibida no console.