【问题标题】:Copy all files to the destination directory in Fake f#make将所有文件复制到 Fake f#make 中的目标目录
【发布时间】:2017-08-06 08:10:41
【问题描述】:

我想将特定目录中的所有文件复制到目标目录。
我的代码运行良好,但没有文件被复制到目标文件夹。

我尝试了两种方法,但没有运气:(
这是我的代码:

方法一:

#r @"packages\FAKE\tools\FakeLib.dll"

open Fake
let buildDir = "D:/MyDir/build/"
let testDir  = "D:/MyDir/test/"

let sourceDir = "D:/Files"

// Targets
Target "Clean" (fun _ ->
CleanDirs [buildDir; testDir]
)

Target "BuildSetup" (fun _ ->
    !!(sourceDir + "\**\*.txt")
|> Copy testDir)

"Clean"
  ==>"BuildSetup"

RunTargetOrDefault "BuildSetup"

方法二:

#r @"packages\FAKE\tools\FakeLib.dll"
open Fake
let buildDir = "D:/MyDir/build/"
let testDir  = "D:/MyDir/test/"

let sourceDir = "D:/Files"

// Targets
Target "Clean" (fun _ ->
CleanDirs [buildDir; testDir ;sourceDir]
)

Target "Default" (fun _ ->
trace "Hello World from FAKE"
) 

let additionalFiles = ["D:\Files\new\*.*"]

Target "CopyFiles" (fun _ ->
CopyTo buildDir additionalFiles
)

Target "BuildSetup" (fun _ ->
    !!("D:\Files\new\*.txt")
|> Copy buildDir)


"Clean"
  //==> "Clean"
  //==> "BuildStep"
  ==> "CopyFiles"

RunTargetOrDefault "BuildSetup"

此代码正在运行,但文件未复制到目标文件夹。

请告诉我问题的根本原因,我是假的新手。

【问题讨论】:

  • 这个问题与 CMake 有什么关系?请移除 CMake 标签!
  • 你的缩进无处不在。请按原样显示您的代码,否则我们只会追逐红鲱鱼。
  • 我已经删除了不相关的 CMake、Rake 和 MSBuild 标签,因为这个问题与那些构建系统无关。
  • 要完全按照 Fyodor Soikin 的要求(我同意该要求)显示您的代码,您应该首先将其粘贴到编辑框中,然后突出显示整个代码部分并单击{} 按钮。这将在整个突出显示部分的左侧均匀地添加四个空格 - 这意味着无需手动执行经常出错的“在每行中键入四个空格”的操作。这通常会导致像您的问题一样混乱的缩进。只需使用{} 按钮:这就是它的用途,而且比手动插入空格要容易得多。
  • 顺便说一句,你的 BuildSetup 目标看起来是正确的,只要你有正确的缩进。

标签: f# f#-fake f#-fake-4


【解决方案1】:

以下是一个工作示例:

#r "./packages/FAKE/tools/FakeLib.dll"

open Fake

let source = "C:/test/source"
let additionalFilesDir = "C:/test/additional"
let dest  = "C:/test/dest/"

Target "Clean" (fun _ ->
    CleanDirs [dest]
)

Target "Default" (fun _ ->
    trace "Hello World from FAKE"
)

Target "CopyDirectory" (fun _ ->
    CopyDir (directory dest) source allFiles
)

Target "CopyAdditionalFiles" (fun _ ->
    !!(additionalFilesDir @@ "**/*")
    --(additionalFilesDir @@ "**/*.txt") //exclude '.txt' files
    |> Copy dest

    //copy will NOT fail if directory not existing
    if not <|directoryExists additionalFilesDir then
        traceError ("additionalFilesDir doesn't exist:" + additionalFilesDir)
)


"Clean"
    ==> "CopyDirectory"
    ==> "CopyAdditionalFiles"
    ==> "Default"

RunTargetOrDefault "Default"

【讨论】:

  • Alex,还有一件事,如果我想复制所有文件而不是 txt 文件,即我想排除 txt 文件,那么这可能吗?
  • @kshitijAgrawal - 通常最好打开一个新问题,而不是在 cmets 中问这种问题。但简短的版本是 -- 运算符用于从一组文件中排除事物,它采用与 !! 运算符相同的通配符字符串。你可以做!! (additionalFilesDir @@ "**/*.*") -- "*.txt" |&gt; Copy dest,适当缩进,它会做你需要的。
  • @KMittal - 更新了排除“txt”文件的答案。
猜你喜欢
  • 2017-01-16
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2018-07-04
  • 1970-01-01
相关资源
最近更新 更多