249 votes

Equivalent du `touch` de Linux pour créer un fichier vide avec PowerShell

Existe-t-il un équivalent de touch dans PowerShell ?

Par exemple, sous Linux, je peux créer un nouveau fichier vide en invoquant :

touch filename

Sous Windows, c'est assez délicat - d'habitude, j'ouvre simplement une nouvelle instance de Bloc-notes et enregistrer un fichier vide.

Existe-t-il un moyen programmatique dans PowerShell pour faire cela ?

Je ne cherche pas à correspondre exactement au comportement de touch, mais simplement à trouver l'équivalent le plus simple possible pour créer des fichiers vides.

1 votes

Merci. Je les ai regardés, mais la plupart des réponses se concentrent sur l'invite de commande. J'aimerais avoir une solution PowerShell qui ne me demande pas d'installer de nouvelles applications.

0 votes

Downvoted la question - les deux fonctionnalités ne sont que quelques lignes de code de plus, il suffit d'implémenter les deux, pas seulement la moitié, surtout quand la moitié manquante de l'autre commande est si dangereuse.

223voto

Yash Agarwal Points 2930

L'utilisation du redirecteur ">>" résout le problème de la suppression d'un fichier existant :

echo $null >> filename

0 votes

Désolé, ça ne l'est pas. Cela me donne quelque chose comme cmdlet Copy-Item at command pipeline position 1 Supply values for the following parameters:

0 votes

Appuyez simplement sur Entrée, il y aura une erreur mais ignorez-la, votre fichier sera créé.

0 votes

En fait, vous avez raison, ça marche. Cependant, c'est ennuyeux de fonctionner de cette façon si vous devez l'exécuter plusieurs fois.

176voto

ugasoft Points 1280

Pour créer un fichier vierge :

New-Item example.txt

Notez que dans les anciennes versions de PowerShell, vous pouvez avoir besoin de spécifier -ItemType file .

Pour mettre à jour l'horodatage d'un fichier :

(gci example.txt).LastWriteTime = Get-Date

8 votes

Je pense que c'est la meilleure approche !

0 votes

Cela fonctionne-t-il pour mettre à jour l'horodatage d'un dossier ?

2 votes

@riahc3, utilise ça : (gi MyFolder).LastWriteTime = Get-Date . Vous pourriez aussi l'utiliser pour les fichiers.

88voto

user210235 Points 11

Voici une version qui crée un nouveau fichier s'il n'existe pas ou met à jour l'horodatage s'il existe.

Function Touch-File
{
    $file = $args[0]
    if($file -eq $null) {
        throw "No filename supplied"
    }

    if(Test-Path $file)
    {
        (Get-ChildItem $file).LastWriteTime = Get-Date
    }
    else
    {
        echo $null > $file
    }
}

4 votes

C'est la réponse correcte pour reproduire le programme Touch d'Unix (bien qu'avec un nom différent), mais la question est orientée vers la simple création d'un nouveau fichier.

18 votes

Très, très Petit détail : Alors que Touch-File se conforme à la convention de dénomination Verbe-Nom de PS, Touch n'est pas un verbe "approuvé" (non pas que ce soit une exigence importante : msdn.microsoft.com/fr/us/library/ms714428.aspx ). File est bien, au fait. Je recommande les noms Set-File o Set-LastWriteTime ou, mon préféré, Update-File . Aussi, je recommande Add-Content $file $null au lieu de echo $null > $file . Enfin, définissez un alias avec Set-Alias touch Update-File si vous voulez continuer à utiliser la commande touch

0 votes

Suggérer d'ajouter ceci comme dernière ligne : New-Alias -Name Touch Touch-File

29voto

Brandon Points 2580

Dans PowerShell, vous pouvez créer une fonction Touch similaire comme suit :

function touch {set-content -Path ($args[0]) -Value ($null)} 

Utilisation :

touch myfile.txt

Source :

0 votes

C'est génial, merci ! C'est exactement ce que je voulais ! Une idée de comment je pourrais installer cette fonction dans le PowerShell pour qu'elle se charge automatiquement lorsque je lance le Shell ?

3 votes

Ajoutez-le à votre fichier $profile. (Exécutez notepad $profile pour éditer ce fichier).

35 votes

Cela supprimera le contenu du fichier s'il existe.

24voto

Jacob E. Dawson Points 339

Il y a déjà un tas de réponses dignes d'intérêt, mais j'aime bien l'alias de New-Item qui est juste : ni

Vous pouvez également renoncer à la déclaration du type de fichier (qui, je suppose, est implicite lorsqu'une extension est ajoutée). Ainsi, pour créer un fichier javascript portant le nom 'x' dans mon répertoire actuel, je peux simplement écrire :

ni x.js

3 caractères plus rapides que le toucher !

2 votes

Ce n'est pas idempotent ni : The file 'x.js' already exists

0 votes

Un équivalent idempotent serait ac x.js $null

0 votes

En quoi cela diffère-t-il du toucher ?

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