超越比较 - 通过命令行:FilePath中的空格

时间:2015-08-28 03:44:40

标签: command-line beyondcompare

我试图通过命令行超越比较。

我使用的命令是:

class AsyncWorkScheduler
{
    public AsyncWorkScheduler(int numberOfSlots)
    {
        m_slots = new Task[numberOfSlots];
        m_availableSlots = new BufferBlock<int>();
        m_errors = new List<Exception>();
        m_tcs = new TaskCompletionSource<bool>();
        m_completionPending = 0;

        // Initial state: all slots are available
        for(int i = 0; i < m_slots.Length; ++i)
        {
            m_slots[i] = Task.FromResult(false);
            m_availableSlots.Post(i);
        }
    }

    public async Task ScheduleAsync(Func<int, Task> action)
    {
        if (Volatile.Read(ref m_completionPending) != 0)
        {
            throw new InvalidOperationException("Unable to schedule new items.");
        }

        // Acquire a slot 
        int slotNumber = await m_availableSlots.ReceiveAsync().ConfigureAwait(false);

        // Schedule a new task for a given slot
        var task = action(slotNumber);

        // Store a continuation on the task to handle completion events
        m_slots[slotNumber] = task.ContinueWith(t => HandleCompletedTask(t, slotNumber), TaskContinuationOptions.ExecuteSynchronously);
    }


    public async void Complete()
    {
        if (Interlocked.CompareExchange(ref m_completionPending, 1, 0) != 0)
        {
            return;
        }

        // Signal the queue's completion
        m_availableSlots.Complete();

        await Task.WhenAll(m_slots).ConfigureAwait(false);

        // Set completion
        if (m_errors.Count != 0)
        {
            m_tcs.TrySetException(m_errors);
        }
        else
        {
            m_tcs.TrySetResult(true);
        }

    }

    public Task Completion
    {
        get
        {
            return m_tcs.Task;
        }
    }



    void SetFailed(Exception error)
    {
        lock(m_errors)
        {
            m_errors.Add(error);
        }

    }

    void HandleCompletedTask(Task task, int slotNumber)
    {
       if (task.IsFaulted || task.IsCanceled)
       {
           SetFailed(task.Exception);
           return;
       }

       if (Volatile.Read(ref m_completionPending) == 1)
       {
           return;
       }


        // Release a slot
        m_availableSlots.Post(slotNumber);
    }

    int m_completionPending;
    List<Exception> m_errors;
    BufferBlock<int> m_availableSlots;
    TaskCompletionSource<bool> m_tcs;
    Task[] m_slots;

}

但由于名称文件中的空格,这不起作用。

Beyond Compare显示“找不到文件”错误(因为它只查找空格前的fileName部分)

如果我比较文件名中没有任何空格的文件,它就可以工作。

1 个答案:

答案 0 :(得分:5)

由于您正在运行脚本但未显示该脚本,我怀疑您没有正确引用其中的参数。命令行上的引号将作为命令行处理的一部分被删除,因此如果您的脚本是:

file-report layout:side-by-side %1 %2 output-to:printer

它应该是

file-report layout:side-by-side "%1" "%2" output-to:printer

如果没有额外的引号,变量将被扩展为:

file-report layout:side-by-side File 1.xml File 2.xml output-to:printer