有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java powershell为每个文件构建一个要执行的字符串

我需要安排一个windows作业来循环数千个文件,并使用命令选项、文件名和扩展名执行命令

这些文件的扩展名为*。目录c:\proj中的xls。例如,其中一个文件是myImportantFile0001。xls,我将在powershell中手动执行以下操作:

PS> java.exe -classpath  "C:\PROGRA~2\my1.0.2\lib/*" com.my.madsci  -v --collector-url https://api.fun.my.com/ --oauth-url  https://api.my.com/oauth/access    --type   /fileName:string/discovery:string  --key  /fileName:"myImportantFile0001/discovery:discovery" "C:\proj\myImportantFile0001_xls.txt"

我遇到的两个问题是:

命令本身有双引号,
需要找到并转换文件名和扩展名
在powershell中执行java

那么,我如何循环遍历数千个文件来构建一个字符串以使用powershell执行命令呢


共 (4) 个答案

  1. # 1 楼答案

    此外,您还可以从powershell本身对其进行调度(与PS 3.0及以上版本配合使用)

    $trigger = New-JobTrigger -Daily -At "9:00 AM"
    $scriptPath = "C:\FilePath\myScript.ps1"
    Register-ScheduledJob -Name "MyJob" -FilePath $scriptPath -Trigger $trigger
    
  2. # 2 楼答案

    那怎么办

    PS> ls C:\Temp\*.xlsx | foreach-object {  
        "java.exe -classpath `"C:\PROGRA~2\my1.0.2\lib/*`" com.my.madsci -v --collector-url https://api.fun.my.com/ --oauth-url https://api.my.com/oauth/access --type /fileName:string/discovery:string --key /fileName:`"$($_.name)/discovery:discovery`" `"C:\proj\$($_.name)_xls.txt`""
    }
    
  3. # 3 楼答案

    你可以这样做:

    $files = Get-ChildItem "C:\temp" -Filter "*.xls"
    foreach ($file in $files) 
    {
        $command = "java.exe -classpath  ""C:\PROGRA~2\my1.0.2\lib/*"" com.my.madsci  "
        $command = $command + "-v --collector-url https://api.fun.my.com/ "
        $command = $command + "--oauth-url  https://api.my.com/oauth/access    "
        $command = $command + "--type   /fileName:string/discovery:string  "
        $command = $command + ("--key  /fileName:""{0}/discovery:discovery"" " -f $file.BaseName)
        $command = $command + ("""C:\proj\{0}_xls.txt""" -f $file.BaseName)
        Invoke-Expression $command
    }
    
  4. # 4 楼答案

    下面的脚本对你有帮助吗?我认为这只是一种组合

    $Commands = ls C:\Temp\*.xlsx | %{
    "java.exe -classpath `"C:\PROGRA~2\my1.0.2\lib/*`" com.my.madsci -v --collector-url https://api.fun.my.com/ --oauth-url https://api.my.com/oauth/access --type /fileName:string/discovery:string --key /fileName:`"$($_.BaseName)/discovery:discovery`" `"C:\proj\$($_.BaseName)_xls.txt`""
    }
    
    $Commands
    
    exit # remove the line if you want to execute
    
    $Commands | %{
    & $_
    }