Le code de fichier de commandes utilisé par moi:

for /r %%f in (*) do (
    echo %%~nf >>testy.txt
)
for /f "tokens=*" %%a in (testy.txt) do (
    set _temp=%%a
    for /f "tokens=30*" %%g in (_temp) do (
        echo large=%%g>>length.txt
    )
)

Il devrait créer length.txt avec des caractères à la 30e place et au-dessus, mais il échoue dans la 3e boucle for qui devrait créer length.txt.

1
Praneeth 19 nov. 2018 à 19:54

3 réponses

Meilleure réponse

Tant que votre répertoire a des noms de fichiers standard avec des extensions, vous pouvez probablement utiliser quelque chose de beaucoup plus simple:

@Where .:"??????????????????????????????*.*">"length.txt"

Cela devrait afficher tous les fichiers du répertoire courant contenant 30 caractères ou plus dans leurs noms de fichiers, (en ignorant l'extension).

0
Compo 19 nov. 2018 à 17:42

Cela peut être fait avec le fichier de commandes suivant sur aucun nom de fichier d'un fichier non caché ne contient un point d'exclamation.

@echo off
setlocal EnableExtensions EnableDelayedExpansion

(for %%I in (*) do (
    set "FileName=%%~nI"
    if not defined FileName set "FileName=%%~xI"
    if not "!FileName:~30!" == "" echo %%~nxI
))>length.txt

rem Delete length.txt if being an empty file.
for %%I in (length.txt) do if %%~zI == 0 del length.txt
endlocal

Le prochain fichier batch est plus lent, mais les processus corrigent également les fichiers non cachés avec un ! dans le nom de fichier.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

(for %%I in (*) do (
    set "FileName=%%~nI"
    if not defined FileName set "FileName=%%~xI"
    setlocal EnableDelayedExpansion
    if not "!FileName:~30!" == "" echo %%~nxI
    endlocal
))>length.txt

rem Delete length.txt if being an empty file.
for %%I in (length.txt) do if %%~zI == 0 del length.txt
endlocal

Les deux fichiers batch traitent le nom d'un fichier tel que .htaccess comme fichier avec le nom de fichier .htaccess et sans extension de fichier tandis que le processeur de commandes Windows gère ces fichiers comme le nom de fichier étant vide et l'extension de fichier est {{X2 }}.

Pour comprendre les commandes utilisées et leur fonctionnement, ouvrez une fenêtre d'invite de commandes, exécutez les commandes suivantes et lisez attentivement toutes les pages d'aide affichées pour chaque commande.

  • del /?
  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • rem /?
  • set /?
  • setlocal /?
1
Mofi 19 nov. 2018 à 17:10

Certaines choses sont beaucoup plus faciles à faire dans PowerShell

Être sur le sujet enveloppé dans un fichier batch

:: Q:\Test\2018\11\19\SO_53379317.cmd
Echo off
Set Len=30
For /f "delims=" %%A in ('
  powershell -NoP -C "(Get-ChildItem '%CD%' -File| Where-Object {$_.Name.Length -gt %Len%}).Name.SubString(%Len%)"
') Do Echo %%A

Si vous voulez la longueur du lecteur, le chemin, le nom et l'extension, remplacez .Name par .FullName
Le nom du fichier sans extension serait .BaseName

Le paramètre -File nécessite PSv3 + (présent dans Windows 8+)

1
user6811411user6811411 19 nov. 2018 à 17:46