Chạy lô SOX trên các tệp trong một thư mục tương đối


1

Tôi có một tập lệnh bó cửa sổ chạy lệnh SOX trên các tệp khác nhau, nhưng tôi không biết làm thế nào để lô đó chạy trên các tệp theo đường dẫn tương đối với tệp thực thi SOX. Hiện tại tất cả các tệp nằm trong thư mục gốc và nó xuất ra / kết hợp.

Tập lệnh Batch:

cd %~dp0
mkdir combined
FOR %%A IN (*.mp3) DO sox static.mp3 %%A "combined/%%~nxA"
pause

Tôi muốn tập lệnh chạy lệnh sox trên các tệp trong thư mục "audiotracks" và xuất nó vào thư mục "kết hợp". Để cho bạn một ý tưởng, đây sẽ là cấu trúc thư mục mong muốn:

/root
  sox.exe
  batch.bat
  static.mp3
     /audiotracks
       audio1.mp3
       audio2.mp3
       audio3.mp3
       audio4.mp3
     /combined
       audio1out.mp3
       audio2out.mp3
       audio3out.mp3
       audio4out.mp3

Điều này là có thể, hoặc có một phương pháp tốt hơn để làm điều này? Mọi sự trợ giúp sẽ rất được trân trọng. Cảm ơn rất nhiều!

Câu trả lời:


1

Hãy thử chuyển đổi đầu tiên để diretory. Việc thay đổi đường dẫn lưu. (Hai dấu chấm liên tiếp có nghĩa là thư mục mẹ.)

cd %~dp0
mkdir combined
cd audiotracks
FOR %%A IN (*.mp3) DO sox static.mp3 %%A "../combined/%%~nxA"
cd ..
pause

Không hoạt động. Nó đang tìm kiếm sox.exe trong thư mục audiotracks. Có cách nào để trỏ nó đến sox.exe trong thư mục gốc không?
Matteo Cuellar Vega

Chỉ cần di chuyển sox.exe và các thư viện vào thư mục audiotracks và nó hoạt động, nhưng làm cách nào tôi có thể làm cho nó hoạt động với sox trong thư mục gốc?
Matteo Cuellar Vega

Tôi đoán rằng tôi có thể có tập lệnh bó di chuyển tất cả các mp3 có trong một thư mục mới (Ví dụ "/ input") sang "/ audiotracks" sau đó xuất chúng thành "kết hợp" và xóa mp3 khỏi "/ audiotracks". Tôi chỉ đang cố gắng tạo ra một giải pháp "một cú nhấp chuột" dễ dàng và gọn gàng hơn cho người dùng.
Matteo Cuellar Vega

Chỉ cần thử với lệnh di chuyển và nó hoạt động tốt. Cảm ơn sự giúp đỡ của bạn. Nhiều đánh giá cao!
Matteo Cuellar Vega

0

Như với hầu hết các nhiệm vụ lập trình, có nhiều hơn một cách để làm những gì bạn muốn. Việc triển khai hiện tại của bạn không quá xa với một giải pháp làm việc. Vấn đề thực sự là bạn đang nghĩ về vấn đề từ góc độ sai. Thay vì cố gắng xử lý các tệp trong audiotracksthư mục tương đối, bạn nên nghĩ về việc đưa kết quả vào combinedthư mục tương đối . Đây là cách tập lệnh của bạn có thể được điều chỉnh:

cd %~dp0
mkdir combined
cd audiotracks
FOR %%A IN (*.mp3) DO sox ..\static.mp3 "%%A" "..\combined\%%~nxA"
pause

Một cách thực hiện thay thế, linh hoạt hơn có thể là sử dụng /fđối số của forlệnh. (Chạy for /?để biết thêm chi tiết.) Làm như vậy sẽ cho phép bạn sử dụng các đường dẫn tương đối cho cả đầu vào và đầu ra.

cd %~dp0
mkdir combined
FOR /f "tokens=*" %%A IN ('dir /b .\audiotracks\*.mp3') DO sox static.mp3 "%%A" ".\combined\%%~nxA"
pause

Hãy phá vỡ nó:

  • /f có nghĩa là xử lý đầu ra của lệnh trong dấu ngoặc đơn (bên trong parens) một mã thông báo tại một thời điểm.
  • "tokens=*"có nghĩa là phân tích toàn bộ dòng đầu ra dưới dạng một mã thông báo. (Về cơ bản, điều đó có nghĩa là khoảng trắng không được coi là dấu phân cách.)
  • 'dir /b .\audiotracks\*.mp3' có nghĩa là liệt kê tất cả các tệp * .mp3 trong thư mục audiotracks mà không có ngày, kích thước hoặc siêu dữ liệu khác.

Thật không may, điều đó đã không làm việc. Nó trả về: sox định dạng FAIL: không thể mở tệp đầu vào `Audio1.mp3 ': Không có tệp hoặc thư mục như vậy. Tôi đoán nó cố gắng để có được các tập tin từ gốc.
Matteo Cuellar Vega

Các giải pháp khác làm việc cho tôi, nhưng cảm ơn sự giúp đỡ của bạn. Tôi tiếp tục học hỏi với mọi sự giúp đỡ!
Matteo Cuellar Vega

Đầu ra của là dir /b .\audiotracks\*.mp3gì? Nếu đầu ra chỉ cung cấp cho bạn tên tệp chứ không phải tên đường dẫn đầy đủ thì hãy điều chỉnh tập lệnh như sau: FOR /f "tokens=*" %%A IN ('dir /b .\audiotracks\*.mp3') DO sox static.mp3 ".\audiotracks\%%A" ".\combined\%%~nxA"
HairOfTheDog
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.