我正在尝试检查文件“ .sql”或“ .txt”是否存在字符串“ 03-22-2019”(或不存在,并在输出中显示结果)。
execution\development\process.sql insert.sql production\logs.txt restore.sql rebuild.txt
我正在尝试使用下面的代码,但是我做了太多的{{1}}。上面的文件路径存储在if else
变量中。我需要用“ \”分割路径,并获取路径的最后一部分来做其他事情。
$paths
答案 0 :(得分:0)
看起来您应该在$ paths变量之后以foreach开头,如下所示:
foreach ($path in $paths) {
if ($path -like "*.sql") { #Note the use of one single item in the $paths array you have
$last = $path.split("\")[-1]
$result = #Whatever method you want to use to return a DateTime object
if ($result) { #### Now, this line doesn't make any sense. Do you want to compare a date to an older date or something? Maybe something like "if ($result -ge (Get-Date).addDays(-1) )
{ # Do your stuff }
做类似的事情:
if ($paths -like "*.sql")
不起作用,因为$ paths是一个数组,并且您正在进行字符串比较,并且永远不会满足。现在,如果您要查找文件中是否包含字符串,则应使用“ Get-Content”或“ Import-Csv”之类的
您可以使用“ Get-Date” cmdlet获取日期的许多不同格式。了解有关该here的信息。如果您要比较多个文件的多个日期,那么我将像在上面那样对文件进行for循环,然后在每个文件上的for循环 来获取日期数组。也许是这样的:
foreach ($path in $paths) {
foreach ($date in $dates) {
# Get the contents of a file and store it in a variable
# Search for the string in that variable and store the results in a variable
# Write to the console
} # End foreach ($date in $dates)
} # End foreach ($path in $paths)
发布更多更新的代码,让我们看看您的想法。
答案 1 :(得分:0)
我会简化一点,下面是确定文件是否包含日期的示例:
$paths = @("c:\path1","c:\path2\subdir")
ForEach ($path in $paths) {
$files = Get-ChildItem -LiteralPath $path -file -include "*.sql","*.txt"
$last = ($path -split "\\")[-1] # contains the last part of the path
$output = ForEach ($file in $files) {
If (Select-String -path $file -pattern "03-22-2019") {
"$($file.fullname) contains the date."
}
else {
"$($file.fullname) does not contain the date."
}
}
}
$output # outputs whether or not a file has the date string
外部ForEach
循环遍历$paths
中的路径。在该循环内,您可以对每个路径$path
执行所需的操作。我使用$last
来存储当前迭代中路径的最后一部分。您还没有说要怎么做。
内部ForEach
检查每个 .txt 和 .sql 文件中的日期文本03-22-2019。 $output
存储一个字符串,该字符串指示每个 .txt 和 .sql 文件是否包含日期字符串。
如果您的路径包含文件名,则可以使用以下替代方法来获取文件名(路径的最后一部分):
$path | split-path -leaf # inside of the outer ForEach loop
# Or
$file.name # inside of the inner ForEach loop