1 votes

Batch : liste des fichiers sélectionnés

Je ne sais pas comment afficher les fichiers sélectionnés dans le bloc-notes sans extension.

voici une première étape, si vous avez une idée

@echo off
set dirpath=%1 
dir %dirpath% /b /o:gen > #Tree.txt
start notepad.exe #Tree.txt

Merci pour votre réponse rapide "It Wasn't Me / Wasif Hasan".

En fait, je sélectionne les fichiers que je veux enregistrer le nom de fichier dans un fichier texte. j'utilise la commande send to pour rediriger vers le raccourci *.bat

Je ne sais pas exactement comment sélectionner les fichiers et exécuter vos codes, cela me renvoie un fichier vierge.


Pour plus de précision, je ne veux pas qu'une boîte de dialogue s'ouvre et cherche un chemin de fichier différent, c'est trop long. Je veux dans différents dossiers sélectionner plusieurs fichiers mais pas tous, faire un clic droit / envoyer à / 'le programme batch' et il me listera les fichiers sans extension dans un fichier texte ouvert.


Bonne solution que j'ai adaptée J'ai besoin d'un programme pour cacher la console : la commande est 'cmdow @ /HID'.

copier le fichier de ritchielawrence-cmdow-1bbcd2b \bin\Release\cmdow.exe à C:\Windows\System32

https://github.com/ritchielawrence/cmdow/tarball/master

cmdow @ /HID
@echo off && SetLocal EnableDelayedExpansion & color 0a & mode 113,13

set "_file=C:\xxxmypathxxx\#Tree.txt" && if /i not exist "%APPDATA%\Microsoft\Windows\SendTo\%~nx0"  (
copy "%~dpnx0" "%APPDATA%\Microsoft\Windows\SendTo\" ) else (
<nul cd.>"!_file!" && for %%# in (%*)do echo/%%~n#>>"!_file!")
type "!_file!" | clip & "%__APPDIR__%notepad.exe" "!_file!"

0 votes

Utilisez forfiles 代わりに dir .

0 votes

Modifier votre question après avoir reçu des réponses est inapproprié, car cela invalide les réponses que vous avez reçues. Cela peut même rendre ces réponses erronées et nuire à la réputation de ceux qui ont répondu. Si vous avez maintenant une nouvelle question ou une question supplémentaire, créez un nouveau message et posez-la à cet endroit ; vous pouvez faire un lien vers ce message si nécessaire pour référence.

0 votes

Désolé, je suis nouveau sur le forum

1voto

iTwasnTme Points 5586

  • Peut-être un peu comme ça ?

    @echo off && SetLocal EnableDelayedExpansion & color 0a & mode 113,13

    set "_file=%~dp1!random!.txt" && if /i not exist "%APPDATA%\Microsoft\Windows\SendTo\%~nx0" ( copy "%~dpnx0" "%APPDATA%\Microsoft\Windows\SendTo\" ) else ( <nul cd.>"!_file!" && for %%# in (%*)do echo/%%~n#>>"!_file!") type "!_file!" | clip & "%APPDIR%notepad.exe" "!_file!"


  • Mise à jour :
    • 1) Il suffit de copier le code et de le sauvegarder comme suit : list_name.cmd
    • 2) Cliquez dans list_name.cmd et sélectionnez vos fichiers
    • 3) Le fichier List.txt sera créé dans le même dossier que celui où se trouve le fichier list_name.cmd.
    • 4) Le fichier List.txt sera ouvert par list_name.cmd lorsque ce travail sera terminé.

Obs.. : Il s'agit d'un code/cmd simplement adapté pour s'exécuter dans le script hybride cmd/vbs/ps1, et, ceci aussi, est d'un autre script adapté par goncons et ils Les sources sont ici !


enter image description here


<!-- ::
@echo off && cls && mode con:cols=60lines=5 & title Select Files^!
<nul cd.>.\List.txt
for /f tokens^=* %%i in ('%__APPDIR__%CScript //NoLogo "%~f0?.wsf"
   ')do if not "%%~i" == "NO Files Selected" ( set "_n=%%~ni" && (
     cmd /v /c echo/!_n!>>.\List.txt)) else echo/Canceled  By User^!
if exist .\List.txt type .\List.txt |findstr . >nul && start "" /b .\List.txt
exit /b
# -->

<job><script language="vbscript">
Private Function SelectFiles(InitialDir, Filter)
    Dim result : result = ""
    With WScript.CreateObject("WScript.Shell").Exec( _
        "powershell.exe -NonInteractive -NoProfile -NoLogo -Command ""& {" & _
            "[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms');" & _
            "$objOFDialog = New-Object System.Windows.Forms.OpenFileDialog;" & _
            "$objOFDialog.Filter = '" & Filter & "';" & _
            "$objOFDialog.InitialDirectory = '"  & InitialDir & "';" & _
            "$objOFDialog.Multiselect = $True;" & _
            "$objOFDialog.RestoreDirectory = $True;" & _
            "$objOFDialog.ShowHelp = $True;" & _
            "$objOFDialog.SupportMultiDottedExtensions = $True;" & _
            "$objOFDialog.Title = 'SelectFiles (" & InitialDir & ")';" & _
            "[void]$objOFDialog.ShowDialog();" & _
            "$objOFDialog.FileNames -join '|'" & _
        "}""")
        .StdIn.Close ' Important if not the script hangs:

        While .Status = 0
            WScript.Sleep 100
        Wend ' .Status = 0
        if .ExitCode = 0 Then
            While Not .stdOut.AtEndOfStream
                result = result & .stdOut.ReadAll
            Wend ' Not .stdOut.AtEndOfStream
            ' Convert the string to an array of file paths
            SelectFiles = Split(Replace(result, vbCrLf, ""), "|")
        Else
            While Not .stdErr.AtEndOfStream
                result = result & .stdErr.ReadAll
            Wend ' Not .stdErr.AtEndOfStream
            WScript.Echo result
            SelectFiles = False
        End If ' .ExitCode = 0
    End With ' WScript.CreateObject("WScript.Shell").Exec(...)
End Function ' SelectFiles

Dim SelectedFiles
SelectedFiles = SelectFiles(".", "Text Files *.*")

If IsArray(SelectedFiles) Then
    If UBound(SelectedFiles) >= 0 Then
        WScript.Echo "Selected Files: " & Join(SelectedFiles, vbCrLf)
    Else
        WScript.Echo "NO Files Selected"
    End If ' UBound(SelectedFiles) >= 0

    WScript.Quit 0
Else
    WScript.Quit 1
End If ' IsArray(SelectedFiles)
</script></job>

En modifiant la 5e ligne dans set "_n=%%~ni vous pouvez également obtenir :


set "_n=%%~xi"         x = will save .ext only
set "_n=%%~ni"         n = will save name only
set "_n=%%~pi"         p = will save path only
set "_n=%%~di"         d = will save drive only
set "_n=%%~fi"         f = will save full path
set "_n=%%~dpnxi"   dpnx = will save full path

type 'for /?' there is more optins in help command... 


  • Vieux poste

Cela suppose que vous utilisez cette disposition de commande :

file.bat c:\some\path\for\argument

Dans votre code, le %~1 == 1st argument


Vous pouvez le faire en utilisant un boucle for avec une variable intérieure étendue.

Vous n'avez pas besoin de définir une variable %dirpath% pour avoir utilisé %1 .

Parce que cela vous permet de l'utiliser directement : dir %1 comme :


  • Pour les seuls noms sans extension :

    @echo off

    nul cd.>.#Tree.txt && for /f ^tokens^= %%i in (' dir "%~1*." /b /o:gen')do echo=%%~ni>>.#Tree.txt

    if exist .#Tree.txt @start notepad.exe .#Tree.txt


  • Pour les noms de chemin complets sans extension :

    @echo off

    nul cd.>.#Tree.txt && for /f ^tokens^= %%i in (' dir/b/o:gen "%~1*."')do echo=%%~dpni>>.#Tree.txt

    if exist .#Tree.txt @start notepad.exe .#Tree.txt

<strong><a href="https://ss64.com/nt/for_f.html" rel="nofollow noreferrer"><code>For loop explained here</code></a></strong>

0voto

programmer365 Points 1

Vous pouvez utiliser forfiles :

  • Seulement les noms de fichiers

    @echo off if exist "%~1" forfiles /p "%~1" /m . /c "cmd /c echo @file" >#tree.txt if exist ".#tree.txt" notepad.exe .#tree.txt

  • Noms de fichiers + extensions

    @echo off if exist "%~1" forfiles /p "%~1" /m . /c "cmd /c echo @file.@ext" >#tree.txt if exist ".#tree.txt" notepad.exe .#tree.txt

0 votes

Le premier extrait de code semble toujours inclure les extensions de fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X