Esta pregunta ya tiene una respuesta aquí:
- ¿Windows equivalente al comando de Linux 'touch'? 31 respuestas
En PowerShell, ¿hay un equivalente de touch
?
Por ejemplo, en Linux puedo crear un nuevo archivo vacío invocando:
touch filename
En Windows, esto es bastante incómodo: por lo general, solo abro una nueva instancia del bloc de notas y guardo un archivo vacío.
Entonces, ¿hay una forma programática en PowerShell para hacer esto?
No busco igualar exactamente el comportamiento del tacto, sino solo encontrar el equivalente más simple posible para crear archivos vacíos.
windows
windows-8
powershell
powershell-3.0
jsalonen
fuente
fuente
touch
en Linux.touch
en un archivo existente, actualizará el último tiempo de escritura sin modificar el archivo, vea los enlaces de @amiregelz. Esta pregunta tiene una clasificación alta en Google parapowershell touch
, quería alertar a los copiadores / pegadores de que solo esta mitad puede destruir datos, cuando * nix touch no lo hace. Vea la respuesta @LittleBoyLost que maneja cuando el archivo ya existe.Respuestas:
El uso del redireccionador de anexos ">>" resuelve el problema donde se elimina un archivo existente:
fuente
$null > filename
funciona muy bien..gitignore
usando este comando y te preguntas por qué no funcionará. BOM es la razón.Para crear un archivo en blanco:
Para actualizar la marca de tiempo de un archivo:
fuente
(gi MyFolder).LastWriteTime = Get-Date
. También puedes usar eso para archivos.ni example.txt
Aquí hay una versión que crea un nuevo archivo si no existe o actualiza la marca de tiempo si existe.
fuente
Touch
no es un verbo "aprobado" (no es un requisito significativo: msdn.microsoft.com/en-us/library/ms714428. aspx ).File
está bien, por cierto. Recomiendo los nombresSet-File
oSet-LastWriteTime
, o, mi favorito,Update-File
. Además, recomendaría enAdd-Content $file $null
lugar deecho $null > $file
. Finalmente, establezca un alias conSet-Alias touch Update-File
si desea seguir usando el comandotouch
New-Alias -Name Touch Touch-File
En PowerShell puede crear una función táctil similar como tal:
Uso:
touch myfile.txt
Fuente
fuente
function touch { if((Test-Path -Path ($args[0])) -eq $false) { set-content -Path ($args[0]) -Value ($null) } }
yo prefiero
para esta tarea Para trabajar con archivos no vacíos, puede usar
fc
es simplemente un alias para Format-Custom . Lo elegí porque es un comando corto que no hace nada en este contexto, un noop . También es bueno porque si olvidas la redirecciónen lugar de darte un error, nuevamente no hace nada. Algunos otros alias que funcionarán son
fuente
Ya hay un montón de respuestas dignas, pero me gusta bastante el alias de New-Item que es solo: ni
También puede renunciar a la declaración de tipo de archivo (que supongo que está implícito cuando se agrega una extensión), por lo que para crear un archivo javascript con el nombre de 'x' en mi directorio actual, simplemente puedo escribir:
¡3 caracteres más rápido que el tacto!
fuente
ni : The file 'x.js' already exists
Reuní varias fuentes y terminé con lo siguiente, que satisfizo mis necesidades. Necesitaba establecer la fecha de escritura de una DLL que se creó en una máquina en una zona horaria diferente:
Por supuesto, también puede configurarlo para múltiples archivos:
fuente
Abre tu archivo de perfil:
Agregue la siguiente línea:
Guárdelo y vuelva a cargar su perfil $ para usarlo de inmediato. (No es necesario cerrar y abrir powershell)
Para agregar un nuevo archivo en el tipo de directorio actual:
Para agregar un nuevo archivo dentro del directorio 'myfolder' escriba:
Si ya existe un archivo con el mismo nombre, no se anulará. En cambio, obtendrá un error.
Espero que ayude
Consejo de bonificación:
Puede hacer el equivalente de 'mkdir' agregando la siguiente línea:
Mismo uso:
fuente
No eliminará el contenido del archivo, pero tampoco actualizará la fecha.
fuente
Parece que muchas de las respuestas aquí no tienen en cuenta la codificación de archivos.
Me encontré con este problema, por varias otras razones, pero
ambos producen un archivo UTF-16-LE, mientras que
produce un archivo UTF-8.
Por alguna razón
fc > $file
yfc >> $file
, también parece producir archivos UTF-8.le da un archivo UTF-8-BOM, mientras
le da un archivo UTF-8. Otras codificaciones válidas (pero no probadas) que admite Out-File son: [[-Encoding] {unknown | cadena | unicode | bigendianunicode | utf8 | utf7 | utf32 | ascii | por defecto | oem}]. También puede canalizar cosas a Out-File para darle al archivo algunos datos de texto para almacenar, y también un indicador -append. Por ejemplo:
este ejemplo no actualiza la marca de tiempo por algún motivo, pero este sí:
Aunque tiene el efecto secundario de agregar "foo" al final del archivo.
Si no está seguro de qué codificación tiene, he descubierto que VS-Code tiene una característica ingeniosa en la que en la esquina inferior derecha dice cuál es la codificación. Creo que Notepad ++ también tiene una característica similar.
fuente
Set-Content -Path $file -value $null
hace el trabajo y no afecta la codificación de archivos. Compruebe también la versión de SS64touch
.Para el escenario que describió (cuando el archivo no existe), esto es rápido y fácil:
Sin embargo, el otro uso común de
touch
es actualizar la marca de tiempo del archivo. Si intenta usar misc
ejemplo de esa manera, borrará el contenido del archivo.fuente
sc
significa Editar: descifrado ("Establecer contenido")Para crear un archivo vacío en Windows, la forma más rápida es la siguiente:
El cero es el tamaño del archivo en bytes, por lo que esto también es útil para crear un archivo grande (no serán útiles para probar la compresión, ya que no contienen datos reales y se comprimirán hasta casi nada)
fuente
La página web http://xahlee.info/powershell/PowerShell_for_unixer.html sugiere:
y esto de hecho crea un nuevo archivo de tamaño cero.
Esto no realiza la otra función de Unix
touch
, es decir, actualizar la marca de tiempo si el nombre de archivo ya existe, pero la pregunta implica que el usuario solo quiere crear un archivo de tamaño cero de forma interactiva sin recurrir al Bloc de notas.fuente
Usé el nombre "Write-File" porque "Touch" no es un verbo aprobado de PowerShell . Todavía lo alias como toque, sin embargo.
Touch.psm1
Uso:
Apoya:
Credential
para rutas de redVerbose
,Debug
yWhatIf
banderasfuente
New-Item
comando se ha ofrecido en cuatro respuestas anteriores. Le proporcionó un contenedor de 20 líneas. ¿Puede explicar un poco más claramente qué ventaja tiene su solución sobre las anteriores? Por ejemplo, ¿cuáles son estosVerbose
,Debug
yWhatIf
banderas, etc?New-Item
es que actualiza la marca de tiempo de los archivos existentes.