Powershell模拟Linux touch以创建多个文件

时间:2016-03-30 17:57:37

标签: powershell

我是PowerShell的新手,我正在尝试创建一个可以获取空格分隔文件列表的函数,并为当前目录中的每个文件创建一个新文件。然后执行ls命令查看目录以确认已添加新文件。以下是我的工作:

function touch{
  params([String[]] $files)
   ForEach($file in $files){
   New-Item $file
  }
ls
}

这似乎不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

没有任何名为params(),它是param()。我还添加了Out-Null,因为New-Item会为其创建的每个文件返回一个FileInfo - 对象。没有它,新文件将显示两次:一次来自New-Item,一次来自ls

function touch{
  param([String[]] $files)
   ForEach($file in $files){
   New-Item -Path $file | Out-Null
  }
ls
}

touch -files "test.txt", "test2.txt        

    Directory: C:\Users\frode\TouchFolder

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       30.03.2016     20:56              0 test.txt
-a----       30.03.2016     20:56              0 test2.txt    

请注意,如果文件存在,或者如果缺少子文件夹test\test3.txt,则会使用test之类的路径,从而导致错误。您可以使用New-Item -Path $file -Force强制覆盖和子文件夹创建。

要使用参数,请尝试:

function touch{
    ForEach($file in $args){
        New-Item -Path $file | Out-Null
    }

    Get-ChildItem
}

touch index.html users.html "test 3.txt"

    Directory: C:\Users\frode\TouchFolder


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       30.03.2016     21:19              0 index.html
-a----       30.03.2016     21:19              0 test 3.txt
-a----       30.03.2016     21:19              0 users.html

答案 1 :(得分:-1)

如前所述,我想模拟Linux touch命令,以便我可以输入:

touch file.txt file2.txt

以下是我最终的结果:

function touch(){ 
   foreach($file in $args){
     New-Item -Path $file | Out-Null   
   }
  ls
}

ls命令是通过linux touch命令添加的所有命令。